Merge "Revert "[search] Remove more dead code""
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Thu, 16 Mar 2017 11:09:43 +0000 (11:09 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Thu, 16 Mar 2017 11:09:44 +0000 (11:09 +0000)
78 files changed:
RELEASE-NOTES-1.29
includes/DefaultSettings.php
includes/Revision.php
includes/Setup.php
includes/TemplateParser.php
includes/api/i18n/fr.json
includes/cache/MessageCache.php
includes/changes/ChangesListFilter.php
includes/changes/ChangesListFilterGroup.php
includes/import/WikiRevision.php
includes/installer/MysqlUpdater.php
includes/installer/SqliteUpdater.php
includes/installer/i18n/br.json
includes/libs/filebackend/SwiftFileBackend.php
includes/libs/rdbms/database/Database.php
includes/skins/Skin.php
includes/specialpage/QueryPage.php
includes/specialpage/WantedQueryPage.php
includes/widget/SearchInputWidget.php
languages/i18n/ang.json
languages/i18n/arq.json
languages/i18n/az.json
languages/i18n/be-tarask.json
languages/i18n/bn.json
languages/i18n/br.json
languages/i18n/ce.json
languages/i18n/ceb.json
languages/i18n/de.json
languages/i18n/en.json
languages/i18n/fr.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/ilo.json
languages/i18n/it.json
languages/i18n/ka.json
languages/i18n/ko.json
languages/i18n/lb.json
languages/i18n/nan.json
languages/i18n/nl.json
languages/i18n/pl.json
languages/i18n/ro.json
languages/i18n/ru.json
languages/i18n/se.json
languages/i18n/sh.json
languages/i18n/sk.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/tr.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/archives/patch-image-user-index-2.sql [new file with mode: 0644]
maintenance/archives/patch-image-user-index.sql
maintenance/parse.php
maintenance/tables.sql
resources/Resources.php
resources/lib/jquery.ui/PATCHES [new file with mode: 0644]
resources/lib/jquery.ui/themes/smoothness/PATCHES [deleted file]
resources/src/mediawiki.action/mediawiki.action.view.postEdit.js
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterWrapperWidget.less
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FormWrapperWidget.js
resources/src/mediawiki.special/mediawiki.special.search.interwikiwidget.styles.less
resources/src/mediawiki.special/mediawiki.special.search.styles.css
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.js
resources/src/mediawiki.widgets/mw.widgets.DateInputWidget.less
resources/src/mediawiki.widgets/mw.widgets.SearchInputWidget.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/page/ready.js
tests/common/TestsAutoLoader.php
tests/phpunit/includes/TemplateParserTest.php
tests/phpunit/includes/changes/ChangesListBooleanFilterGroupTest.php
tests/phpunit/includes/changes/ChangesListBooleanFilterTest.php
tests/phpunit/includes/changes/ChangesListFilterGroupTest.php [new file with mode: 0644]
tests/phpunit/includes/changes/ChangesListFilterTest.php [new file with mode: 0644]
tests/phpunit/includes/search/SearchIndexFieldTest.php
tests/phpunit/mocks/MockChangesListFilter.php [new file with mode: 0644]
tests/phpunit/mocks/MockChangesListFilterGroup.php [new file with mode: 0644]
tests/qunit/suites/resources/mediawiki/mediawiki.loader.test.js

index c68c677..8eb1f89 100644 (file)
@@ -33,6 +33,8 @@ production.
   feature flag will likely be removed before 1.29 is released.
 * (T158474) "Unknown user" has been added to $wgReservedUsernames.
 * (T156983) $wgRateLimitsExcludedIPs now accepts CIDR ranges as well as single IPs.
+* $wgDummyLanguageCodes is deprecated. Additional language code mappings may be
+  added to $wgExtraLanguageCodes instead.
 
 === New features in 1.29 ===
 * (T5233) A cookie can now be set when a user is autoblocked, to track that user
index dce6d3c..192ad08 100644 (file)
@@ -2904,6 +2904,14 @@ $wgExtraLanguageCodes = [
        'simple' => 'en', // Simple English
 ];
 
+/**
+ * Functionally the same as $wgExtraLanguageCodes, but deprecated. Instead of
+ * appending values to this array, append them to $wgExtraLanguageCodes.
+ *
+ * @deprecated since 1.29
+ */
+$wgDummyLanguageCodes = [];
+
 /**
  * Set this to true to replace Arabic presentation forms with their standard
  * forms in the U+0600-U+06FF block. This only works if $wgLanguageCode is
index 4b9435a..dca2e1b 100644 (file)
@@ -1240,8 +1240,9 @@ class Revision implements IDBAccessObject {
 
        /**
         * Get revision text associated with an old or archive row
-        * $row is usually an object from wfFetchRow(), both the flags and the text
-        * field must be included.
+        *
+        * Both the flags and the text field must be included. Including the old_id
+        * field will activate cache usage as long as the $wiki parameter is not set.
         *
         * @param stdClass $row The text data
         * @param string $prefix Table prefix (default 'old_')
@@ -1252,8 +1253,6 @@ class Revision implements IDBAccessObject {
         * @return string|false Text the text requested or false on failure
         */
        public static function getRevisionText( $row, $prefix = 'old_', $wiki = false ) {
-
-               # Get data
                $textField = $prefix . 'text';
                $flagsField = $prefix . 'flags';
 
@@ -1269,20 +1268,36 @@ class Revision implements IDBAccessObject {
                        return false;
                }
 
-               # Use external methods for external objects, text in table is URL-only then
+               // Use external methods for external objects, text in table is URL-only then
                if ( in_array( 'external', $flags ) ) {
                        $url = $text;
                        $parts = explode( '://', $url, 2 );
                        if ( count( $parts ) == 1 || $parts[1] == '' ) {
                                return false;
                        }
-                       $text = ExternalStore::fetchFromURL( $url, [ 'wiki' => $wiki ] );
+
+                       if ( isset( $row->old_id ) && $wiki === false ) {
+                               // Make use of the wiki-local revision text cache
+                               $cache = MediaWikiServices::getInstance()->getMainWANObjectCache();
+                               $text = $cache->getWithSetCallback(
+                                       $cache->makeKey( 'revisiontext', 'textid', $row->old_id ),
+                                       self::getCacheTTL( $cache ),
+                                       function () use ( $url, $wiki ) {
+                                               // No negative caching per Revision::loadText()
+                                               return ExternalStore::fetchFromURL( $url, [ 'wiki' => $wiki ] );
+                                       },
+                                       [ 'pcGroup' => self::TEXT_CACHE_GROUP, 'pcTTL' => $cache::TTL_PROC_LONG ]
+                               );
+                       } else {
+                               $text = ExternalStore::fetchFromURL( $url, [ 'wiki' => $wiki ] );
+                       }
                }
 
                // If the text was fetched without an error, convert it
                if ( $text !== false ) {
                        $text = self::decompressRevisionText( $text, $flags );
                }
+
                return $text;
        }
 
@@ -1559,15 +1574,14 @@ class Revision implements IDBAccessObject {
        }
 
        /**
-        * Lazy-load the revision's text.
-        * Currently hardcoded to the 'text' table storage engine.
+        * Get the text cache TTL
         *
-        * @return string|bool The revision's text, or false on failure
+        * @param WANObjectCache $cache
+        * @return integer
         */
-       private function loadText() {
+       private static function getCacheTTL( WANObjectCache $cache ) {
                global $wgRevisionCacheExpiry;
 
-               $cache = ObjectCache::getMainWANInstance();
                if ( $cache->getQoS( $cache::ATTR_EMULATION ) <= $cache::QOS_EMULATION_SQL ) {
                        // Do not cache RDBMs blobs in...the RDBMs store
                        $ttl = $cache::TTL_UNCACHEABLE;
@@ -1575,10 +1589,22 @@ class Revision implements IDBAccessObject {
                        $ttl = $wgRevisionCacheExpiry ?: $cache::TTL_UNCACHEABLE;
                }
 
+               return $ttl;
+       }
+
+       /**
+        * Lazy-load the revision's text.
+        * Currently hardcoded to the 'text' table storage engine.
+        *
+        * @return string|bool The revision's text, or false on failure
+        */
+       private function loadText() {
+               $cache = ObjectCache::getMainWANInstance();
+
                // No negative caching; negative hits on text rows may be due to corrupted replica DBs
                return $cache->getWithSetCallback(
                        $cache->makeKey( 'revisiontext', 'textid', $this->getTextId() ),
-                       $ttl,
+                       self::getCacheTTL( $cache ),
                        function () {
                                return $this->fetchText();
                        },
index e686cd8..5ea96dd 100644 (file)
@@ -403,13 +403,11 @@ if ( is_array( $wgExtraNamespaces ) ) {
        $wgCanonicalNamespaceNames = $wgCanonicalNamespaceNames + $wgExtraNamespaces;
 }
 
-// Merge in the legacy language codes, unless overridden in the config
-if ( !isset( $wgDummyLanguageCodes ) ) {
-       $wgDummyLanguageCodes = [
-               'qqq' => 'qqq', // Used for message documentation
-               'qqx' => 'qqx', // Used for viewing message keys
-       ] + $wgExtraLanguageCodes + LanguageCode::getDeprecatedCodeMapping();
-}
+// Merge in the legacy language codes, incorporating overrides from the config
+$wgDummyLanguageCodes += [
+       'qqq' => 'qqq', // Used for message documentation
+       'qqx' => 'qqx', // Used for viewing message keys
+] + $wgExtraLanguageCodes + LanguageCode::getDeprecatedCodeMapping();
 
 // These are now the same, always
 // To determine the user language, use $wgLang->getCode()
index 470a75c..924c347 100644 (file)
@@ -54,18 +54,11 @@ class TemplateParser {
         * @throws UnexpectedValueException If $templateName attempts upwards directory traversal
         */
        protected function getTemplateFilename( $templateName ) {
-               // Prevent upwards directory traversal using same methods as Title::secureAndSplit
+               // Prevent path traversal. Based on Language::isValidCode().
+               // This is for paranoia. The $templateName should never come from
+               // untrusted input.
                if (
-                       strpos( $templateName, '.' ) !== false &&
-                       (
-                               $templateName === '.' || $templateName === '..' ||
-                               strpos( $templateName, './' ) === 0 ||
-                               strpos( $templateName, '../' ) === 0 ||
-                               strpos( $templateName, '/./' ) !== false ||
-                               strpos( $templateName, '/../' ) !== false ||
-                               substr( $templateName, -2 ) === '/.' ||
-                               substr( $templateName, -3 ) === '/..'
-                       )
+                       strcspn( $templateName, ":/\\\000&<>'\"%" ) !== strlen( $templateName )
                ) {
                        throw new UnexpectedValueException( "Malformed \$templateName: $templateName" );
                }
index cfb1db8..d698b30 100644 (file)
        "apihelp-query+logevents-paramvalue-prop-details": "Liste les détails supplémentaires sur l’événement.",
        "apihelp-query+logevents-paramvalue-prop-tags": "Liste les balises de l’événement.",
        "apihelp-query+logevents-param-type": "Filtrer les entrées du journal sur ce seul type.",
-       "apihelp-query+logevents-param-action": "Filtrer les actions du journal sur cette seule action. Écrase <var>$1type</var>. Dans le liste des valeurs possibles, les valeurs suivies d'un astérisque, comme <kbd>action/*</kbd>, peuvent avoir différentes chaînes à la place du slash.",
+       "apihelp-query+logevents-param-action": "Filtrer les actions du journal sur cette seule action. Écrase <var>$1type</var>. Dans la liste des valeurs possibles, les valeurs suivies d'un astérisque, comme <kbd>action/*</kbd>, peuvent avoir différentes chaînes après le slash.",
        "apihelp-query+logevents-param-start": "L’horodatage auquel démarrer l’énumération.",
        "apihelp-query+logevents-param-end": "L’horodatage auquel arrêter l’énumération.",
        "apihelp-query+logevents-param-user": "Restreindre aux entrées générées par l’utilisateur spécifié.",
index 4facc20..7cd489a 100644 (file)
@@ -508,7 +508,7 @@ class MessageCache {
 
                $res = $dbr->select(
                        [ 'page', 'revision', 'text' ],
-                       [ 'page_title', 'old_text', 'old_flags' ],
+                       [ 'page_title', 'old_id', 'old_text', 'old_flags' ],
                        $smallConds,
                        __METHOD__ . "($code)-small"
                );
index 4ac6387..cd74154 100644 (file)
@@ -110,6 +110,8 @@ abstract class ChangesListFilter {
         */
        protected $priority;
 
+       const RESERVED_NAME_CHAR = '_';
+
        /**
         * Create a new filter with the specified configuration.
         *
@@ -122,7 +124,8 @@ abstract class ChangesListFilter {
         *
         * @param array $filterDefinition ChangesListFilter definition
         *
-        * $filterDefinition['name'] string Name of filter
+        * $filterDefinition['name'] string Name of filter; use lowercase with no
+        *  punctuation
         * $filterDefinition['cssClassSuffix'] string CSS class suffix, used to mark
         *  that a particular row belongs to this filter (when a row is included by the
         *  filter) (optional)
@@ -151,6 +154,13 @@ abstract class ChangesListFilter {
                                'ChangesListFilterGroup this filter belongs to' );
                }
 
+               if ( strpos( $filterDefinition['name'], self::RESERVED_NAME_CHAR ) !== false ) {
+                       throw new MWException( 'Filter names may not contain \'' .
+                               self::RESERVED_NAME_CHAR .
+                               '\'.  Use the naming convention: \'lowercase\''
+                       );
+               }
+
                $this->name = $filterDefinition['name'];
 
                if ( isset( $filterDefinition['cssClassSuffix'] ) ) {
index a4cc287..30ab552 100644 (file)
@@ -123,11 +123,13 @@ abstract class ChangesListFilterGroup {
 
        const DEFAULT_PRIORITY = -100;
 
+       const RESERVED_NAME_CHAR = '_';
+
        /**
         * Create a new filter group with the specified configuration
         *
         * @param array $groupDefinition Configuration of group
-        * * $groupDefinition['name'] string Group name
+        * * $groupDefinition['name'] string Group name; use camelCase with no punctuation
         * * $groupDefinition['title'] string i18n key for title (optional, can be omitted
         * *  only if none of the filters in the group display in the structured UI)
         * * $groupDefinition['type'] string A type constant from a subclass of this one
@@ -142,6 +144,13 @@ abstract class ChangesListFilterGroup {
         * *  changes list entries are filtered out.
         */
        public function __construct( array $groupDefinition ) {
+               if ( strpos( $groupDefinition['name'], self::RESERVED_NAME_CHAR ) !== false ) {
+                       throw new MWException( 'Group names may not contain \'' .
+                               self::RESERVED_NAME_CHAR .
+                               '\'.  Use the naming convention: \'camelCase\''
+                       );
+               }
+
                $this->name = $groupDefinition['name'];
 
                if ( isset( $groupDefinition['title'] ) ) {
index 23db3e2..edc3548 100644 (file)
@@ -124,7 +124,7 @@ class WikiRevision {
         * @param Title $title
         * @throws MWException
         */
-       function setTitle( $title ) {
+       public function setTitle( $title ) {
                if ( is_object( $title ) ) {
                        $this->title = $title;
                } elseif ( is_null( $title ) ) {
@@ -138,14 +138,14 @@ class WikiRevision {
        /**
         * @param int $id
         */
-       function setID( $id ) {
+       public function setID( $id ) {
                $this->id = $id;
        }
 
        /**
         * @param string $ts
         */
-       function setTimestamp( $ts ) {
+       public function setTimestamp( $ts ) {
                # 2003-08-05T18:30:02Z
                $this->timestamp = wfTimestamp( TS_MW, $ts );
        }
@@ -153,63 +153,63 @@ class WikiRevision {
        /**
         * @param string $user
         */
-       function setUsername( $user ) {
+       public function setUsername( $user ) {
                $this->user_text = $user;
        }
 
        /**
         * @param User $user
         */
-       function setUserObj( $user ) {
+       public function setUserObj( $user ) {
                $this->userObj = $user;
        }
 
        /**
         * @param string $ip
         */
-       function setUserIP( $ip ) {
+       public function setUserIP( $ip ) {
                $this->user_text = $ip;
        }
 
        /**
         * @param string $model
         */
-       function setModel( $model ) {
+       public function setModel( $model ) {
                $this->model = $model;
        }
 
        /**
         * @param string $format
         */
-       function setFormat( $format ) {
+       public function setFormat( $format ) {
                $this->format = $format;
        }
 
        /**
         * @param string $text
         */
-       function setText( $text ) {
+       public function setText( $text ) {
                $this->text = $text;
        }
 
        /**
         * @param string $text
         */
-       function setComment( $text ) {
+       public function setComment( $text ) {
                $this->comment = $text;
        }
 
        /**
         * @param bool $minor
         */
-       function setMinor( $minor ) {
+       public function setMinor( $minor ) {
                $this->minor = (bool)$minor;
        }
 
        /**
         * @param mixed $src
         */
-       function setSrc( $src ) {
+       public function setSrc( $src ) {
                $this->src = $src;
        }
 
@@ -217,7 +217,7 @@ class WikiRevision {
         * @param string $src
         * @param bool $isTemp
         */
-       function setFileSrc( $src, $isTemp ) {
+       public function setFileSrc( $src, $isTemp ) {
                $this->fileSrc = $src;
                $this->fileIsTemp = $isTemp;
        }
@@ -225,49 +225,49 @@ class WikiRevision {
        /**
         * @param string $sha1base36
         */
-       function setSha1Base36( $sha1base36 ) {
+       public function setSha1Base36( $sha1base36 ) {
                $this->sha1base36 = $sha1base36;
        }
 
        /**
         * @param string $filename
         */
-       function setFilename( $filename ) {
+       public function setFilename( $filename ) {
                $this->filename = $filename;
        }
 
        /**
         * @param string $archiveName
         */
-       function setArchiveName( $archiveName ) {
+       public function setArchiveName( $archiveName ) {
                $this->archiveName = $archiveName;
        }
 
        /**
         * @param int $size
         */
-       function setSize( $size ) {
+       public function setSize( $size ) {
                $this->size = intval( $size );
        }
 
        /**
         * @param string $type
         */
-       function setType( $type ) {
+       public function setType( $type ) {
                $this->type = $type;
        }
 
        /**
         * @param string $action
         */
-       function setAction( $action ) {
+       public function setAction( $action ) {
                $this->action = $action;
        }
 
        /**
         * @param array $params
         */
-       function setParams( $params ) {
+       public function setParams( $params ) {
                $this->params = $params;
        }
 
@@ -281,49 +281,49 @@ class WikiRevision {
        /**
         * @return Title
         */
-       function getTitle() {
+       public function getTitle() {
                return $this->title;
        }
 
        /**
         * @return int
         */
-       function getID() {
+       public function getID() {
                return $this->id;
        }
 
        /**
         * @return string
         */
-       function getTimestamp() {
+       public function getTimestamp() {
                return $this->timestamp;
        }
 
        /**
         * @return string
         */
-       function getUser() {
+       public function getUser() {
                return $this->user_text;
        }
 
        /**
         * @return User
         */
-       function getUserObj() {
+       public function getUserObj() {
                return $this->userObj;
        }
 
        /**
         * @return string
         */
-       function getText() {
+       public function getText() {
                return $this->text;
        }
 
        /**
         * @return ContentHandler
         */
-       function getContentHandler() {
+       public function getContentHandler() {
                if ( is_null( $this->contentHandler ) ) {
                        $this->contentHandler = ContentHandler::getForModelID( $this->getModel() );
                }
@@ -334,7 +334,7 @@ class WikiRevision {
        /**
         * @return Content
         */
-       function getContent() {
+       public function getContent() {
                if ( is_null( $this->content ) ) {
                        $handler = $this->getContentHandler();
                        $this->content = $handler->unserializeContent( $this->text, $this->getFormat() );
@@ -346,7 +346,7 @@ class WikiRevision {
        /**
         * @return string
         */
-       function getModel() {
+       public function getModel() {
                if ( is_null( $this->model ) ) {
                        $this->model = $this->getTitle()->getContentModel();
                }
@@ -357,7 +357,7 @@ class WikiRevision {
        /**
         * @return string
         */
-       function getFormat() {
+       public function getFormat() {
                if ( is_null( $this->format ) ) {
                        $this->format = $this->getContentHandler()->getDefaultFormat();
                }
@@ -368,28 +368,28 @@ class WikiRevision {
        /**
         * @return string
         */
-       function getComment() {
+       public function getComment() {
                return $this->comment;
        }
 
        /**
         * @return bool
         */
-       function getMinor() {
+       public function getMinor() {
                return $this->minor;
        }
 
        /**
         * @return mixed
         */
-       function getSrc() {
+       public function getSrc() {
                return $this->src;
        }
 
        /**
         * @return bool|string
         */
-       function getSha1() {
+       public function getSha1() {
                if ( $this->sha1base36 ) {
                        return Wikimedia\base_convert( $this->sha1base36, 36, 16 );
                }
@@ -399,63 +399,63 @@ class WikiRevision {
        /**
         * @return string
         */
-       function getFileSrc() {
+       public function getFileSrc() {
                return $this->fileSrc;
        }
 
        /**
         * @return bool
         */
-       function isTempSrc() {
+       public function isTempSrc() {
                return $this->isTemp;
        }
 
        /**
         * @return mixed
         */
-       function getFilename() {
+       public function getFilename() {
                return $this->filename;
        }
 
        /**
         * @return string
         */
-       function getArchiveName() {
+       public function getArchiveName() {
                return $this->archiveName;
        }
 
        /**
         * @return mixed
         */
-       function getSize() {
+       public function getSize() {
                return $this->size;
        }
 
        /**
         * @return string
         */
-       function getType() {
+       public function getType() {
                return $this->type;
        }
 
        /**
         * @return string
         */
-       function getAction() {
+       public function getAction() {
                return $this->action;
        }
 
        /**
         * @return string
         */
-       function getParams() {
+       public function getParams() {
                return $this->params;
        }
 
        /**
         * @return bool
         */
-       function importOldRevision() {
+       public function importOldRevision() {
                $dbw = wfGetDB( DB_MASTER );
 
                # Sneak a single revision into place
@@ -554,7 +554,7 @@ class WikiRevision {
                return true;
        }
 
-       function importLogItem() {
+       public function importLogItem() {
                $dbw = wfGetDB( DB_MASTER );
 
                $user = $this->getUserObj() ?: User::newFromName( $this->getUser() );
@@ -613,7 +613,7 @@ class WikiRevision {
        /**
         * @return bool
         */
-       function importUpload() {
+       public function importUpload() {
                # Construct a file
                $archiveName = $this->getArchiveName();
                if ( $archiveName ) {
@@ -684,7 +684,7 @@ class WikiRevision {
        /**
         * @return bool|string
         */
-       function downloadSource() {
+       public function downloadSource() {
                if ( !$this->config->get( 'EnableUploads' ) ) {
                        return false;
                }
index 3131c3c..ff13196 100644 (file)
@@ -299,6 +299,7 @@ class MysqlUpdater extends DatabaseUpdater {
                        [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ],
                        [ 'dropIndex', 'user_groups', 'ug_user_group', 'patch-user_groups-primary-key.sql' ],
                        [ 'addField', 'user_groups', 'ug_expiry', 'patch-user_groups-ug_expiry.sql' ],
+                       [ 'addIndex', 'image', 'img_user_timestamp', 'patch-image-user-index-2.sql' ],
                ];
        }
 
index cdbbfd0..dcd66dd 100644 (file)
@@ -162,6 +162,7 @@ class SqliteUpdater extends DatabaseUpdater {
                        // 1.29
                        [ 'addField', 'externallinks', 'el_index_60', 'patch-externallinks-el_index_60.sql' ],
                        [ 'addField', 'user_groups', 'ug_expiry', 'patch-user_groups-ug_expiry.sql' ],
+                       [ 'addIndex', 'image', 'img_user_timestamp', 'patch-image-user-index-2.sql' ],
                ];
        }
 
index 779ad6d..7a26214 100644 (file)
@@ -62,6 +62,7 @@
        "config-memory-bad": "'''Diwallit :''' Da $1 emañ arventenn <code>memory_limit</code> PHP.\nRe izel eo moarvat.\nMarteze e c'hwito ar staliadenn !",
        "config-xcache": "Staliet eo [http://xcache.lighttpd.net/ XCache]",
        "config-apc": "Staliet eo [http://www.php.net/apc APC]",
+       "config-apcu": "Staliet eo [http://www.php.net/apcu APCu]",
        "config-wincache": "Staliet eo [http://www.iis.net/download/WinCacheForPhp WinCache]",
        "config-diff3-bad": "N'eo ket bet kavet GNU diff3.",
        "config-imagemagick": "ImageMagick kavet : <code>$1</code>.\nGweredekaet e vo ar bihanaat skeudennoù ma vez gweredekaet ganeoc'h ar pellgargañ restroù.",
index c50dfd7..631f6fd 100644 (file)
@@ -348,6 +348,8 @@ class SwiftFileBackend extends FileBackendStore {
                };
 
                $opHandle = new SwiftFileOpHandle( $this, $handler, $reqs );
+               $opHandle->resourcesToClose[] = $handle;
+
                if ( !empty( $params['async'] ) ) { // deferred
                        $status->value = $opHandle;
                } else { // actually write the object in Swift
index e807bc8..90e60a3 100644 (file)
@@ -1354,7 +1354,10 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        ) {
                $rows = 0;
                $sql = $this->selectSQLText( $tables, '1', $conds, $fname, $options, $join_conds );
-               $res = $this->query( "SELECT COUNT(*) AS rowcount FROM ($sql) tmp_count", $fname );
+               // The identifier quotes is primarily for MSSQL.
+               $rowCountCol = $this->addIdentifierQuotes( "rowcount" );
+               $tableName = $this->addIdentifierQuotes( "tmp_count" );
+               $res = $this->query( "SELECT COUNT(*) AS $rowCountCol FROM ($sql) $tableName", $fname );
 
                if ( $res ) {
                        $row = $this->fetchRow( $res );
index 3ef646a..52678d4 100644 (file)
@@ -149,6 +149,9 @@ abstract class Skin extends ContextSource {
         * Defines the ResourceLoader modules that should be added to the skin
         * It is recommended that skins wishing to override call parent::getDefaultModules()
         * and substitute out any modules they wish to change by using a key to look them up
+        *
+        * For style modules, use setupSkinUserCss() instead.
+        *
         * @return array Array of modules with helper keys for easy overriding
         */
        public function getDefaultModules() {
@@ -171,6 +174,16 @@ abstract class Skin extends ContextSource {
                        'user' => [],
                ];
 
+               // Preload jquery.tablesorter for mediawiki.page.ready
+               if ( strpos( $out->getHTML(), 'sortable' ) !== false ) {
+                       $modules['content'][] = 'jquery.tablesorter';
+               }
+
+               // Preload jquery.makeCollapsible for mediawiki.page.ready
+               if ( strpos( $out->getHTML(), 'mw-collapsible' ) !== false ) {
+                       $modules['content'][] = 'jquery.makeCollapsible';
+               }
+
                // Add various resources if required
                if ( $wgUseAjax && $wgEnableAPI ) {
                        if ( $wgEnableWriteAPI && $user->isLoggedIn()
index 3b3ea26..65e82e8 100644 (file)
@@ -407,7 +407,7 @@ abstract class QueryPage extends SpecialPage {
                        $options = isset( $query['options'] ) ? (array)$query['options'] : [];
                        $join_conds = isset( $query['join_conds'] ) ? (array)$query['join_conds'] : [];
 
-                       if ( $order ) {
+                       if ( count( $order ) ) {
                                $options['ORDER BY'] = $order;
                        }
 
@@ -460,28 +460,20 @@ abstract class QueryPage extends SpecialPage {
                if ( $limit !== false ) {
                        $options['LIMIT'] = intval( $limit );
                }
-
                if ( $offset !== false ) {
                        $options['OFFSET'] = intval( $offset );
                }
-
-               $orderFields = $this->getOrderFields();
-               $order = [];
-               $DESC = $this->sortDescending() ? ' DESC' : '';
-               foreach ( $orderFields as $field ) {
-                       $order[] = "qc_${field}${DESC}";
-               }
-               if ( $order ) {
-                       $options['ORDER BY'] = $order;
+               if ( $this->sortDescending() ) {
+                       $options['ORDER BY'] = 'qc_value DESC';
+               } else {
+                       $options['ORDER BY'] = 'qc_value ASC';
                }
-
                return $dbr->select( 'querycache', [ 'qc_type',
                                'namespace' => 'qc_namespace',
                                'title' => 'qc_title',
                                'value' => 'qc_value' ],
                                [ 'qc_type' => $this->getName() ],
-                               __METHOD__,
-                               $options
+                               __METHOD__, $options
                );
        }
 
index 7a18342..9d92cbd 100644 (file)
@@ -119,26 +119,4 @@ abstract class WantedQueryPage extends QueryPage {
                $label = $this->msg( 'nlinks' )->numParams( $result->value )->escaped();
                return Linker::link( $wlh, $label );
        }
-
-       /**
-        * Order by title, overwrites QueryPage::getOrderFields
-        *
-        * @return array
-        */
-       function getOrderFields() {
-               return [ 'value DESC', 'namespace', 'title' ];
-       }
-
-       /**
-        * Do not order descending for all order fields.  We will use DESC only on one field, see
-        *  getOrderFields above. This overwrites sortDescending from QueryPage::getOrderFields().
-        *  Do NOT change this to true unless you remove the phrase DESC in getOrderFiels above.
-        *  If you do a database error will be thrown due to double adding DESC to query!
-        *
-        * @return bool
-        */
-       function sortDescending() {
-               return false;
-       }
-
 }
index 0d71629..49510da 100644 (file)
@@ -31,7 +31,6 @@ class SearchInputWidget extends TitleInputWidget {
        public function __construct( array $config = [] ) {
                $config = array_merge( [
                        'maxLength' => null,
-                       'type' => 'search',
                        'icon' => 'search',
                ], $config );
 
@@ -56,6 +55,10 @@ class SearchInputWidget extends TitleInputWidget {
                $this->addClasses( [ 'mw-widget-searchInputWidget' ] );
        }
 
+       protected function getInputElement( $config ) {
+               return ( new \OOUI\Tag( 'input' ) )->setAttributes( [ 'type' => 'search' ] );
+       }
+
        protected function getJavaScriptClassName() {
                return 'mw.widgets.SearchInputWidget';
        }
index 894e452..e19c3da 100644 (file)
        "talkpage": "Sprecan ymbe þisne tramet",
        "talkpagelinktext": "Mōtung",
        "specialpage": "Syndrig tramet",
-       "personaltools": "Āgne tōlas",
+       "personaltools": "Āgnu tōl",
        "articlepage": "Sēon innunge tramet",
        "talk": "Mōtung",
        "views": "Sihþa",
-       "toolbox": "Tōlas",
+       "toolbox": "Tōl",
        "userpage": "Sēon brūcendes tramet",
        "projectpage": "Sēon weorces tramet",
        "imagepage": "Sēon ymelan tramet",
        "password-change-forbidden": "Þū ne canst awendan þafungword on þissum wiki.",
        "login": "Inmeldian",
        "nav-login-createaccount": "Inmeldian / wyrcan reccinge",
-       "userlogin": "Inmeldian / wyrcan reccinge",
-       "userloginnocreate": "Inmeldian",
        "logout": "Ūtmeldian",
        "userlogout": "Ūtmeldian",
        "notloggedin": "Nā ingemeldod",
        "userlogin-noaccount": "Næfst þu hordcleofan?",
        "userlogin-joinproject": "Ƿeorðan gylda of {{SITENAME}}",
-       "nologin": "Næfst þū reccinge? $1",
-       "nologinlink": "Scieppan reccinge",
        "createaccount": "Scieppan reccinge",
-       "gotaccount": "Hafast þū reccinge ǣr? $1.",
-       "gotaccountlink": "Inmeldian",
        "userlogin-resetpassword-link": "Forgēate þū þīn gelēafword?",
        "userlogin-helplink2": "Inmeldunge help",
        "createacct-emailrequired": "Spearcǣrenda nama",
        "createacct-another-email-ph": "Besettan spearcǣrenda naman",
        "createaccountmail": "Notian hwīlendlic hlīetlic þafungword and sendan hit tō þǣm genamodan spearcǣrendnaman",
        "createacct-realname": "Sōt nama (ungenēdedlic)",
-       "createaccountreason": "Racu:",
        "createacct-reason": "Racu",
        "createacct-reason-ph": "For hwȳ wyrcest þū ōðerne grīman",
        "createacct-submit": "Scieppan þīnne grīman",
        "logentry-delete-delete": "$1 {{GENDER:$2|forlēas}} tramet $3",
        "logentry-move-move": "$1 {{GENDER:$2|wæg}} þone tramet $3 tō $4",
        "logentry-newusers-create": "Brūcendes grīma $1 wæs {{GENDER:$2|geworht}}",
-       "revdelete-summary": "ādihtscortnes",
        "searchsuggest-search": "Sēcan {{SITENAME}}",
        "special-characters-group-latin": "Lǣden",
        "special-characters-group-latinextended": "Ēacnod Lǣden",
index 79fc096..232427d 100644 (file)
        "viewhelppage": "شوف الباجة تاع المعاونة",
        "categorypage": "شوف الباجة تاع الصنيف",
        "viewtalkpage": "شوف التقرعيج",
-       "otherlanguages": "ب لوغات اخرين",
+       "otherlanguages": "بلوغات اخرين",
        "redirectedfrom": "(محول من $1)",
        "redirectpagesub": "باجة تاع التحوال",
        "redirectto": "حوّل لـ:",
        "externaldberror": "بالاك كاشما صرات غلطة فل توتاق تاع داتاباز ولا ما عندكش السراح باش تبدّل الحساب تاعك الخرجاني.",
        "login": "تسجال الدخول",
        "nav-login-createaccount": "تسجل/ اصنع حساب",
-       "userlogin": "تسجل/ اصنع حساب",
-       "userloginnocreate": "مسجّل الدخول",
        "logout": "مسجّل الخروج",
        "userlogout": "سجل خروج",
        "notloggedin": "ماشي مسجّل داخل.",
        "userlogin-noaccount": "ما عندك حساب؟",
        "userlogin-joinproject": "انضم لـ {{SITENAME}}",
-       "nologin": "ما عندكش حساب مسجل؟ '''$1'''.",
-       "nologinlink": "اصنع حساب",
        "createaccount": "اصنع حساب",
-       "gotaccount": "عندك حساب مسجل؟ '''$1'''.",
-       "gotaccountlink": "كونكسيون",
-       "userlogin-resetlink": "نسيت تفاصيل الدخول؟",
        "userlogin-resetpassword-link": "راك ناسي كلمت` السرّ؟",
        "userlogin-helplink2": "معاونة ف تسجال الدخول",
        "userlogin-loggedin": "راك مازلت مسجّل داخل ب`السميّة {{GENDER:$1|$1}}.\nاستعمل الجدوال تاع التجواب الّي هنا لتحت باش تتسجّل داخل ب سميّت` مستعملي وحداخُر.",
        "createacct-another-email-ph": "دخّل علوان تاع إيمال",
        "createaccountmail": "استعمل كلمت` سرّ على الزهَر و ابعتها للإيمال المنعوت هنايا.",
        "createacct-realname": "الأسم الحقّاني (ماشي محتّم)",
-       "createaccountreason": "سبّة:",
        "createacct-reason": "سبّة",
        "createacct-reason-ph": "علاش راك تخلق حساب وحداخُر",
        "createacct-submit": "اصنع حسابك",
        "passwordreset-emaildisabled": "الفعاليّات تاع الإيمال راهي محبّسة ف هاد الويكي.",
        "passwordreset-username": "سميّت` المستعملي:",
        "passwordreset-domain": "الدومان:",
-       "passwordreset-capture": "شوف الإيمال الناتج؟",
-       "passwordreset-capture-help": "يلا تقبش (cocher) هاد القويبسة، الإيمال (ب كلمت` السرّ المأقّتة) غادي يتورّا لك كلّي راه مبعوت لل مستعملي.",
        "passwordreset-email": "آدريسة تاع إيمال:",
        "passwordreset-emailtitle": "وصافات تاع الحساب ف {{SITENAME}}",
        "passwordreset-emailtext-ip": "شي واحد (يكون بالاك نتا، لادريسة إيپي $1) راه طلَب المصاوبة تاع كلمت` السرّ تاعك ف {{SITENAME}} ($4). {{PLURAL:$3|هاد الحساب |هاد الحسابات}} تاع المستعملي {{PLURAL:$3|راه مربوط|راهم مربوطين}} ب لادريسة تاع الإيمال:\n\n$2\n\n{{PLURAL:$3|هاد كلمت` السرّ المأقّتة|هادي كلمات` السرّ المأقّتة}} غادي يكمل صلوحها منّا على {{PLURAL:$5|نهار واحد|$5 إيّام}}.\nمليح لوكان تدخُل ل`السيت من ضركا و تبدّل كلمت` السرّ.\nيلا كاش ما وحداخُر دار هاد المطلب ولا راك تفكّرت كلمت` السرّ تاعك و ما بقيتش باغي تبدّلها، تنجم برك تنسا هاد الميساج و تستعمل كلمت` السرّ تاعك تاع مضاري.",
        "tooltip-search": " فتّش في {{SITENAME}}",
        "tooltip-search-go": "روح ل صفحة عندها نفس هاذ الاسم ايذا توجْدت",
        "tooltip-search-fulltext": "فتّش ع الپاجات الّي فيها هاذ النصّ",
-       "tooltip-p-logo": "زÙ\88ر ØµÙ\81حة Ø§Ù\84استÙ\82باÙ\84",
+       "tooltip-p-logo": "زÙ\88ر Ø§Ù\84باجة Ø§Ù\84Ù\84Ù\88Ù\84Ø©",
        "tooltip-n-mainpage": "زور الپاجة اللولانيّة",
        "tooltip-n-mainpage-description": "زور صفحة الاستقبال",
-       "tooltip-n-portal": "ع Ø§Ù\84Ù\85شرÙ\88عØ\8c Ø´Ù\86Ù\88Ù\91 ØªÙ\82در ØªØ¯Ù\8aرØ\8c Ù\81Ù\8aÙ\86 ØªÙ\84Ù\82Ù\89 Ø§Ù\84حاجات Ø§Ù\84Ù\91ي حاجتك بيها",
+       "tooltip-n-portal": "بخÙ\88صÙ\88ص Ø§Ù\84Ù\85شرÙ\88عØ\8c Ù\88اش ØªÙ\82در ØªØ¯Ù\8aرØ\8c Ù\88Ù\8aÙ\86 ØªÙ\84Ù\82Ù\89 Ø§Ù\84Ù\85عÙ\84Ù\88Ù\85Ø© Ø§Ù\84Ù\84ي حاجتك بيها",
        "tooltip-n-currentevents": "شوف اش قاعد يصير",
        "tooltip-n-recentchanges": "ليستة تاع التبدالات الاخّرين ف الويكي",
        "tooltip-n-randompage": "شرجي صفحة ع الزهر",
        "logentry-move-move": "{{GENDER:$2|نقّل|نقّلت}} $1 الصفحة $3 لـ $4",
        "logentry-newusers-create": "راه تفتح حساب {{GENDER:$2|المستخدم|المستخدمه}} $1",
        "logentry-upload-upload": " {{GENDER:$2|نزّل|نزّلت}} $1 $3",
-       "searchsuggest-search": "فتّش"
+       "searchsuggest-search": "فتّش في"
 }
index 5135552..8bbbfd3 100644 (file)
        "prefs-timeoffset": "Saat qurşağının fərqi",
        "prefs-advancedediting": "Ümumi parametrlər",
        "prefs-editor": "Redaktor",
+       "prefs-preview": "İlkin baxış",
        "prefs-advancedrc": "Ətraflı variantlar",
        "prefs-advancedrendering": "Ətraflı variantlar",
        "prefs-advancedsearchoptions": "Ətraflı variantlar",
        "duration-centuries": "$1 {{PLURAL:$1|əsr|əsr}}",
        "duration-millennia": "$1 {{PLURAL:$1|minillik|minillik}}",
        "limitreport-cputime": "CPU vaxt istifadəsi",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|saniyə|saniyə}}",
        "limitreport-walltime": "Real vaxt istifadəsi",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|saniyə|saniyə}}",
        "limitreport-postexpandincludesize-value": "$1/$2 bayt",
        "expand_templates_output": "Nəticə",
        "expand_templates_ok": "OK",
index 411b8ff..ebc449b 100644 (file)
        "prefs-help-prefershttps": "Гэтая налада набудзе моц пры наступным уваходзе ў сыстэму.",
        "prefswarning-warning": "Вы зрабілі зьмены ў вашых наладах, якія яшчэ не былі захаваныя.\nКалі вы закрыеце гэтую старонку і не націсьніце «$1», вашыя налады ня будуць абноўленыя.",
        "prefs-tabs-navigation-hint": "Падказка: вы можаце пераходзіць паміж укладкамі ў сьпісе ўкладак з дапамогай клявішаў налева і направа.",
-       "userrights": "Ð\9aÑ\96Ñ\80аванÑ\8cне Ð¿Ñ\80авамÑ\96 ўдзельнікаў і ўдзельніц",
+       "userrights": "Ð\9fÑ\80авÑ\8b ўдзельнікаў і ўдзельніц",
        "userrights-lookup-user": "Выбар удзельніка",
        "userrights-user-editname": "Увядзіце імя ўдзельніка:",
        "editusergroup": "Загрузіць групы ўдзельніка",
        "rcfilters-filter-humans-label": "Чалавек (ня робат)",
        "rcfilters-filter-humans-description": "Праўкі, зробленыя людзьмі.",
        "rcfilters-filtergroup-reviewstatus": "Статус праверкі",
+       "rcfilters-filter-patrolled-label": "Правераныя",
+       "rcfilters-filter-patrolled-description": "Праўкі, пазначаныя як правераныя.",
+       "rcfilters-filter-unpatrolled-label": "Неправераныя",
        "rcfilters-filtergroup-significance": "Значэньне",
        "rcfilters-filter-minor-label": "Дробныя праўкі",
        "rcfilters-filter-minor-description": "Праўкі, якія аўтар пазначыў як дробныя.",
index 5cb1bf9..30c5ca1 100644 (file)
        "rcfilters-invalid-filter": "অকার্যকর ফিল্টার",
        "rcfilters-empty-filter": "কোনো সক্রিয় ফিল্টার নেই। সমস্ত অবদান দেখানো হয়েছে।",
        "rcfilters-filterlist-title": "ছাঁকনি",
+       "rcfilters-filterlist-feedbacklink": "নতুন (বিটা) ছাঁকনির উপর মতামত প্রদান করুন",
        "rcfilters-highlightbutton-title": "ফলাফল আলোকপাত করুন",
        "rcfilters-highlightmenu-title": "একটি রং নির্বাচন করুন",
+       "rcfilters-highlightmenu-help": "এই বৈশিষ্ট্য আলোকপাত করতে একটি রঙ নির্বাচন করুন",
        "rcfilters-filterlist-noresults": "কোনও ফিল্টার পাওয়া যায়নি",
        "rcfilters-filtergroup-registration": "ব্যবহারকারী নিবন্ধন",
        "rcfilters-filter-registered-label": "নিবন্ধিত",
        "rcfilters-filter-humans-label": "মানুষ (বট নয়)",
        "rcfilters-filter-humans-description": "মানব সম্পাদক দ্বারা করা সম্পাদনা।",
        "rcfilters-filtergroup-reviewstatus": "পর্যালোচনার অবস্থা",
+       "rcfilters-filter-patrolled-label": "পরীক্ষিত",
+       "rcfilters-filter-patrolled-description": "সম্পাদনা পরীক্ষিত হিসেবে চিহ্নিত করা হয়েছে।",
+       "rcfilters-filter-unpatrolled-label": "অপরীক্ষিত",
+       "rcfilters-filter-unpatrolled-description": "সম্পাদনা পরীক্ষিত হিসেবে চিহ্নিত করা হয় নি।",
        "rcfilters-filtergroup-significance": "তাৎপর্য",
        "rcfilters-filter-minor-label": "অনুল্লেখ্য সম্পাদনা",
        "rcfilters-filter-major-label": "অ-অনুল্লেখ্য সম্পাদনা",
        "authmanager-authplugin-setpass-failed-title": "পাসওয়ার্ড পরিবর্তন ব্যর্থ হয়েছে",
        "authmanager-authplugin-setpass-failed-message": "প্রমাণীকরণ প্লাগইন পাসওয়ার্ড পরিবর্তন করতে অস্বীকৃতি জানিয়েছে।",
        "authmanager-authplugin-create-fail": "প্রমাণীকরণ প্লাগইন অ্যাকাউন্ট তৈরি করতে অস্বীকৃতি জানিয়েছে।",
+       "authmanager-authplugin-setpass-denied": "প্রমাণীকরণ প্লাগইন পাসওয়ার্ড পরিবর্তন করার অনুমতি দেয় না।",
        "authmanager-authplugin-setpass-bad-domain": "অবৈধ ডোমেইন।",
        "authmanager-autocreate-noperm": "স্বয়ংক্রিয় অ্যাকাউন্ট সৃষ্টি মঞ্জুরিপ্রাপ্ত নয়।",
+       "authmanager-autocreate-exception": "স্বয়ংক্রিয় অ্যাকাউন্ট সৃষ্টিকরণ পূর্ববর্তী ত্রুটির কারণে সাময়িকভাবে অক্ষম করা হয়েছে।",
        "authmanager-userdoesnotexist": "ব্যবহারকারী অ্যাকাউন্ট \"$1\" অনিবন্ধিত।",
        "authmanager-username-help": "প্রমাণীকরণের জন্য ব্যবহারকারী নাম।",
        "authmanager-password-help": "প্রমাণীকরণের জন্য পাসওয়ার্ড।",
index 8d18aa2..ac9220c 100644 (file)
        "prefs-help-prefershttps": "Efediñ a ray an dibarzh-mañ kentañ gwech ma kevreoc'h.",
        "prefswarning-warning": "Kemmet eo bet ho penndibaboù ganeoc'h, met enrollet n'int ket bet avat.\nMar kuitait ar bajenn-mañ hep klikañ war \"$1\" ne vo ket nevesaet ho penndibaboù",
        "prefs-tabs-navigation-hint": "Titourig : Gallout a rit implijout an touchennoù bir kleiz ha bir dehoù evit merdeiñ etre an ivinelloù e roll an ivinelloù.",
-       "userrights": "Merañ statud an implijerien",
+       "userrights": "Gwirioù an implijer",
        "userrights-lookup-user": "Diuzañ un implijer",
        "userrights-user-editname": "Lakait un anv implijer :",
        "editusergroup": "Kargañ strolladoù implijerien",
        "import-error-special": "N'eo ket bet enporzhiet ar bajenn \"$1\" rak stag eo ouzh un esaouenn anv dibar na aotre ket pajennoù.",
        "import-error-invalid": "N'eo ket bet enporzhiet ar bajenn \"$1\" rak direizh e vefe hec'h anv er wiki-mañ.",
        "import-error-unserialize": "N'eus ket bet gallet distiradekaat stumm $2 ar bajenn \"$1\". Merket eo ar stumm evel unan a ra gant ar patrom danvez $3 stiradekaat evel $4.",
+       "import-error-bad-location": "N'eus ket bet gallet stokañ war \"$1\" ar wiki-mañ ar stumm $2 a ra gant ar patrom danvez $3. N'eo ket skoret ar patrom-se er bajenn-se.",
        "import-options-wrong": "{{PLURAL:$2|Dibab fall|Dibaboù fall}}: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Pourchas a ra ar bennbajenn un titl n'eo ket reizh.",
        "import-rootpage-nosubpage": "Esaouenn anvioù \"$1\" eus ar bennpajenn ne aotre ket an ispajennoù.",
        "scarytranscludefailed-httpstatus": "[c'hwitet adtapout ar patrom evit $1: HTTP $2]",
        "scarytranscludetoolong": "[URL re hir]",
        "deletedwhileediting": "'''Diwallit''' : Diverket eo bet ar bajenn-mañ bremañ ha krog e oac'h da zegas kemmoù enni!",
-       "confirmrecreate": "Diverket eo bet ar pennad-mañ gant [[User:$1|$1]] ([[User talk:$1|kaozeal]]) goude ma vije bet kroget ganeoc'h kemmañ anezhañ :\n: ''$2''\nKadarnait mar plij e fell deoc'h krouiñ ar pennad-mañ da vat.",
-       "confirmrecreate-noreason": "Diverket eo bet ar pennad-mañ gant [[User:$1|$1]] ([[User talk:$1|kaozeal]]) goude ma vije bet kroget ganeoc'h kemmañ anezhañ. Kadarnait e fell deoc'h adkrouiñ ar pennad-mañ e gwirionez.",
+       "confirmrecreate": "{{GENDER:$1|Diverket}} eo bet ar bajenn-mañ gant [[User:$1|$1]] ([[User talk:$1|kaozeal]]) goude ma vije bet kroget ganeoc'h kemmañ anezhi :\n: ''$2''\nKadarnait mar plij e fell deoc'h krouiñ ar pennad-mañ en-dro.",
+       "confirmrecreate-noreason": "{{GENDER:$1|Diverket}} eo bet ar bajenn-mañ gant [[User:$1|$1]] ([[User talk:$1|kaozeal]]) goude ma vije bet kroget ganeoc'h kemmañ anezhi. Kadarnait e fell deoc'h adkrouiñ ar pennad-mañ e gwirionez.",
        "recreate": "Adkrouiñ",
        "confirm_purge_button": "Mat eo",
        "confirm-purge-top": "Spurjañ krubuilh ar bajenn-mañ?",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|kaozeal]])",
        "timezone-local": "Lec'hel",
        "duplicate-defaultsort": "Diwallit : Frikañ a ra an alc'hwez dre ziouer \"$2\" an hini a oa a-raok \"$1\".",
+       "duplicate-displaytitle": "<strong>Diwallit :</strong> An titl da ziskwel \"$2\" a friko an hini a oa a oa betek-henn \"$1\".",
+       "restricted-displaytitle": "<strong>Diwallit :</strong> Lezet eo bet an titl da ziskwel \"$1\" a-gostez peogwir ne glot ket gant titl ar bajenn evel m'emañ bremañ.",
+       "invalid-indicator-name": "<strong>Fazi :</strong> Ne c'hall ket perzh <code>name</code> merkerioù statud ar bajenn bezañ goullo.",
        "version": "Stumm",
        "version-extensions": "Astennoù staliet",
        "version-skins": "Gwiskadurioù staliet",
        "version-ext-colheader-description": "Deskrivadur",
        "version-ext-colheader-credits": "Aozerien",
        "version-license-title": "Aotre-implijout evit $1",
+       "version-license-not-found": "N'eus bet kavet tamm titour pizh ebet diwar-benn an astenn-mañ.",
        "version-credits-title": "Kredoù evit $1",
+       "version-credits-not-found": "N'eus bet kavet tamm titour trukarekaat pizh ebet evit an astenn-mañ",
        "version-poweredby-credits": "Mont a ra ar wiki-mañ en-dro a-drugarez da '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "re all",
        "version-poweredby-translators": "troerien translatewiki.net",
        "version-libraries-license": "Aotre-implijout",
        "version-libraries-description": "Deskrivadur",
        "version-libraries-authors": "Aozerien",
+       "redirect": "Adkas dre restroù, implijerien, pajennoù, stummoù pe ID marilhañ",
+       "redirect-summary": "Adkas a ra ar bajenn dibar-mañ war-zu ur restr (anv ar restr roet), ur bajenn (ID ar stumm pe ar bajenn roet), ur bajenn implijer (ID niverel an implijer roet), pe ur moned en ur marilh (ID ar marilh roet). Implij : [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Mont",
        "redirect-lookup": "Klask :",
        "redirect-value": "Talvoud :",
        "tag-filter-submit": "Silañ",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Dikedenn|Tikedenn}}]] : $2)",
        "tag-mw-contentmodelchange": "cheñch ar patrom danvez",
+       "tag-mw-contentmodelchange-description": "KEmmoù a [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel cheñch patrom danvez] ur bajenn",
        "tags-title": "Tikedennoù",
        "tags-intro": "Rollañ a ra ar bajenn-mañ an tikedennoù a c'hall ar meziant implijout da verkañ kemmoù hag o zalvoudegezh.",
        "tags-tag": "Anv an dikedenn",
        "tags-active-yes": "Ya",
        "tags-active-no": "Ket",
        "tags-source-extension": "Termenet gant ar meziant",
+       "tags-source-manual": "Lakaet e pleustr gant an dorn gant an implijerien hag ar robotoù",
        "tags-source-none": "N'emañ ket en implij ken",
        "tags-edit": "aozañ",
        "tags-delete": "diverkañ",
        "tags-manage-no-permission": "N'oc'h ket aotreet da verañ ar c'hemmañ tikedennoù.",
        "tags-manage-blocked": "N'hallit ket merañ ar c'hemmañ tikedennoù e-keit hag {{GENDER:$1|emaoc'h}} stanket.",
        "tags-create-heading": "Krouiñ un dikedenn nevez",
+       "tags-create-explanation": "Dre ziouer e c'hallo an implijerien hag ar robotoù ober gant an tikedennoù nevez krouet.",
        "tags-create-tag-name": "Anv an dikedenn :",
        "tags-create-reason": "Abeg :",
        "tags-create-submit": "Krouiñ",
        "tags-create-no-name": "Rekis eo merkañ anv un dikedenn.",
+       "tags-create-invalid-chars": "Ne c'hall ket bezañ skejoù (<code>,</code>) pe beskelloù (<code>/</code>) en anvioù an tikedennoù.",
+       "tags-create-invalid-title-chars": "Ne c'hall ket anvioù an tikedennoù ober gant arouezennoù na c'hallont ket bezañ implijet e titloù ar pajennoù .",
        "tags-create-already-exists": "Bez' ez eus eus an tikedenn \"$1\" c'hoazh.",
+       "tags-create-warnings-above": "Setu aze ar {{PLURAL:$2|c'hemenn-diwall zo|c'hemennoù-diwall zo}} deuet war wel p'eo bet klasket krouiñ an dikedenn \"$1\" :",
        "tags-create-warnings-below": "Kenderc'hel da grouiñ an dikedenn a fell deoc'h ?",
        "tags-delete-title": "Diverkañ an dikedenn",
+       "tags-delete-explanation-initial": "Emaoc'h o vont da ziverkañ an dikedenn \"$1\" a-ziwar an diaz roadennoù.",
+       "tags-delete-explanation-in-use": "Dilamet e vo diouzh an {{PLURAL:$2|$2 stumm pe moned marilh|holl $2 stumm ha/pe monedoù marilh}} m'emañ bet lakaet evit ar mare.",
+       "tags-delete-explanation-warning": "<strong>Ne vo ket posupl distreiñ</strong> war an ober-mañ <strong>n'haller ket nullañ</strong>, ha pa vefe gant merourien an diaz roadennoù zoken. Bezit peursur eo homañ an dikedenn a fell deoc'h diverkañ.",
        "tags-delete-reason": "Abeg :",
        "tags-delete-not-found": "N'eus ket eus an dikedenn \"$1\".",
        "tags-activate-title": "Gweredekaat an dikedenn",
        "logentry-suppress-event-legacy": "{{GENDER:$2|Kemmet}} eo bet dre guzh gwelusted darvoudoù ar marilh d'an $3 gant $1",
        "logentry-suppress-revision-legacy": "{{GENDER:$2|Kemmet}} eo bet dre guzh gwelusted ar reizhadennoù war ar bajenn $3 gant $1",
        "revdelete-content-hid": "danvez kuzet",
-       "revdelete-summary-hid": "kemmañ an diverrañ kuzhet",
+       "revdelete-summary-hid": "kuzhet diverradenn ar c'hemmoù",
        "revdelete-uname-hid": "anv implijer kuzhet",
        "revdelete-content-unhid": "danvez war wel",
        "revdelete-summary-unhid": "kemmañ an diverrañ zo war wel",
index ec38e90..bc2b03a 100644 (file)
        "login": "Системин довзийтар",
        "login-security": "Хьой хилар бакъде",
        "nav-login-createaccount": "Довзийтар / дӀаяздар кхоллар",
-       "userlogin": "Довзийтар я декъашхочун дӀаяздар кхоллар",
-       "userloginnocreate": "Довзийта",
        "logout": "Болх дӀаберзор",
        "userlogout": "Болх дӀаберзор",
        "notloggedin": "ЦӀарца доцуш",
        "userlogin-noaccount": "Декъашхочун дӀаяздар дац хьа?",
        "userlogin-joinproject": "Проектехь дӀаяздар кхоллар",
-       "nologin": "Декъашхочун дӀаяздар дац хьа? '''$1'''.",
-       "nologinlink": "Кхолла декъашхочун дӀаяздар",
        "createaccount": "Кхолла декъашхочун дӀаяздар",
-       "gotaccount": "ДӀаяздар кхоьллин ахь? '''$1'''.",
-       "gotaccountlink": "Довзийта",
-       "userlogin-resetlink": "Чуволу/йолу хаам биц бела?",
        "userlogin-resetpassword-link": "Пароль кхоссар?",
        "userlogin-helplink2": "Системин чудахаран гӀодар",
        "userlogin-loggedin": "Хьо {{GENDER:$1|$1}} цӀарца чохь ву/ю.\nЛахара форманца кхин цӀарца чугӀо.",
        "createacct-another-email-ph": "ДӀаязде электронан поштан адрес",
        "createaccountmail": "Лелае цахууш нисйина хана пароль, кхин язйинчу электронан адрес тӀе яийта и.",
        "createacct-realname": "Хьан цӀе (ца язйича мега)",
-       "createaccountreason": "Бахьана:",
        "createacct-reason": "Бахьана",
        "createacct-reason-ph": "Стен кхуллуш ду ахьа керла декъашхочун дӀаяздар",
        "createacct-submit": "Кхолла декъашхочун дӀаяздар",
        "rcfilters-filter-editsbyself-label": "Хьан дисдарш",
        "rcfilters-filter-editsbyself-description": "Хьан нисдарш.",
        "rcfilters-filter-editsbyother-label": "Кхечу декъашхойн нисдарш",
-       "rcfilters-filter-userExpLevel-newcomer-label": "Керланиш",
-       "rcfilters-filter-userExpLevel-learner-label": "Доьшуш берш",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Керланиш",
+       "rcfilters-filter-user-experience-level-learner-label": "Доьшуш берш",
        "rcnotefrom": "Лахахь гайтина тӀера <strong>$2</strong> (хийцамаш <strong>$1</strong> кӀезиг).",
        "rclistfrom": "Гайта хийцам {{CURRENTYEAR}} шеран {{CURRENTDAY}} {{CURRENTMONTHNAMEGEN}} {{CURRENTTIME}} бина болу",
        "rcshowhideminor": "$1 кегийра нисдарш",
        "uploadnologintext": "Серверан чу файлаш яха ахьа дан дезарг ду $1.",
        "uploaderror": "Файл чуяккхаран гӀалат",
        "upload-recreate-warning": "'''Тегам бе: иштта цӀе йолу файл дӀаяьккхина я цӀе хийцина.'''\n\nЛахахьа гойтуш ю хӀокху агӀона тептар:",
-       "uploadtext": "Ð\9bелайе Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о Ñ\81еÑ\80веÑ\80 Ñ\87Ñ\83 Ñ\84айлаÑ\88 Ð¹Ð¾Ñ\85Ñ\83Ñ\88.\nÐ¥Ñ\8cалÑ\85о Ñ\87Ñ\83Ñ\8fÑ\8cÑ\85на Ñ\84айлаÑ\88 Ñ\85Ñ\8cажа,  [[Special:FileList|кÑ\85Ñ\83заÑ\85Ñ\8c]]. Ð\9aÑ\85ин Ñ\87Ñ\83Ñ\8fÑ\8cÑ\85на Ñ\84айлаÑ\88 Ð´Ó\80аÑ\8fзло [[Special:Log/upload|Ñ\87Ñ\83Ñ\8fÑ\85аÑ\80ан Ñ\82епÑ\82аÑ\80 Ñ\87оÑ\85Ñ\8c]], Ð´Ó\80аÑ\8fÑ\8cÑ\85на Ñ\84айлаÑ\88 ÐºÐ°Ñ\80о Ð¹Ð¸Ñ\88 Ñ\8e [[Special:Log/delete|кÑ\85Ñ\83заÑ\85Ñ\8c]].\n\nФайл Ð°Ð³Ó\80она Ñ\87Ñ\83йилла Ð»ÐµÐ»Ð°Ð±Ðµ Ð»Ð°Ñ\85аÑ\80а Ð¼Ð¾Ð³Ó\80анаÑ\88:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' Ñ\84айла Ð¤Ð°Ð¹Ð»Ð°Ð½ Ñ\8eÑ\8cззина Ð²ÐµÑ\80Ñ\81и Ñ\87Ñ\83йиллÑ\83Ñ\88;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|Ñ\86Ñ\83наÑ\85Ñ\8c Ð»Ð°Ñ\8cÑ\86на Ñ\85аам]]</nowiki></code>''' 200 Ð¿Ð¸ÐºÑ\81елÑ\8c Ð±Ð°Ñ\80амеÑ\85Ñ\8c Ñ\84айл Ñ\87Ñ\83йилаÑ\80 Ð±Ñ\83Ñ\85аÑ\85Ñ\8c Ñ\86Ñ\83наÑ\85Ñ\8c лаьцна могӀа а болуш;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' файлан тӀе хьажорг хӀотайо файл агӀонгахь ца гуш.",
+       "uploadtext": "Ð\9bелайе Ñ\85Ó\80аÑ\80а Ð°Ð³Ó\80о Ñ\81еÑ\80веÑ\80 Ñ\87Ñ\83 Ñ\84айлаÑ\88 Ð¹Ð¾Ñ\85Ñ\83Ñ\88.\nÐ¥Ñ\8cалÑ\85о Ñ\87Ñ\83Ñ\8fÑ\8cÑ\85на Ñ\84айлаÑ\88 Ñ\85Ñ\8cажа,  [[Special:FileList|кÑ\85Ñ\83заÑ\85Ñ\8c]]. Ð\9aÑ\85ин Ñ\87Ñ\83Ñ\8fÑ\8cÑ\85на Ñ\84айлаÑ\88 Ð´Ó\80аÑ\8fзло [[Special:Log/upload|Ñ\87Ñ\83Ñ\8fÑ\85аÑ\80ан Ñ\82епÑ\82аÑ\80 Ñ\87оÑ\85Ñ\8c]], Ð´Ó\80аÑ\8fÑ\8cÑ\85на Ñ\84айлаÑ\88 ÐºÐ°Ñ\80о Ð¹Ð¸Ñ\88 Ñ\8e [[Special:Log/delete|кÑ\85Ñ\83заÑ\85Ñ\8c]].\n\nФайл Ð°Ð³Ó\80она Ñ\87Ñ\83йилла Ð»ÐµÐ»Ð°Ð±Ðµ Ð»Ð°Ñ\85аÑ\80а Ð¼Ð¾Ð³Ó\80анаÑ\88:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>''' Ñ\84айла Ð¤Ð°Ð¹Ð»Ð°Ð½ Ñ\8eÑ\8cззина Ð²ÐµÑ\80Ñ\81и Ñ\87Ñ\83йиллÑ\83Ñ\88;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|Ñ\86Ñ\83наÑ\85Ñ\8c Ð»Ð°Ñ\8cÑ\86на Ñ\85аам]]</nowiki></code>''' 200 Ð¿Ð¸ÐºÑ\81елÑ\8c Ð±Ð°Ñ\80амеÑ\85Ñ\8c Ñ\84айл Ñ\87Ñ\83йиллаÑ\80 Ð±Ñ\83Ñ\85аÑ\85Ñ\8c Ñ\86Ñ\83Ñ\8cнаÑ\85 лаьцна могӀа а болуш;\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>''' файлан тӀе хьажорг хӀотайо файл агӀонгахь ца гуш.",
        "upload-permitted": "Магийна файлийн тайпанаш: $1.",
        "upload-preferred": "Магийна файлийн тайпанаш: $1.",
        "upload-prohibited": "Магийна доцу файлийн тайпанаш: $1.",
        "logentry-managetags-create": "$1 {{GENDER:$2|Кхоьллина}} билгало «$4»",
        "log-name-tag": "Билгалонийн тептар",
        "rightsnone": "(яц)",
-       "revdelete-summary": "хийцамах лаьцна",
        "feedback-adding": "АгӀона хетарг тӀетохар...",
        "feedback-back": "ЮхагӀо",
        "feedback-bugornote": "Хьайн техникин халонах лаьцна яздан хӀума делахь, дехар до, [$1 хаам бе тхоьга].\nДацахь хьан йиш ю хӀокху атта кепаца «[$3 $2]» агӀонг къамел тӀетоха хьан декъашхочун цӀарца, кхин лелош йолу браузер билгал еш.",
index ba0fb7f..6d2c938 100644 (file)
        "preview": "Paunang tan-aw",
        "showpreview": "Paunang tan-aw",
        "showdiff": "Ipakita ang kalainan",
-       "anoneditwarning": "'''Pahibalo:''' Wala ikaw maka-login.\nAng imong ''IP address'' maoy itala sa kaagi niini nga panid.",
+       "anoneditwarning": "<strong>Pahimangno:</strong> Wala ka mailhi sa balayan. Ang imong <i>IP adress</i> makita sa publiko kon mohimo ka og mga pag-usab. Kon <strong>mo-<i>[$1 log in]</i></strong> ka o <strong>[$2 mohimo og akawnt]</strong>, ang imong mga pag-usab ingalan sa imong <i>username</i>, lakip na ang uban pang kaayohan.",
        "summary-preview": "Paunang tan-aw sa mubong sugid:",
        "loginreqlink": "sulod",
        "newarticle": "(Bag-o)",
        "upload": "Pagsumiter og payl",
        "uploadlogpage": "Log sa upload",
        "license": "Paglilisensya:",
-       "license-header": "Paglilisensya",
+       "license-header": "Pagtugot",
        "file-anchor-link": "Payl",
        "filehist": "Kaagi sa payl",
        "filehist-help": "I-klik ang petsa/oras aron makit-an ang hulagway sa payl niadtong panahona.",
        "tooltip-t-recentchangeslinked": "Mga bag-ong pag-usab sa mga panid gikan ning panid",
        "tooltip-feed-rss": "Feed nga RSS niining panid",
        "tooltip-feed-atom": "Feed nga Atom niining panid",
-       "tooltip-t-contributions": "Tan-awa ang talaan sa mga tampo niining gumagamit",
+       "tooltip-t-contributions": "Talaan sa mga tampo {{GENDER:$1|niining gumagamit}}",
        "tooltip-t-emailuser": "Padalhi og e-mail ang kaning gumagamit",
        "tooltip-t-upload": "Pagsumiter og mga payl",
        "tooltip-t-specialpages": "Talaan sa mga espesyal nga panid",
        "metadata-expand": "Ipakita ang mas daghang detalye",
        "metadata-collapse": "Tagoa ang mga ekstended nga detalye",
        "metadata-fields": "Ang <i>XIF metadata fields</i> nga nakatala niining mensahe iapil sa panid sa hulagway kon gi-<i>collapse</i> ang han-ay sa <i>metadata</i>.\n\nAng uban nakatago gawas kon ipakita.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-orientation": "Oryentasyon",
+       "exif-xresolution": "Resolusyon (pahigda)",
+       "exif-yresolution": "Resolusyon (pabarog)",
+       "exif-datetime": "Petsa ug oras sa pagkausab sa payl",
+       "exif-colorspace": "<i>Color space</i>",
        "namespacesall": "tanan",
        "monthsall": "tanan",
        "watchlisttools-view": "Tan-awa ang may kalabotan nga mga pag-usab",
index c41db4a..e1d254c 100644 (file)
        "prefs-help-prefershttps": "Diese Einstellung wird bei deiner nächsten Anmeldung wirksam.",
        "prefswarning-warning": "Du hast Änderungen an deinen Einstellungen durchgeführt, die noch nicht gespeichert wurden.\nWenn du diese Seite verlässt ohne auf „$1“ zu klicken, werden deine Einstellungen nicht aktualisiert.",
        "prefs-tabs-navigation-hint": "Tipp: Du kannst die linke und rechte Pfeiltasten benutzen, um zwischen den Registerkarten in der Reiterliste zu navigieren.",
-       "userrights": "Benutzerrechte verwalten",
+       "userrights": "Benutzerrechte",
        "userrights-lookup-user": "Einen Benutzer auswählen",
        "userrights-user-editname": "Benutzername:",
        "editusergroup": "Benutzergruppen laden",
index 61948ff..2ef4f3a 100644 (file)
        "page_last": "last",
        "histlegend": "Diff selection: Mark the radio boxes of the revisions to compare and hit enter or the button at the bottom.<br />\nLegend: <strong>({{int:cur}})</strong> = difference with latest revision, <strong>({{int:last}})</strong> = difference with preceding revision, <strong>{{int:minoreditletter}}</strong> = minor edit.",
        "history-fieldset-title": "Browse history",
-       "history-show-deleted": "Deleted only",
+       "history-show-deleted": "Revision deleted only",
        "history_copyright": "-",
        "histfirst": "oldest",
        "histlast": "newest",
index 510e273..dd5f348 100644 (file)
        "prefs-help-prefershttps": "Cette préférence sera effective lors de votre prochaine connexion.",
        "prefswarning-warning": "Vous avez effectué des modifications dans vos préférences qui n’ont pas encore été enregistrées.\nSi vous quittez cette page sans cliquer sur « $1 », vos préférences ne seront pas mises à jour.",
        "prefs-tabs-navigation-hint": "Astuce : Vous pouvez utiliser les flèches de gauche et de droite pour naviguer entre les onglets.",
-       "userrights": "Gestion des droits des utilisateurs",
+       "userrights": "Droits des utilisateurs",
        "userrights-lookup-user": "Sélectionner un utilisateur",
        "userrights-user-editname": "Entrez un nom d'utilisateur :",
        "editusergroup": "Charger des groupes d’utilisateurs",
index f5fdd7d..e0c1524 100644 (file)
        "prefs-help-prefershttps": "העדפה זו תיכנס לתוקף בכניסה הבאה לחשבון.",
        "prefswarning-warning": "ביצעת שינויים בהעדפות שלך, והם עדיין לא נשמרו.\nעזיבת דף זה ללא לחיצה על \"$1\" תגרום לכך שההעדפות שלך לא יעודכנו.",
        "prefs-tabs-navigation-hint": "טיפ: ניתן להשתמש במקשי החצים הימני והשמאלי כדי לנווט בין הלשוניות ברשימת הלשוניות.",
-       "userrights": "× ×\99×\94×\95×\9c ×\94רש×\90×\95ת ×\9eשת×\9eש",
+       "userrights": "הרשאות משתמש",
        "userrights-lookup-user": "בחירת משתמש",
        "userrights-user-editname": "שם משתמש:",
        "editusergroup": "טעינת קבוצות המשתמש",
index aea1a79..6197bae 100644 (file)
        "botpasswords-updated-body": "Zaporka za bota imena »$1« suradnika »$2« obnovljena je.",
        "botpasswords-deleted-title": "Zaporka je za Vašeg bota uklonjena",
        "resetpass_forbidden": "Zaporka ne može biti promijenjena",
+       "resetpass_forbidden-reason": "Zaporka ne može biti promijenjena: $1",
        "resetpass-no-info": "Morate biti prijavljeni da biste izravno pristupili ovoj stranici.",
        "resetpass-submit-loggedin": "Promijeni zaporku",
        "resetpass-submit-cancel": "Odustani",
        "passwordreset-emailtext-user": "Suradnik $1 na {{SITENAME}} zatražio je podsjetnik o pojedinostima vašeg računa za {{SITENAME}}\n($4). Sljedeći {{PLURAL:$3|račun suradnika je|računi suradnika su}} povezani s ovom e-mail adresom:\n\n$2\n\n{{PLURAL:$3|Ova privremena zaporka|Ove privremene zaporke}} će isteći u {{PLURAL:$5|jedan dan|$5 dana}}.\nTrebate se prijaviti i odabrati novu zaporku. Ukoliko je netko drugi napravio ovaj\nzahtjev, ili ako ste se sjetili Vaše izvorne zaporke, a više je ne želite promijeniti, \nmožete zanemariti ovu poruku i nastavite koristiti staru zaporku.",
        "passwordreset-emailelement": "Suradničko ime: \n$1\n\nPrivremena zaporka: \n$2",
        "passwordreset-emailsentemail": "Ako je ova adresa povezana s Vašim suradničkim računom, na nju će biti poslan podsjetnik na zaporku.",
+       "passwordreset-emailsentusername": "Ukoliko je ova adresa povezana s Vašim suradničkim računom, na istu će biti poslan podsjetnik sa zaporkom.",
        "passwordreset-invalidemail": "Nevaljala adresa e-pošte",
        "changeemail": "Promijeni ili izbriši e-mail adresu",
        "changeemail-header": "Ispunite ovaj obrazac da biste promijenili svoju adresu e-pošte. Ukoliko želite ukloniti povezanost svoje adrese e-pošte i suradničkoga računa, prilikom popunjavanja obrasca ostavite prazno polje umjesto upisivanja nove adrese e-pošte.",
        "userinvalidcssjstitle": "'''Upozorenje:''' Nema sučelja pod imenom \"$1\". Ne zaboravite da imena stranica s .css and .js kodom počinju malim slovom, npr. {{ns:user}}:Mate/vector.css, a ne {{ns:user}}:Mate/Vector.css.",
        "updated": "(Ažurirano)",
        "note": "'''Napomena:'''",
-       "previewnote": "'''Ne zaboravite da je ovo samo pregled kako će stranica izgledati. Vaše uređivanje još nije snimljeno!'''",
+       "previewnote": "<strong>Ne zaboravite da je ovo samo pregled kako će stranica izgledati.</strong>\nVaše uređivanje još nije snimljeno!",
        "continue-editing": "Nastavi uređivati",
        "previewconflict": "Ovaj pregled odražava stanje u gornjem polju za unos koje će biti sačuvano\nako pritisnete \"Sačuvaj stranicu\".",
        "session_fail_preview": "'''Ispričavamo se! Nismo mogli obraditi Vašu izmjenu zbog gubitka podataka o prijavi.\nMolimo pokušajte ponovno. Ako i dalje ne bude uspijevalo, pokušajte se [[Special:UserLogout|odjaviti]] i ponovno prijaviti.'''",
        "prefs-help-recentchangescount": "Ovo uključuje nedavne promjene, stare izmjene, i evidencije.",
        "prefs-help-watchlist-token2": "Ovo je tajni ključ prema sažetku Vašeg popisa praćenja. Svaki suradnik kojem je poznat, moći će čitati Vaš popis praćenih stranica. Ne dijelite ga ni s kim. [[Special:ResetTokens|Kliknite ovdje ako ga želite ponovo postaviti]].",
        "savedprefs": "Vaše postavke su sačuvane.",
-       "savedrights": "Suradnička prava {{GENDER:suradnika $1|suradnice $1}} su spremljena.",
+       "savedrights": "Suradnička su prava {{GENDER:$1|suradnika $1|suradnice $1}} spremljena.",
        "timezonelegend": "Vremenska zona:",
        "localtime": "Lokalno vrijeme:",
        "timezoneuseserverdefault": "Koristi postavke wikija ($1)",
        "youremail": "Vaša elektronska pošta *",
        "username": "Ime {{GENDER:$1|suradnika|suradnice}}:",
        "prefs-memberingroups": "{{GENDER:$2|Suradnik|Suradnica}} je član {{PLURAL:$1|sljedeće skupine|sljedećih skupina}}:",
+       "group-membership-link-with-expiry": "$1 (do $2)",
        "prefs-registration": "Vrijeme prijave:",
        "yourrealname": "Pravo ime (nije obvezno)*",
        "yourlanguage": "Jezik:",
        "prefs-help-prefershttps": "Ova mogućnost će stupiti na snagu kod sljedeće prijave.",
        "prefswarning-warning": "Napravili ste promjene u Vašim postavkama koje još nisu snimljene.\nAko napustite ovu stranicu bez pritiska na \"$1\", postavke neće biti ažurirane.",
        "prefs-tabs-navigation-hint": "Savjet: možete rabiti tipke sa strjelicama lijevo i desno za prebacivanje između kartica na popisu kartica.",
-       "userrights": "Upravljanje suradničkim pravima",
+       "userrights": "Upravljanje pravima",
        "userrights-lookup-user": "Izaberi suradnika",
        "userrights-user-editname": "Unesite suradničko ime:",
        "editusergroup": "Učitaj suradničke skupine",
        "userrights-nodatabase": "Baza podataka $1 ne postoji ili nije lokalno dostupna.",
        "userrights-changeable-col": "Skupine koje možete promijeniti",
        "userrights-unchangeable-col": "Skupine koje ne možete promijeniti",
+       "userrights-expiry-current": "Ističe $1",
        "userrights-expiry-none": "Neograničeno trajanje statusa",
        "userrights-conflict": "Sukob promjene suradničkih prava! Molimo provjerite i potvrdite svoje promjene.",
        "group": "Skupina:",
        "group-bot": "Botovi",
        "group-sysop": "Administratori",
        "group-bureaucrat": "Birokrati",
-       "group-suppress": "Nadzornici",
+       "group-suppress": "Otajnici",
        "group-all": "(svi)",
        "group-user-member": "{{GENDER:$1|suradnik|suradnica}}",
        "group-autoconfirmed-member": "{{GENDER:$1|automatski potvrđen suradnik|automatski potvrđena suradnica}}",
        "group-bot-member": "{{GENDER:$1|bot}}",
        "group-sysop-member": "{{GENDER:$1|administrator|administratorica}}",
        "group-bureaucrat-member": "{{GENDER:$1|birokrat|birokratica}}",
-       "group-suppress-member": "{{GENDER:$1|nadzornik|nadzornica}}",
+       "group-suppress-member": "{{GENDER:$1|otajnik|otajnica}}",
        "grouppage-user": "{{ns:project}}:Suradnici",
        "grouppage-autoconfirmed": "{{ns:project}}:automatski potvrđeni suradnici",
        "grouppage-bot": "{{ns:project}}:Botovi",
        "grouppage-sysop": "{{ns:project}}:Administratori",
        "grouppage-bureaucrat": "{{ns:project}}:Birokrati",
-       "grouppage-suppress": "{{ns:project}}:Nadzor",
+       "grouppage-suppress": "{{ns:project}}:Otajnost",
        "right-read": "Čitanje stranica",
        "right-edit": "Uređivanje stranica",
        "right-createpage": "Stvaranje stranica (stranica koje nisu razgovor)",
        "right-deletedtext": "Pregled izbrisanog teksta i izmjena između izbrisanih izmjena",
        "right-browsearchive": "Traženje obrisanih stranica",
        "right-undelete": "Vraćanje stranica",
-       "right-suppressrevision": "Pregledavanje i vraćanje izmjena skrivenih od administratora",
+       "right-suppressrevision": "Pregledavanje, skrivanje i vraćanje izmjena na suradničkim stranicama bilo kojega suradnika",
+       "right-viewsuppressed": "Prikaži izmjene skrivene od svih suradnika",
        "right-suppressionlog": "Gledanje privatnih evidencija",
        "right-block": "Blokiranje suradnika u uređivanju",
        "right-blockemail": "Blokiranje suradnika u slanju elektroničke pošte",
        "right-protect": "Mijenjanje razina zaštićivanja i uređivanje zaštićenih stranica",
        "right-editprotected": "Uređivanje stranica zaštićenih kao \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Uređivanje stranica zaštićenih kao \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Odredi modela sadržaja stranice",
        "right-editinterface": "Uređivanje suradničkog sučelja",
        "right-editusercssjs": "Uređivanje CSS i JS stranica drugih suradnika",
        "right-editusercss": "Uređivanje CSS stranica drugih suradnika",
        "action-viewmyprivateinfo": "pregled Vaših privatnih podataka",
        "action-editmyprivateinfo": "uredite svoje privatne podatke",
        "nchanges": "{{PLURAL:$1|$1 promjena|$1 promjene|$1 promjena}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|uređivanje od Vašeg posljednjeg posjeta|uređivanja od Vašeg posljednjeg posjeta}}",
        "enhancedrc-history": "povijest",
        "recentchanges": "Nedavne promjene",
        "recentchanges-legend": "Izbornik nedavnih promjena",
        "recentchanges-legend-newpage": "Nova stranica",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "Prikaži",
+       "rcfilters-activefilters": "Aktivni filtri",
+       "rcfilters-restore-default-filters": "Vrati zadane filtre",
+       "rcfilters-clear-all-filters": "Očisti sve filtre",
+       "rcfilters-search-placeholder": "Posljednje izmjene filtera (pogledajte ili počnite unositi)",
+       "rcfilters-invalid-filter": "Filter nije valjan",
        "rcnotefrom": "Slijede promjene od <b>$2</b> (prikazano ih je do <b>$1</b>).",
        "rclistfrom": "Prikaži nove promjene počevši od $3 $2",
        "rcshowhideminor": "$1 manje promjene",
        "sp-contributions-hideminor": "Sakrij manje izmjene",
        "sp-contributions-submit": "Traži",
        "whatlinkshere": "Što vodi ovamo",
-       "whatlinkshere-title": "Stranice koje vode na \"$1\"",
+       "whatlinkshere-title": "Stranice koje vode na »$1«",
        "whatlinkshere-page": "Stranica:",
        "linkshere": "Sljedeće stranice povezuju ovamo ([[:$1]]):",
        "nolinkshere": "Nijedna stranica ne vodi ovamo (tj. nema poveznica na stranicu [[:$1]]).",
index b679a47..2af3f91 100644 (file)
        "prefs-help-prefershttps": "A beállítás a legközelebbi belépés után lép érvénybe.",
        "prefswarning-warning": "A beállításaidban tett módosítások nincsenek elmentve. Ha a $1 megnyomása nélkül hagyod el az oldalt, a beállításaid nem módosulnak.",
        "prefs-tabs-navigation-hint": "Tipp: a jobbra-balra nyilakkal navigálhatsz a fülek között.",
-       "userrights": "Szerkesztői jogok beállítása",
+       "userrights": "Szerkesztői jogok",
        "userrights-lookup-user": "Válasszon ki egy felhasználót",
        "userrights-user-editname": "Add meg a szerkesztő nevét:",
        "editusergroup": "Szerkesztőcsoportok betöltése",
index e8f90af..fbadb16 100644 (file)
@@ -37,7 +37,7 @@
        "tog-enotifminoredits": "Esuratannak pay para kadagiti bassit a panagurnos kadagiti panid ken papeles",
        "tog-enotifrevealaddr": "Iparang ti pagtaengan ti esuratko iti panagipakaaammo kadagiti esurat",
        "tog-shownumberswatching": "Ipakita ti bilang dagiti agbuybuya nga agar-aramat",
-       "tog-oldsig": "Ti adda a pirma:",
+       "tog-oldsig": "Ti adda a pirmam:",
        "tog-fancysig": "Tratuen ti pirma a kas wikitext (awanan iti automatiko a silpo)",
        "tog-uselivepreview": "Usaren ti agdama a panagipadas",
        "tog-forceeditsummary": "Pakaammuannak no sumrek iti blanko a pakabuklan ti panagurnos",
@@ -54,7 +54,7 @@
        "tog-showhiddencats": "Ipakita dagiti nailemmeng a kategoria",
        "tog-norollbackdiff": "Saan nga ipakita ti paggiddiatan kalpasan ti panagaramid ti panagisubli",
        "tog-useeditwarning": "Pakaunaannak no pumanawak iti maysa pagurnosan a panid nga addaan iti saan a naidulin a sinuksukatan",
-       "tog-prefershttps": "Kankanayon nga agusar ti natalged a koneksion no nakastrek",
+       "tog-prefershttps": "Kankanayon nga agusar iti natalged a koneksion bayat a nakastrek",
        "underline-always": "Kanayon",
        "underline-never": "Saan uray kaanoman",
        "underline-default": "Kudil wenno kasisigud a pagbasabasa",
        "newwindow": "(aglukat iti baro a tawa)",
        "cancel": "Ukasen",
        "moredotdotdot": "Adu pay...",
-       "morenotlisted": "Daytoy a listaan ket saan a kompleto.",
+       "morenotlisted": "Daytoy a listaan ket mabalin a saan a kompleto.",
        "mypage": "Panid",
        "mytalk": "Tungtungan",
        "anontalk": "Tungtungan",
        "searcharticle": "Inkan",
        "history": "Pakasaritaan ti panid",
        "history_short": "Pakasaritaan",
+       "history_small": "pakasaritaan",
        "updatedmarker": "napabaro sipud ti naudi nga isasarungkarko",
        "printableversion": "Bersion a maimaldit",
        "permalink": "Agnanayon a silpo",
        "talk": "Pagtungtungan",
        "views": "Dagiti pangkitaan",
        "toolbox": "Ramramit",
+       "tool-link-userrights": "Baliwan dagiti grupo ti {{GENDER:$1|agar-aramat}}",
+       "tool-link-userrights-readonly": "Kitaen dagiti grupo ti {{GENDER:$1|agar-aramat}}",
+       "tool-link-emailuser": "Esuratam daytoy nga {{GENDER:$1|agar-aramat}}",
        "userpage": "Kitaen ti panid ti agar-aramat",
        "projectpage": "Kitaen ti panid ti proyekto",
        "imagepage": "Kitaen ti panid ti papeles",
        "login": "Sumrek",
        "login-security": "Pasingkedan ti identidadmo",
        "nav-login-createaccount": "Sumrek / agpartuat iti pakabilangan",
-       "userlogin": "Sumrek / agpartuat iti pakabilangan",
-       "userloginnocreate": "Sumrek",
        "logout": "Rummuar",
        "userlogout": "Rummuar",
        "notloggedin": "Saan a nakastrek",
        "userlogin-noaccount": "Awan ti pakabilangam?",
        "userlogin-joinproject": "Tumipon iti {{SITENAME}}",
-       "nologin": "Awan pakabilangam? $1.",
-       "nologinlink": "Agpartuat iti pakabilangan",
        "createaccount": "Agpartuat iti pakabilangan",
-       "gotaccount": "Addaanka kadin iti pakabilangan? $1.",
-       "gotaccountlink": "Sumrek",
-       "userlogin-resetlink": "Nalipatam dagiti salaysay ti panagserrekmo?",
        "userlogin-resetpassword-link": "Nalipatam ti kontraseniasmo?",
        "userlogin-helplink2": "Tulong iti panagserrek",
        "userlogin-loggedin": "Nakastrekkan a kas ni {{GENDER:$1|$1}}.\nUsaren ti porma dita baba tapno sumrek a kas sabali nga agar-aramat.",
        "createaccountmail": "Agusar iti pugto a temporario a kontrasenias ken ipatulod iti naisangayan nga esurat a pagtaengan",
        "createaccountmail-help": "Mabalin a mausar a panagpartuat ti pakabilangan para iti sabali a tao a saan a makaammo iti kontrasenias.",
        "createacct-realname": "Pudno a nagan (pagpilian)",
-       "createaccountreason": "Rason:",
        "createacct-reason": "Rason",
        "createacct-reason-ph": "Apay nga agparpartuatka manen iti sabali a pakabilangan",
        "createacct-reason-help": "Ti mensahe a naipakita iti listaan iti panagpartuat ti pakabilangan",
        "selfredirect": "<strong>Ballaag:</strong> Ibawbaw-ingmo daytoy a panid iti isu met laeng a panid.\nMabalinmo nga innaganan ti kamali a puntaan para iti baw-ing, wenno mabalin nga ur-urnosem ti kamali a panid.\nNo pindutem manen ti \"{{int:savearticle}}\" , mapartuatto lattan ti baw-ing.",
        "missingcommenttext": "Pangngaasi nga agikabil ti komentario dita baba.",
        "missingcommentheader": "<strong>Palagip:</strong> Saanka pay a nakaited iti suheto para iti daytoy a komentario.\nNo pindutem manen ti \"{{int:savearticle}}\", maidulinto ti inurnosmo nga awan ti pakabuklanna.",
-       "summary-preview": "Naipadas a pakabuklan:",
-       "subject-preview": "Naipadas a suheto:",
+       "summary-preview": "Panangipadas ti pakabuklan ti panagurnos:",
+       "subject-preview": "Panangipadas ti suheto:",
        "previewerrortext": "Adda napasamak a maysa a biddut bayat a nagpadpadas kadagiti binawbaliwam.",
        "blockedtitle": "Naseraan ti agar-aramat",
        "blockedtext": "<strong>Naseraan ti naganmo nga agar-aramat wenno ti IP a pagtaengam.</strong>\n\nTi serra ket inaramid babaen ni $1. \nTi rason a naited ket <em>$2</em>.\n\n* Rugi ti serra: $8\n* Panagpaso ti serra: $6\n* Naikeddeng a serraanna: $7\n\nMabalinmo a kontaken ni $1 wenno sabali pay nga [[{{MediaWiki:Grouppage-sysop}}|administrador]] no kayatmo a maipalawag daytoy a panagserra.\nDimo mabalin nga aramaten ti ramit nga esuratan daytoy nga agar-aramat malaksid no adda napudno nga esurat a pagtaengan a nainaganan iti [[Special:Preferences|pakabilangan ti kakaykayatm]] ken no saanka a naparitan nga agaramat iti daytoy.\nTi agdama nga IP a pagtaengam ket $3, ti naserraan nga ID ket #$5. \nPangngaasi nga iramanmo amin dagiti salaysay dita ngato kadagiti ania man nga aramidem nga usisa.",
        "searchprofile-advanced-tooltip": "Agbirukka kadagiti naiduma a nagan ti espasio",
        "search-result-size": "$1 ({{PLURAL:$2|iti 1 a balikas|kadagiti $2 a balikas}})",
        "search-result-category-size": "{{PLURAL:$1|1 a kameng| dagiti $1 a kameng}} ({{PLURAL:$2|1 a subkategoria|dagiti $2 a subkategoria}}, {{PLURAL:$3|1 a papeles|dagiti $3 a papeles}})",
-       "search-redirect": "(baw-ing $1)",
+       "search-redirect": "(baw-ing manipud iti $1)",
        "search-section": "(seksion $1)",
        "search-category": "(kategoria $1)",
        "search-file-match": "(maipada ti linaon a papeles)",
        "search-interwiki-caption": "Dagiti kakabsat a proyekto",
        "search-interwiki-default": "Dagiti resulta manipud iti $1:",
        "search-interwiki-more": "(adu pay)",
+       "search-interwiki-more-results": "adu pay a resresulta",
        "search-relatedarticle": "Mainaig",
        "searchrelated": "mainaig",
        "searchall": "amin",
        "search-external": "Akinruar a panagbiruk",
        "searchdisabled": "Nabaldado ti panagbiruk iti {{SITENAME}}.\nMabalinmo itan ti agbiruk iti Google.\nLaglagipem laeng a dagiti pagsurotan a linaon ti {{SITENAME}} ket mabalin a baak.",
        "search-error": "Adda napasamak a biddut bayat nga agbirbiruk: $1",
+       "search-warning": "Adda napasamak a ballaag bayat nga agbirbiruk: $1",
        "preferences": "Kakaykayatan",
        "mypreferences": "Kakaykayatan",
        "prefs-edits": "Bilang dagiti inurnos:",
        "prefs-help-recentchangescount": "Daytoy ket mangiraman iti kaudian a balbaliw, dagiti pakasaritaan ti panid, ken dagiti listaan.",
        "prefs-help-watchlist-token2": "Daytoy ti sekreto a tulbek iti pakan ti web iti listaan ti bambantayam.\nTi sinoman a makaammo daytoy ket mabalinda a basaen ti listaan ti bambantayam, isu a saanmo nga ipabingay.\nNo masapulmo, [[Special:ResetTokens|mabalinmo nga isaad manen]].",
        "savedprefs": "Naidulinen dagiti kakaykayatam.",
-       "savedrights": "Naidulinen dagiti karbengan ti agar-aramat ni {{GENDER:$1|$1}}.",
+       "savedrights": "Naidulinen dagiti grupo ti agar-aramat ni {{GENDER:$1|$1}}.",
        "timezonelegend": "Sona ti oras:",
        "localtime": "Lokal nga oras:",
        "timezoneuseserverdefault": "Usaren ti kasisigud ti wiki ($1)",
        "youremail": "Esurat:",
        "username": "{{GENDER:$1|Nagan ti agar-aramat}}:",
        "prefs-memberingroups": "{{GENDER:$2|Kameng}} ti {{PLURAL:$1|a grupo|a grupgrupo}}:",
+       "group-membership-link-with-expiry": "$1 (aginggana intono $2)",
        "prefs-registration": "Oras a nagrehistro:",
        "yourrealname": "Pudno a nagan:",
        "yourlanguage": "Pagsasao:",
        "prefswarning-warning": "Nagaramikka kadagiti panagbalbaliw kadagiti kakaykayatam a saan pay a naidulin.\nNo panawan daytoy a panid a saan nga agpindut iti \"$1\" dagiti kakaykayatam ket saanto a mapabaro.",
        "prefs-tabs-navigation-hint": "Pakaammo: Mabalinmo nga usaren dagiti kanigid ken kanawan a tekla ti pana tapno madaliasat ti baetan dagiti etiketa iti listaan dagiti etiketa.",
        "userrights": "Panagtaripato kadagiti karbengan ti agar-aramat",
-       "userrights-lookup-user": "Agtaripato kadagiti grupo ti agar-aramat",
+       "userrights-lookup-user": "Agpili iti agar-aramat",
        "userrights-user-editname": "Mangiserrek iti nagan ti agar-aramat:",
-       "editusergroup": "Urnosen dagiti grupo ti {{GENDER:$1|agar-aramat}}",
+       "editusergroup": "Ikarga dagiti grupo ti agar-aramat",
        "editinguser": "Suksukatan ti karbengan ni {{GENDER:$1|agar-aramat}} <strong>[[User:$1|$1]]</strong> $2",
-       "userrights-editusergroup": "Urnosen dagiti grupo ti agar-aramat",
+       "userrights-editusergroup": "Urnosen dagiti grupo ti {{GENDER:$1|agar-aramat}}",
+       "userrights-viewusergroup": "Kitaen dagiti grupo ti {{GENDER:$1|agar-aramat}}",
        "saveusergroups": "Idulin dagiti grupo ti {{GENDER:$1|agar-aramat}}",
        "userrights-groupsmember": "Kameng ti:",
        "userrights-groupsmember-auto": "Napudno a kameng ti:",
        "userrights-nodatabase": "Awan ti database a $1 wenno saan a lokal.",
        "userrights-changeable-col": "Dagiti grupo a mabalinmo a baliwan",
        "userrights-unchangeable-col": "Dagiti grupo a dimo mabalin a baliwan",
+       "userrights-expiry-current": "Agpaso $1",
+       "userrights-expiry-none": "Saan nga agpaso",
+       "userrights-expiry": "Agpaso:",
+       "userrights-expiry-existing": "Ti adda a panagpaso ti oras: $3, $2",
+       "userrights-expiry-othertime": "Sabali nga oras:",
+       "userrights-invalid-expiry": "Imbalido ti oras a panagpaso para iti grupo \"$1\".",
+       "userrights-expiry-in-past": "Napalabasen ti oras a panagpaso para iti grupo \"$1\".",
        "userrights-conflict": "Suppiat dagiti panagbaliw kadagiti karbengan ti agar-aramat! Pangngaasi nga irepasom ken pasingkedam dagiti sinuksukatam.",
        "group": "Grupo:",
        "group-user": "Dagiti agar-aramat",
        "action-upload_by_url": "agikarga iti daytoy a papeles manipud iti URL",
        "action-writeapi": "agusar iti panagsurat ti API",
        "action-delete": "agikkat iti daytoy a panid",
-       "action-deleterevision": "agikkat iti daytoy a rebision",
-       "action-deletedhistory": "agkita kadagiti naikkat a pakasaritaan iti daytoy a panid",
+       "action-deleterevision": "agikkat kadagiti rebision",
+       "action-deletedhistory": "agkita iti naikkat a pakasaritaan ti panid",
+       "action-deletedtext": "agkita iti naikkat a rebision ti teksto",
        "action-browsearchive": "agbiruk kadagiti naikkat a panid",
-       "action-undelete": "agisubli iti pannakaikkat iti daytoy a panid",
-       "action-suppressrevision": "agrepaso ken agisubli iti daytoy a nailemmeng a rebision",
+       "action-undelete": "agisubli iti pannakaikkat kadagiti panid",
+       "action-suppressrevision": "agrepaso ken agisubli kadagiti nailemmeng a rebision",
        "action-suppressionlog": "agkita iti daytoy a pribado a listaan",
        "action-block": "agserra iti daytoy nga agar-aramat manipud iti panagurnos",
        "action-protect": "mangsukat kadagiti lessaad ti salaknib para iti daytoy a panid",
        "action-userrights-interwiki": "agurnos kadagiti karbengan ti agar-aramat dagiti agar-aramat kadagiti sabali a wiki",
        "action-siteadmin": "mangkandado wenno manglukat ti database",
        "action-sendemail": "agipatulod kadagiti esurat",
+       "action-editmyoptions": "urnosem dagiti kakaykayatam",
        "action-editmywatchlist": "agurnos iti bukodmo a listaan ti bambantayan",
        "action-viewmywatchlist": "agkita iti bukodmo a listaan ti bambantayan",
        "action-viewmyprivateinfo": "agkita iti bukodmo a pribado a pakaammo",
        "recentchanges-legend-heading": "<strong>Leyenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (kitaen pay ti [[Special:NewPages|listaan ti baro a pampanid]])",
        "recentchanges-submit": "Ipakita",
+       "rcfilters-activefilters": "Dagiti aktibo a sagat",
+       "rcfilters-restore-default-filters": "Isubli dagiti kasisigud a sagat",
+       "rcfilters-clear-all-filters": "Dalusan amin dagiti sagat",
+       "rcfilters-search-placeholder": "Sagaten ti kaudian a balbaliw (agbasabasa wenno mangrugi nga agmakinilia)",
+       "rcfilters-invalid-filter": "Imbalido a sagat",
+       "rcfilters-empty-filter": "Awan dagiti aktibo a sagat. Naipakita amin dagiti kontribusion.",
+       "rcfilters-filterlist-title": "Dagiti sagat",
+       "rcfilters-highlightmenu-title": "Agpili iti maris",
+       "rcfilters-filterlist-noresults": "Awan dagiti nabirukan a sagat",
+       "rcfilters-filter-registered-label": "Nakarehistro",
+       "rcfilters-filter-registered-description": "Dagiti nakastrek nga editor.",
+       "rcfilters-filter-unregistered-label": "Saan a nakarehistro",
+       "rcfilters-filter-unregistered-description": "Dagiti editor a saan a nakastrek.",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Dagiti agdadamo",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Basbassit ngem 10 nga inur-urnos ken 4 nga aldaw iti aktibidad.",
+       "rcfilters-filter-user-experience-level-learner-label": "Dagiti agad-adal",
+       "rcfilters-filter-user-experience-level-learner-description": "Ad-adu nga al-aldaw iti aktibidad ken inur-urnos ngem \"Dagiti agdadamo\" ngem basbassit ngem \"Dagiti nasanay nga agar-aramat\".",
+       "rcfilters-filter-user-experience-level-experienced-label": "Dagiti nasanay nga agar-aramat",
+       "rcfilters-filter-user-experience-level-experienced-description": "Ad-adu ngem 30 nga aldaw iti aktibidad ken 500 nga inur-urnos.",
+       "rcfilters-filtergroup-automated": "Dagiti automado a kontribusion",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Dagiti inurnos nga inaramid babaen ti automado a ramramit.",
+       "rcfilters-filter-humans-label": "Tao (saan a bot)",
+       "rcfilters-filter-humans-description": "Dagiti inurnos nga inaramid babaen dagiti editor a tao.",
+       "rcfilters-filtergroup-reviewstatus": "Irepaso ti kasasaad",
+       "rcfilters-filter-patrolled-label": "Napatruliaan",
+       "rcfilters-filter-patrolled-description": "Dagiti inurnos a namarkaan a kas napatruliaan.",
+       "rcfilters-filter-unpatrolled-label": "Di napatruliaan",
+       "rcfilters-filter-unpatrolled-description": "Dagiti inurnos a saan a namarkaan a kas napatruliaan.",
+       "rcfilters-filtergroup-changetype": "Kita ti panagbaliw",
        "rcnotefrom": "Dita baba ket {{PLURAL:$5|ti sinukatan|dagiti sinukatan}} manipud idi <strong>$3, $4</strong> (aginggana iti <strong>$1</strong> a naipakita).",
        "rclistfrom": "Ipakita dagiti kabarbaro a sinukatan a mangrugi manipud idi $2, $3",
        "rcshowhideminor": "$1 dagiti bassit a panagurnos",
        "upload-dialog-disabled": "Nabaldado iti daytoy a wiki dagiti panangikarga ti papeles iti daytoy a dialogo.",
        "upload-dialog-title": "Agikarga iti papeles",
        "upload-dialog-button-cancel": "Ukasen",
+       "upload-dialog-button-back": "Agsubli",
        "upload-dialog-button-done": "Nalpasen",
        "upload-dialog-button-save": "Idulin",
        "upload-dialog-button-upload": "Agikarga",
        "apisandbox-results-fixtoken-fail": "Napaay ti panagala iti tangdan ti \"$1\".",
        "apisandbox-alert-page": "Saan nga umiso dagiti pagikabilan iti daytoy a panid.",
        "apisandbox-alert-field": "Saan nga umiso ti pateg iti daytoy a pagikabilan.",
+       "apisandbox-continue": "Agtuloy",
+       "apisandbox-continue-clear": "Dalusan",
+       "apisandbox-multivalue-all-namespaces": "$1 (Amin a nagan ti espasio)",
+       "apisandbox-multivalue-all-values": "$1 (Amin a patpateg)",
        "booksources": "Dagiti taudan ti libro",
        "booksources-search-legend": "Agbiruk para kadagiti taudan ti libro",
        "booksources-search": "Biruken",
        "booksources-text": "Dita baba ket listaan dagiti silpo ti sabali a sitio nga aglaklako ti baro ken saan a nausar a liblibro, ken mabalin nga addaan pay iti adu a pakaammo a maipanggep kadagiti libro a birbirukem:",
        "booksources-invalid-isbn": "Ti naited nga ISBN ket kasla saan nga umisu; kitaen dagiti biddut ti panagtulad manipud ti kasisigud a taudan.",
+       "magiclink-tracking-rfc": "Pampanid nga agus-usar kadagiti salamangka a silpo ti RFC",
+       "magiclink-tracking-rfc-desc": "Daytoy a panid ket agus-usar kadagiti salamangka a silpo ti RFC. Kitaen ti [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] no kasano iti mangiyakar.",
+       "magiclink-tracking-pmid": "Pampanid nga agus-usar kadagiti salamangka a silpo ti PMID",
+       "magiclink-tracking-pmid-desc": "Daytoy a panid ket agus-usar kadagiti salamangka a silpo ti PMID. Kitaen ti [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] no kasano iti mangiyakar.",
+       "magiclink-tracking-isbn": "Pampanid nga agus-usar kadagiti salamangka a silpo ti ISBN",
+       "magiclink-tracking-isbn-desc": "Daytoy a panid ket agus-usar kadagiti salamangka a silpo ti ISBN. Kitaen ti [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] no kasano iti mangiyakar.",
        "specialloguserlabel": "Nangitungpal:",
        "speciallogtitlelabel": "Puntaan (titulo wenno {{ns:user}}:nagan ti agar-aramat para iti agar-aramat):",
        "log": "Dagiti listaan",
        "activeusers-intro": "Daytoy ti listaan dagiti agar-aramat nga adda inar-aramid iti kaunegan dagiti napalabas a $1 {{PLURAL:$1|nga aldaw|nga al-aldaw}}.",
        "activeusers-count": "$1 a {{PLURAL:$1|tignay|tigtignay}} iti napalabas {{PLURAL:$3|nga aldaw|a $3 nga al-aldaw}}",
        "activeusers-from": "Iparang dagiti agar-aramat a mangrugi iti:",
+       "activeusers-groups": "Iparang dagiti agar-aramat a maitagikua kadagiti grupo:",
+       "activeusers-excludegroups": "Ilaksid dagiti agar-aramat a maitagikua kadagiti grupo:",
        "activeusers-noresult": "Awan ti nasarakan nga agar-aramat.",
        "activeusers-submit": "Ipakita dagiti aktibo nga agar-aramat",
        "listgrouprights": "Dagiti karbengan ti grupo ti agar-aramat",
        "pageinfo-length": "Kaatiddog ti panid (kadagiti byte)",
        "pageinfo-article-id": "ID ti panid",
        "pageinfo-language": "Pagsasao ti naglaon a panid",
+       "pageinfo-language-change": "baliwan",
        "pageinfo-content-model": "Modelo ti linaon ti panid",
        "pageinfo-content-model-change": "baliwan",
        "pageinfo-robot-policy": "Panagpasurot babaen dagiti robot",
        "pageinfo-category-pages": "Bilang dagiti panid",
        "pageinfo-category-subcats": "Bilang dagiti subkategoria",
        "pageinfo-category-files": "Bilang dagiti papeles",
+       "pageinfo-user-id": "ID ti agar-aramat",
        "markaspatrolleddiff": "Markaan a kas napatruliaan",
        "markaspatrolledtext": "Markaan daytoy a panid a kas napatruliaan",
        "markaspatrolledtext-file": "Markaan daytoy a bersion ti papeles a kas napatruliaan",
        "patrol-log-header": "Daytoy ket listaan dagiti napatruliaan a rebision.",
        "log-show-hide-patrol": "$1 listaan ti napatruliaan",
        "log-show-hide-tag": "$1 ti listaan ti etiketa",
+       "confirm-markpatrolled-button": "Sige",
+       "confirm-markpatrolled-top": "Markaan ti rebision $3 iti $2 a kas napatruliaan?",
        "deletedrevision": "Naikkat a daan a rebision ti $1",
        "filedeleteerror-short": "Biddut ti panakaikkat ti papeles: $1",
        "filedeleteerror-long": "Adda nasarakan a biddut idi agikikkat ti papeles:\n\n$1",
        "logentry-managetags-create": "{{GENDER:$2|Nagpartuat}} ni $1 ti etiketa ti \"$4\"",
        "log-name-tag": "Listaan ti etiketa",
        "rightsnone": "(awan)",
-       "revdelete-summary": "Pakabuklan ti inurnos",
        "feedback-adding": "Agnaynayon ti feedback iti panid...",
        "feedback-back": "Agsubli",
        "feedback-bugcheck": "Nasayaaten! Kitaem tapno saan a dagiti adda idin a [$1 nga ammo a parparikut].",
        "feedback-thanks": "Agyaman! Ti feedbackmo ket naipablaak iti panid \"[$2 $1]\".",
        "feedback-thanks-title": "Agyamanak!",
        "feedback-useragent": "Ahente ti agar-aramat:",
-       "searchsuggest-search": "Biruken",
+       "searchsuggest-search": "Agbiruk iti {{SITENAME}}",
        "searchsuggest-containing": "naglaon ti...",
        "api-error-badtoken": "Akin-uneg a biddut: Dakes a tandaan.",
        "api-error-emptypage": "Agparprtuat ti baro, dagiti awan ti linaon a panid ket saan a maipalubos.",
        "pagelang-language": "Pagsasao",
        "pagelang-use-default": "Usaren ti kasisigud a pagsasao",
        "pagelang-select-lang": "Agpili iti pagsasao",
+       "pagelang-reason": "Rason",
        "pagelang-submit": "Ited",
        "right-pagelang": "Baliwan ti pagsasao ti panid",
        "action-pagelang": "baliwan ti pagsasao ti panid",
        "mw-widgets-dateinput-no-date": "Awan ti napili a petsa",
        "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
        "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
+       "mw-widgets-mediasearch-input-placeholder": "Agbiruk para iti midia",
+       "mw-widgets-mediasearch-noresults": "Awan dagiti nabirukan a resulta.",
        "mw-widgets-titleinput-description-new-page": "awan pay ti panid",
        "mw-widgets-titleinput-description-redirect": "ibaw-ing iti $1",
+       "mw-widgets-categoryselector-add-category-placeholder": "Agnayon iti kategoria...",
+       "mw-widgets-usersmultiselect-placeholder": "Agnayon pay iti adu...",
        "sessionmanager-tie": "Saan a mabalin nga itipon dagiti nadumaduma kita ti kiddaw ti pammasingked: $1.",
        "sessionprovider-generic": "Dagiti sesion ti $1",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "dagiti sesion a naibatay iti galieta",
        "log-action-filter-block-block": "Serra",
        "log-action-filter-block-reblock": "Panagbaliw ti serra",
        "log-action-filter-block-unblock": "Ikkaten ti serra",
-       "log-action-filter-contentmodel-change": "Panagbaliw ti Contentmodel",
-       "log-action-filter-contentmodel-new": "Panagpartuat ti panid iti saan a pagalagadan a Contentmodel",
+       "log-action-filter-contentmodel-change": "Panagbaliw ti modelo ti linaon",
+       "log-action-filter-contentmodel-new": "Panagpartuat ti panid iti saan a kasisigud a modelo ti linaon",
        "log-action-filter-delete-delete": "Panagikkat ti panid",
        "log-action-filter-delete-restore": "Panangisubli ti panagikkat ti panid",
        "log-action-filter-delete-event": "Panagikkat ti listaan",
        "authmanager-authn-autocreate-failed": "Napaay ti automatiko a panagpartuat iti lokal a pakabilangan: $1",
        "authmanager-change-not-supported": "Dagiti naited a kredensial ket saan a mabaliwan, gapu ta awan ti mangusar kaniada.",
        "authmanager-create-disabled": "Nabaldado ti panagpartuat ti pakabilangan.",
-       "authmanager-create-from-login": "Tapno mapartuat ti pakabilangam, pangngaasi a punnuen dagiti pagikabilan dita baba.",
+       "authmanager-create-from-login": "Tapno mapartuat ti pakabilangam, pangngaasi a punnuen dagiti pagikabilan.",
        "authmanager-create-not-in-progress": "Saan nga agprogprogreso ti panagpartuat ti pakabilangan wenno napukaw ti datos ti sesion. Pangngaasi a mangrugi manen iti pagrugian.",
        "authmanager-create-no-primary": "Dagiti naited a kredensial ket saan a mabalin a mausar para iti panagpartuat ti pakabilangan.",
        "authmanager-link-no-primary": "Dagiti naited a kredensial ket saan a mabalin a mausar para iti panangisilpo ti pakabilangan.",
        "unlinkaccounts-success": "Ti pakabilangan ket naikkat iti pannakaisilpo.",
        "authenticationdatachange-ignored": "Saan a natengngel ti panagbaliw ti datos ti pammasingked. Mabalin nga awan ti nakompigura a mangited?",
        "userjsispublic": "Pangngaasi a laglagipen: Dagiti subpanid ti JavaScript ket nasken a saan nga aglaon iti datos a nailemed gapu ta makita dagitoy babaen dagiti sabali nga agar-aramat.",
-       "usercssispublic": "Pangngaasi a laglagipen: Dagiti subpanid ti CSS ket nasken a saan nga aglaon iti datos a nailemed gapu ta makita dagitoy babaen dagiti sabali nga agar-aramat."
+       "usercssispublic": "Pangngaasi a laglagipen: Dagiti subpanid ti CSS ket nasken a saan nga aglaon iti datos a nailemed gapu ta makita dagitoy babaen dagiti sabali nga agar-aramat.",
+       "restrictionsfield-badip": "Imbalido nga adres ti IP wenno sakup: $1",
+       "restrictionsfield-label": "Dagiti mapalubosan a sakup ti IP:",
+       "revid": "rebision $1",
+       "pageid": "ID ti panid $1"
 }
index b701fcf..96d872f 100644 (file)
        "prefs-help-prefershttps": "Questa preferenza avrà effetto dal prossimo accesso.",
        "prefswarning-warning": "Hai fatto modifiche alle tue preferenze che non sono state ancora salvate.\nSe esci da questa pagina senza cliccare \"$1\" le preferenze non verranno aggiornate.",
        "prefs-tabs-navigation-hint": "Suggerimento: è possibile utilizzare i tasti freccia sinistra e destra per spostarsi tra le schede nell'elenco delle schede.",
-       "userrights": "Gestione dei permessi degli utenti",
+       "userrights": "Diritti utente",
        "userrights-lookup-user": "Seleziona un utente",
        "userrights-user-editname": "Inserire il nome utente:",
        "editusergroup": "Modifica gruppi utente",
index a0abf1f..3f7fd96 100644 (file)
        "feedback-thanks": "გმადლობთ! თქვენი შეფასება განთავსებულია „[$2 $1]“ გვერდზე.",
        "feedback-thanks-title": "გმადლობთ!",
        "feedback-useragent": "მომხმარებლის აგენტი:",
-       "searchsuggest-search": "ძიება პროექტში {{grammar:prepositional|{{SITENAME}}}}",
+       "searchsuggest-search": "ძიება {{grammar:prepositional|{{SITENAME}}}}ში",
        "searchsuggest-containing": "შეიცავს...",
        "api-error-badtoken": "შიდა შეცდომა: ცუდი ტოკენი.",
        "api-error-emptypage": "ახალი, ცარიელი გვერდების შექმნა აკრძალულია.",
index b6a9ad9..7404eea 100644 (file)
        "size-bytes": "$1 {{PLURAL:$1|바이트}}",
        "size-pixel": "$1 {{PLURAL:$1|픽셀}}",
        "lag-warn-normal": "최근 $1{{PLURAL:$1|초}} 안에 바뀐 문서는 이 목록에서 빠졌을 수 있습니다.",
-       "lag-warn-high": "데이터베이스 서버의 과도한 부하 때문에 최근 $1{{PLURAL:$1|초|초}} 안에 바뀐 문서 목록은 보이지 않을 수 있습니다.",
+       "lag-warn-high": "데이터베이스 서버의 과도한 지연 때문에 $1{{PLURAL:$1|초|초}} 전 이후의 변경 내용은 이 목록에 보이지 않을 수 있습니다.",
        "watchlistedit-normal-title": "주시문서 목록 편집하기",
        "watchlistedit-normal-legend": "주시문서 목록에서 문서 제거하기",
        "watchlistedit-normal-explain": "주시문서 목록에 있는 문서의 제목이 아래에 나와 있습니다.\n주시문서 목록에서 제거하려는 문서가 있으면 각 항목의 확인 상자를 선택한 다음 \"{{int:Watchlistedit-normal-submit}}\"를 클릭해주세요.\n또는 [[Special:EditWatchlist/raw|목록을 직접 편집]]할 수도 있습니다.",
index 08789aa..d572833 100644 (file)
        "rcfilters-search-placeholder": "Rezent Ännerunge filteren (duerchsichen oder ufänke mat tippen)",
        "rcfilters-invalid-filter": "Net valabele Filter",
        "rcfilters-filterlist-title": "Filteren",
+       "rcfilters-highlightbutton-title": "Resultater ervirhiewen",
        "rcfilters-highlightmenu-title": "Eng Faarf eraussichen",
        "rcfilters-filterlist-noresults": "Keng Filtere fonnt",
+       "rcfilters-filter-unregistered-description": "Auteuren déi net ageloggt sinn.",
        "rcfilters-filter-editsbyself-label": "Är eegen Ännerungen",
        "rcfilters-filter-editsbyself-description": "Ännerunge vun Iech.",
        "rcfilters-filter-editsbyother-label": "Ännerunge vun Aneren",
index 858a91d..ede7e04 100644 (file)
        "category-media-header": "Tī lūi-pia̍t \"$1\" ê mûi-thé",
        "category-empty": "''Chit-má chit ê lūi-pia̍t  bô ia̍h ia̍h-sī mûi-thé.''",
        "hidden-categories": "{{PLURAL:$1|Hidden category|Chhàng khí-lâi ê lūi-pia̍t}}",
-       "hidden-category-category": "Chhàng--khí-lâi ê lūi-piat",
+       "hidden-category-category": "Chhàng-bih lūi-pia̍t",
        "category-subcat-count": "{{PLURAL:$2|Chit ê lūi-piat chí-ū ē-bīn ê ē-lūi-pia̍t.|Chit ê lūi-piat ū ē-bīn {{PLURAL:$1| ê ē-lūi-piat|$1 ê ē-lūi-piat}}, choân-pō͘ $2 ê.}}",
        "category-subcat-count-limited": "Chit ê lūi-piat ū ē-bīn ê {{PLURAL:$1| ē-lūi-pia̍t|$1 ē-lūi-pia̍t}}.",
        "category-article-count": "{{PLURAL:$2|Chit ê lūi-piat chí-ū ē-bīn ê ia̍h.|Ē-bīn {{PLURAL:$1|bīn ia̍h sī|$1bīn ia̍h sī}} tī chit lūi-pia̍t, choân-pō͘ $2 bīn ia̍h}}",
        "talk": "Thó-lūn",
        "views": "Khoàⁿ",
        "toolbox": "Ke-si",
+       "tool-link-userrights": "Piàn-keng {{GENDER:$1|ēng-chiá}} hun-cho͘",
        "userpage": "Khoàⁿ iōng-chiá ê Ia̍h",
        "projectpage": "Khoàⁿ sū-kang ia̍h",
        "imagepage": "Khoàⁿ tóng-àn ia̍h",
        "pager-newer-n": "khah sin ê $1 hāng",
        "pager-older-n": "khah kū ê $1 hāng",
        "booksources": "Tô͘-su chu-liāu",
+       "magiclink-tracking-rfc": "Sú-iōng RFC mô͘-hoat liân-kiat ê ia̍h",
+       "magiclink-tracking-pmid": "Sú-iōng PMID mô͘-hoat liân-kiat ê ia̍h",
+       "magiclink-tracking-isbn": "Sú-iōng ISBN mô͘-hoat liân-kiat ê ia̍h",
        "specialloguserlabel": "做的人:",
        "speciallogtitlelabel": "目地(標題抑是用者)",
        "log": "記錄",
index a688c42..2a96c1e 100644 (file)
        "prefs-help-prefershttps": "Deze voorkeur wordt toegepast bij de volgende keer aanmelden.",
        "prefswarning-warning": "U heeft deze wijzigingen gemaakt in uw voorkeuren die nog niet opgeslagen zijn. Wanneer u de pagina verlaat zonder op \"$1\" te klikken worden uw voorkeuren niet bijgewerkt.",
        "prefs-tabs-navigation-hint": "Tip: u kunt de pijltjestoetsen naar links en naar rechts gebruiken om te navigeren tussen de tabbladen in de lijst.",
-       "userrights": "Gebruikersrechtenbeheer",
+       "userrights": "Gebruikersrechten",
        "userrights-lookup-user": "Een gebruiker selecteren",
        "userrights-user-editname": "Voer een gebruikersnaam in:",
        "editusergroup": "Gebruikersgroepen wijzigen",
        "rcfilters-filter-registered-description": "Ingelogde gebruikers.",
        "rcfilters-filter-unregistered-label": "Niet-geregistreerd",
        "rcfilters-filter-unregistered-description": "Gebruikers die niet zijn ingelogd.",
+       "rcfilters-filter-unregistered-conflicts-user-experience-level": "Het \"Niet geregistreerd\" filter is niet actief, omdat het effect ongedaan wordt gemaakt door de volgende {{PLURAL:$2|filter|filters}} die alleen geregistreerde gebruikers {{PLURAL:$2|vindt|vinden}}: $1",
        "rcfilters-filtergroup-authorship": "Bewerken auteurschap",
        "rcfilters-filter-editsbyself-label": "Uw eigen bewerkingen",
        "rcfilters-filter-editsbyself-description": "Bewerkingen door u.",
        "rcfilters-filter-bots-description": "De wijzigingen van geautomatiseerde hulpmiddelen.",
        "rcfilters-filter-humans-label": "Menselijk (geen bot)",
        "rcfilters-filter-humans-description": "Bewerkingen door menselijke bewerkers.",
+       "rcfilters-filter-patrolled-label": "Gecontroleerd",
+       "rcfilters-filter-patrolled-description": "Bewerkingen gemarkeerd als gecontroleerd.",
+       "rcfilters-filter-unpatrolled-label": "Niet gecontroleerd",
+       "rcfilters-filter-unpatrolled-description": "Bewerkingen die niet zijn gemarkeerd als gecontroleerd.",
        "rcfilters-filtergroup-significance": "Belangrijkheid",
        "rcfilters-filter-minor-label": "Kleine bewerkingen",
        "rcfilters-filter-minor-description": "Bewerkingen die door de bewerker zijn gelabeld als klein.",
index 91e926a..9554d79 100644 (file)
        "prefs-help-prefershttps": "Ta opcja zacznie działać przy twoim następnym zalogowaniu.",
        "prefswarning-warning": "Niektóre z dokonanych zmian w preferencjach nie zostały jeszcze zapisane. Jeśli wyjdziesz bez wciśnięcia „$1”, Twoje zmiany zostaną utracone.",
        "prefs-tabs-navigation-hint": "Wskazówka: do poruszania się między zakładkami możesz użyć klawiszy strzałek w lewo i w prawo",
-       "userrights": "Zarządzanie uprawnieniami użytkowników",
+       "userrights": "Uprawnienia użytkowników",
        "userrights-lookup-user": "Wybierz użytkownika",
        "userrights-user-editname": "Wprowadź nazwę użytkownika:",
        "editusergroup": "Wczytaj grupy użytkownika",
index 685746e..4279d24 100644 (file)
        "feedback-thanks": "Mulțumim! Comentariile dumneavoastră au fost publicate pe pagina „[ $2  $1 ]”.",
        "feedback-thanks-title": "Mulțumim!",
        "feedback-useragent": "Agent utilizator:",
-       "searchsuggest-search": "Căutare",
+       "searchsuggest-search": "Căutare în {{SITENAME}}",
        "searchsuggest-containing": "conținând...",
        "api-error-badtoken": "Eroare internă: jeton greșit.",
        "api-error-emptypage": "Crearea paginilor noi, goale nu este permisă.",
index c0f76cb..36efee9 100644 (file)
        "prefs-help-prefershttps": "Эта настройка будет применена после следующего представления системе.",
        "prefswarning-warning": "Вы внесли в свои настройки изменения, которые ещё не были сохранены.\nЕсли вы покинете эту страницу, не нажав «$1», настройки не будут обновлены.",
        "prefs-tabs-navigation-hint": "Совет: Вы можете использовать клавиши стрелок влево и вправо для перехода между вкладками в списке вкладок.",
-       "userrights": "УпÑ\80авление Ð¿Ñ\80авами Ñ\83Ñ\87аÑ\81Ñ\82ника",
+       "userrights": "Ð\9fÑ\80ава Ð¿Ð¾Ð»Ñ\8cзоваÑ\82елÑ\8f",
        "userrights-lookup-user": "Выбор участника",
        "userrights-user-editname": "Введите имя учётной записи:",
        "editusergroup": "Загрузить группы участников",
        "rcfilters-filter-bots-description": "Правки, сделанные с помощью автоматизированных инструментов.",
        "rcfilters-filter-humans-label": "Человек (не бот)",
        "rcfilters-filter-humans-description": "Правки, внесённые редакторами.",
+       "rcfilters-filter-patrolled-label": "Отпатрулировано",
+       "rcfilters-filter-patrolled-description": "Правки, помеченные как отпатрулированные.",
        "rcfilters-filtergroup-significance": "Значение",
        "rcfilters-filter-minor-label": "Малые правки",
        "rcfilters-filter-minor-description": "Правки, которые автор пометил как малые.",
index 0b2b10c..404083e 100644 (file)
@@ -12,7 +12,8 @@
                        "Trondtr",
                        "לערי ריינהארט",
                        "아라",
-                       "Macofe"
+                       "Macofe",
+                       "Pyscowicz"
                ]
        },
        "tog-underline": "Liŋkkaid vuolláisárgun",
        "oct": "golg",
        "nov": "skáb",
        "dec": "juov",
+       "january-date": "ođđajagimánnu $1",
+       "february-date": "guovvamánnu $1",
+       "march-date": "njukčamánnu $1",
+       "april-date": "cuoŋománnu $1",
+       "may-date": "miessemánnu $1",
+       "june-date": "geassemánnu $1",
+       "july-date": "suoidnemánnu $1",
+       "august-date": "borgemánnu $1",
+       "september-date": "čakčamánnu $1",
+       "october-date": "golggotmánnu $1",
+       "november-date": "skábmamánnu $1",
+       "december-date": "juovlamánnu $1",
        "pagecategories": "{{PLURAL:$1|Luohkká|Luohkát}}",
        "category_header": "Siiddut, mat gullet luohkkái $1",
        "subcategories": "Vuolleluohkát",
        "searcharticle": "Mana",
        "history": "Siiddu historjá",
        "history_short": "Historjá",
+       "history_small": "historjá",
        "updatedmarker": "beaiváduvvon du ovddit fitnama maŋŋá",
        "printableversion": "Prentenveršuvdna",
        "permalink": "Bissovaš liŋka",
        "yourdomainname": "Fierbmenamma",
        "login": "Čálligoađe sisa",
        "nav-login-createaccount": "Daga ođđa geavaheaddjidovddaldaga dahje čálligoađe sisa",
-       "userlogin": "Logge sisa dahje ráhkat dovddaldaga",
        "logout": "Čálligoađe olggos",
        "userlogout": "Logge olggos",
        "notloggedin": "It leat čálligoahttan sisa",
-       "nologin": "Jus dus ii vel leat geavaheaddjidovddaldat, sáhtát '''$1''' dakkára.",
-       "nologinlink": "ráhkadit",
        "createaccount": "Ráhkat dovddaldaga",
-       "gotaccount": "Jus dus lea jo geavaheaddjidovddaldat, sáhtát '''$1'''.",
-       "gotaccountlink": "Logge sisa",
        "createaccountmail": "e-poasttain",
        "badretype": "Suollemassánit maid čállet eai leat seammalaganat.",
        "userexists": "Geavaheaddjidovddaldat, man evttohit, lea jo anus. Leage buorre ja vállje nubbi geavaheaddjidovddaldaga.",
        "prefs-misc": "Eará",
        "saveprefs": "Vurke ásahusaid",
        "prefs-editing": "Rievdadeapmi",
-       "rows": "Gurgadasa:",
-       "columns": "Kolumnat",
        "searchresultshead": "Ohcan",
        "recentchangescount": "Siiddui mearri varas rievdadusain",
        "savedprefs": "Du ásahusid vurken lihkosmuvai.",
index b5b80bc..9c198a6 100644 (file)
        "userinvalidcssjstitle": "'''Upozorenje:''' Nema skina pod imenom \"$1\".\nUpamtite da korisničke .css i .js stranice koriste naslov s malim slovom, npr. {{ns:user}}:Foo/monobook.css umjesto {{ns:user}}:Foo/Monobook.css.",
        "updated": "(Osvježeno)",
        "note": "'''Napomena:'''",
-       "previewnote": "'''Ne zaboravite da je ovo samo pregled'''\nIzmjene stranice nisu još sačuvane!",
+       "previewnote": "<strong>Ne zaboravite da je ovo samo pregled</strong>\nIzmjene stranice nisu još sačuvane!",
        "continue-editing": "Idi na područje uređivanja",
        "previewconflict": "Ovaj pretpregled reflektuje tekst u gornjem polju\nkako će izgledati ako pritisnete \"Snimi stranicu\".",
        "session_fail_preview": "'''Izvinjavamo se! Nismo mogli obraditi vašu izmjenu zbog gubitka podataka o prijavi. Molimo pokušajte ponovno. Ako i dalje ne bude radilo, pokušajte se [[Special:UserLogout|odjaviti]] i ponovno prijaviti.'''",
index 006d23e..45d4c54 100644 (file)
        "userlogin-loggedin": "Ste už {{GENDER:$1|prihlasený|prihlásená}} ako $1.\nPomocou formulára nižšie sa môžete prihlásiť ako iný používateľ.",
        "userlogin-reauth": "Aby ste preukázali, že ste $1, musíte sa znovu prihlásiť.",
        "userlogin-createanother": "Vytvoriť ďalší účet",
-       "createacct-emailrequired": "Emailová adresa",
-       "createacct-emailoptional": "Emailová adresa (nepovinné)",
-       "createacct-email-ph": "Zadajte svoju emailovú adresu",
-       "createacct-another-email-ph": "Zadajte svoju emailovú adresu",
-       "createaccountmail": "Použiť dočasné náhodné heslo a poslať ho na uvedenú emailovú adresu",
+       "createacct-emailrequired": "E-mailová adresa",
+       "createacct-emailoptional": "E-mailová adresa (nepovinné)",
+       "createacct-email-ph": "Zadajte svoju e-mailovú adresu",
+       "createacct-another-email-ph": "Zadajte svoju e-mailovú adresu",
+       "createaccountmail": "Použiť dočasné náhodné heslo a poslať ho na uvedenú e-mailovú adresu",
        "createaccountmail-help": "Môže byť použité na vytvorenie účtu pre inú osobu bez prezradenia hesla.",
        "createacct-realname": "Skutočné meno (nepovinné)",
        "createacct-reason": "Dôvod",
        "noemailcreate": "Musíte uviesť platnú e-mailovú adresu",
        "passwordsent": "Nové heslo bolo zaslané na e-mailovú adresu\npoužívateľa „$1“.\nProsím, prihláste sa znovu, keď ho dostanete.",
        "blocked-mailpassword": "Boli zablokované úpravy z vašej IP adresy, a tak nie je dovolené použiť funkciu znovuvyžiadania hesla, aby sa zabránilo zneužitiu.",
-       "eauthentsent": "Email s potvrdením bol zaslaný na uvedenú emailovú adresu.\nPredtým ako sa na účet pošle akákoľvek ďalšia pošta, musíte splniť inštrukcie v emaili, aby ste potvrdili, že účet je skutočne váš.",
-       "throttled-mailpassword": "E-mail na obnovenie hesla už bol odoslaný v priebehu {{PLURAL:$1|poslednej $1 hodiny|posledných $1 hodín}}.\nAby sa zabránilo zneužitiu, obnovenie hesla emailom je možné vykonať iba raz za {{PLURAL:$1|$1 hodinu|$1 hodiny|$1 hodín}}.",
+       "eauthentsent": "E-mail s potvrdením bol zaslaný na uvedenú adresu.\nPredtým ako sa na účet pošle akákoľvek ďalšia pošta, musíte splniť inštrukcie v e-maili, aby ste potvrdili, že účet je skutočne váš.",
+       "throttled-mailpassword": "E-mail na obnovenie hesla už bol odoslaný v priebehu {{PLURAL:$1|poslednej $1 hodiny|posledných $1 hodín}}.\nAby sa zabránilo zneužitiu, obnovenie hesla e-mailom je možné vykonať iba raz za {{PLURAL:$1|$1 hodinu|$1 hodiny|$1 hodín}}.",
        "mailerror": "Chyba pri posielaní e-mailu: $1",
        "acct_creation_throttle_hit": "Návštevníci tejto wiki z vašej IP adresy už za posledný deň vytvorili {{PLURAL:$1|$1 účet|$1 účty|$1 účtov}}, čo je maximálny počet povolený za toto časové obdobie.\nZ tohto dôvodu nemôžu návštevníci z tejto IP adresy momentálne vytvoriť ďalšie účty.",
-       "emailauthenticated": "Vaša emailová adresa bola overená $2 $3.",
-       "emailnotauthenticated": "Vaša e-mailová adresa ešte nebola overená.\nPreto nemôžete prijať emaily pre žiadnu z nasledovných funkcií.",
-       "noemailprefs": "Tieto nástroje budú prístupné po vyplnení emailovej adresy vo vašich nastaveniach.",
+       "emailauthenticated": "Vaša e-mailová adresa bola overená $2 o $3.",
+       "emailnotauthenticated": "Vaša e-mailová adresa ešte nebola overená.\nPreto nemôžete prijať e-maily pre žiadnu z nasledovných funkcií.",
+       "noemailprefs": "Tieto nástroje budú prístupné po vyplnení e-mailovej adresy vo vašich nastaveniach.",
        "emailconfirmlink": "Potvrďte svoju e-mailovú adresu",
-       "invalidemailaddress": "Emailovú adresu nemožno akceptovať, pretože sa zdá, že má neplatný formát. Zadajte adresu v správnom tvare alebo nechajte príslušné políčko prázdne.",
+       "invalidemailaddress": "E-mailovú adresu nemožno akceptovať, pretože sa zdá, že má neplatný formát. Zadajte adresu v správnom tvare alebo nechajte príslušné políčko prázdne.",
        "cannotchangeemail": "Na tejto wiki nie je možné meniť e-mailové adresy používateľského účtu.",
-       "emaildisabled": "Táto lokalita nedokáže posielať emaily.",
+       "emaildisabled": "Táto lokalita nedokáže posielať e-maily.",
        "accountcreated": "Účet vytvorený",
        "accountcreatedtext": "Používateľský účet [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|diskusia]]) bol vytvorený.",
        "createaccount-title": "Vytvorenie účtu na {{GRAMMAR:lokál|{{SITENAME}}}}",
-       "createaccount-text": "Niekto vytvoril účet pre vašu emailovú adresu na {{GRAMMAR:lokál|{{SITENAME}}}}\n($4) s názvom „$2“, s heslom „$3“. Mali by ste sa prihlásiť a svoje heslo teraz zmeniť.\n\nAk bol účet vytvorený omylom, túto správu môžete ignorovať.",
+       "createaccount-text": "Niekto vytvoril účet s vašou e-mailovou adresou na {{GRAMMAR:lokál|{{SITENAME}}}}\n($4) s názvom „$2“, s heslom „$3“. Mali by ste sa prihlásiť a svoje heslo teraz zmeniť.\n\nAk bol účet vytvorený omylom, túto správu môžete ignorovať.",
        "login-throttled": "Uskutočnili ste príliš mnoho neúspešných pokusov o prihlásenie.\nProsím, počkajte $1 predtým, než to skúsite znova.",
        "login-abort-generic": "Vaše prihlásenie bolo neúspešné – zrušené",
        "login-migrated-generic": "Váš účet bol presťahovaný a vaše používateľské meno už viac na tejto wiki neexistuje.",
        "pt-userlogout": "Odhlásiť sa",
        "php-mail-error-unknown": "Neznáma chyba vo funkcii PHP mail()",
        "user-mail-no-addy": "Pokus o odoslanie e-mailu bez e-mailovej adresy.",
-       "user-mail-no-body": "Sa pokúsil poslať email s prázdnym alebo neprimerane krátkym telom správy.",
+       "user-mail-no-body": "Pokus o odoslanie prázdneho alebo neprimerane krátkeho e-mailu.",
        "changepassword": "Zmeniť heslo",
        "resetpass_announce": "Pre dokončenie prihlásenia je potrebné nastaviť nové heslo.",
        "resetpass_text": "<!-- Sem pridajte text -->",
        "resetpass-validity-soft": "Vaše heslo je neplatné: $1\n\nVyberte si nové heslo, alebo kliknite na „{{int:authprovider-resetpass-skip-label}}“ a nastavte si ho neskôr.",
        "passwordreset": "Reset hesla",
        "passwordreset-text-one": "Pre získanie nového hesla vyplňte tento formulár.",
-       "passwordreset-text-many": "{{PLURAL:$1|Pre získanie nového hesla emailom, zadajte jeden z údajov.}}",
+       "passwordreset-text-many": "{{PLURAL:$1|Pre získanie nového hesla e-mailom, zadajte jeden z údajov.}}",
        "passwordreset-disabled": "Obnovenie hesla bolo na tejto wiki zakázané.",
        "passwordreset-emaildisabled": "E-mailové funkcie boli na tejto wiki vypnuté.",
        "passwordreset-username": "Používateľské meno:",
        "passwordreset-domain": "Doména:",
-       "passwordreset-email": "Emailová adresa:",
+       "passwordreset-email": "E-mailová adresa:",
        "passwordreset-emailtitle": "Podrobnosti o účte na {{GRAMMAR:lokál|{{SITENAME}}}}",
-       "passwordreset-emailtext-ip": "Niekto (pravdepodobne vy z IP adresy $1) požiadal o obnovenie vášho hesla na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}\ns touto emailovou adresou:\n\n$2\n\n{{PLURAL:$3|Platnosť tohto dočasného hesla vyprší|Platnosť týchto dočasných hesiel vyprší}} o {{PLURAL:$5|jeden deň|$5 dni|$5 dní}}.\nMali by ste sa prihlásiť teraz a zvoliť nové heslo. Ak túto žiadosť podal niekto iný alebo\nak ste si spomenuli svoje pôvodné heslo a už ho chcete zmeniť, môžete túto správu\nignorovať a ďalej používať vaše staré heslo.",
-       "passwordreset-emailtext-user": "Používateľ $1 na {{GRAMMAR:genitív|{{SITENAME}}}} požiadal o obnovenie vášho hesla na na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}\ns touto emailovou adresou:\n\n$2\n\n{{PLURAL:$3|Platnosť tohto dočasného hesla vyprší|Platnosť týchto dočasných hesiel vyprší}} o {{PLURAL:$5|jeden deň|$5 dni|$5 dní}}.\nMali by ste sa prihlásiť teraz a zvoliť nové heslo. Ak túto žiadosť podal niekto iný alebo\nak ste si spomenuli svoje pôvodné heslo a už ho chcete zmeniť, môžete túto správu\nignorovať a ďalej používať vaše staré heslo.",
+       "passwordreset-emailtext-ip": "Niekto (pravdepodobne vy z IP adresy $1) požiadal o obnovenie vášho hesla na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}\ns touto e-mailovou adresou:\n\n$2\n\n{{PLURAL:$3|Platnosť tohto dočasného hesla vyprší|Platnosť týchto dočasných hesiel vyprší}} o {{PLURAL:$5|jeden deň|$5 dni|$5 dní}}.\nMali by ste sa prihlásiť teraz a zvoliť nové heslo. Ak túto žiadosť podal niekto iný alebo\nak ste si spomenuli svoje pôvodné heslo a už ho chcete zmeniť, môžete túto správu\nignorovať a ďalej používať vaše staré heslo.",
+       "passwordreset-emailtext-user": "Používateľ $1 na {{GRAMMAR:genitív|{{SITENAME}}}} požiadal o obnovenie vášho hesla na na {{GRAMMAR:genitív|{{SITENAME}}}} ($4). {{PLURAL:$3|Nasledujúci používateľský účet je spojený|Nasledujúce používateľské účty sú spojené}}\ns touto e-mailovou adresou:\n\n$2\n\n{{PLURAL:$3|Platnosť tohto dočasného hesla vyprší|Platnosť týchto dočasných hesiel vyprší}} o {{PLURAL:$5|jeden deň|$5 dni|$5 dní}}.\nMali by ste sa prihlásiť teraz a zvoliť nové heslo. Ak túto žiadosť podal niekto iný alebo\nak ste si spomenuli svoje pôvodné heslo a už ho chcete zmeniť, môžete túto správu\nignorovať a ďalej používať vaše staré heslo.",
        "passwordreset-emailelement": "Používateľské meno: \n$1\n\nDočasné heslo:\n$2",
        "passwordreset-emailsentemail": "Pokiaľ je toto e-mailová adresa zaregistrovaná k vášmu účtu, bude na ňu zaslaný e-mail pre získanie nového hesla.",
        "passwordreset-emailsentusername": "Pokiaľ je príslušná mailová adresa zaregistrovaná, bude na ňu zaslaný e-mail s novým heslom.",
        "passwordreset-invalidemail": "Neplatná e-mailová adresa",
        "passwordreset-nodata": "Nebolo zadané používateľské meno ani e-mailová adresa",
        "changeemail": "Zmeniť alebo odstrániť e-mailovú adresu",
-       "changeemail-header": "Vyplňte tento formulár, ak chcete zmeniť svoju emailovú adresu. Ak chcete odstrániť priradenie akejkoľvek emailovej adresy k vášmu účtu, nechajte pri odosielaní formulára emailovú adresu nevyplnenú",
+       "changeemail-header": "Vyplňte tento formulár, ak chcete zmeniť svoju e-mailovú adresu. Ak chcete odstrániť priradenie akejkoľvek e-mailovej adresy k vášmu účtu, nechajte pri odosielaní formulára e-mailovú adresu nevyplnenú",
        "changeemail-no-info": "Na prístup k tejto stránke musíte byť prihlásený.",
        "changeemail-oldemail": "Súčasná e-mailová adresa:",
        "changeemail-newemail": "Nová e-mailová adresa:",
        "previewerrortext": "Pri pokuse o zobrazenie náhľadu došlo k chybe.",
        "blockedtitle": "Používateľ je zablokovaný",
        "blockedtext": "'''Vaše používateľské meno alebo IP adresa bola zablokovaná.'''\n\nZablokoval vás správca $1. Udáva tento dôvod:<br />''$2''\n\n* Blokovanie začalo: $8\n* Blokovanie vyprší: $6\n* Kto mal byť zablokovaný: $7\n\nMôžete kontaktovať $1 alebo s jedného z ďalších [[{{MediaWiki:Grouppage-sysop}}|správcov]] a prediskutovať blokovanie.\nUvedomte si, že nemôžete použiť funkciu „{{int:Emailuser}}“, pokiaľ nemáte registrovanú platnú e-mailovú adresu vo svojich [[Special:Preferences|nastaveniach]].\nVaša IP adresa je $3 a ID blokovania je #$5.\nProsím, uveďte oba tieto údaje do každej správy, ktorú posielate.",
-       "autoblockedtext": "Vaša IP adresa bola automaticky zablokovaná, pretože ju používa iný používateľ, ktorého zablokoval $1.\nUdaný dôvod zablokovania:\n\n:''$2''\n\n* Blokovanie začalo: $8\n* Blokovanie vyprší: $6\n* Blokovanie sa týka: $7\n\nAk potrebujete informácie o blokovaní, môžete kontaktovať $1 alebo niektorého iného\n[[{{MediaWiki:Grouppage-sysop}}|správcu]].\n\nPozn.: Nemôžete použiť funkciu „{{int:emailuser}}“, ak ste si vo svojich\n[[Special:Preferences|používateľských nastaveniach]] nezaregistrovali platnú emailovú adresu.\n\nVaša aktuálna IP adresa je $3. ID vášho blokovania je $5.\nProsím, uveďte tieto podrobnosti v akýchkoľvek otázkach, ktoré sa opýtate.",
+       "autoblockedtext": "Vaša IP adresa bola automaticky zablokovaná, pretože ju používa iný používateľ, ktorého zablokoval $1.\nUdaný dôvod zablokovania:\n\n:''$2''\n\n* Blokovanie začalo: $8\n* Blokovanie vyprší: $6\n* Blokovanie sa týka: $7\n\nAk potrebujete informácie o blokovaní, môžete kontaktovať $1 alebo niektorého iného\n[[{{MediaWiki:Grouppage-sysop}}|správcu]].\n\nPozn.: Nemôžete použiť funkciu „{{int:emailuser}}“, ak ste si vo svojich\n[[Special:Preferences|používateľských nastaveniach]] nezaregistrovali platnú e-mailovú adresu.\n\nVaša aktuálna IP adresa je $3. ID vášho blokovania je $5.\nProsím, uveďte tieto podrobnosti v akýchkoľvek otázkach, ktoré sa opýtate.",
        "systemblockedtext": "Vaša IP adresa bola automaticky zablokovaná.\nUdaný dôvod zablokovania:\n\n:<em>$2</em>\n\n* Blokovanie začalo: $8\n* Blokovanie vyprší: $6\n* Blokovanie sa týka: $7\n\nVaša aktuálna IP adresa je $3.\nProsím, uveďte tieto podrobnosti v akýchkoľvek otázkach, ktoré sa opýtate.",
        "blockednoreason": "nebol uvedený dôvod",
        "whitelistedittext": "Aby ste mohli upravovať stránky, musíte sa $1",
-       "confirmedittext": "Pred úpravami stránok musíte potvrdiť vašu emailovú adresu. Prosím, nastavte a overte svoju emailovú adresu v [[Special:Preferences|používateľských nastaveniach]].",
+       "confirmedittext": "Pred úpravami stránok musíte potvrdiť vašu e-mailovú adresu. Prosím, nastavte a overte svoju e-mailovú adresu v [[Special:Preferences|používateľských nastaveniach]].",
        "nosuchsectiontitle": "Sekcia nebola nájdená",
        "nosuchsectiontext": "Pokúšali ste sa upravovať sekciu, ktorá neexistuje.\nMožno bola presunutá alebo zmazaná odkedy ste si stránku zobrazili.",
        "loginreqtitle": "Je potrebné prihlásiť sa",
        "prefs-misc": "Rôzne",
        "prefs-resetpass": "Zmeniť heslo",
        "prefs-changeemail": "Zmeniť alebo odstrániť e-mailovú adresu",
-       "prefs-setemail": "Nastaviť emailovú adresu",
+       "prefs-setemail": "Nastaviť e-mailovú adresu",
        "prefs-email": "Možnosti e-mailu",
        "prefs-rendering": "Vzhľad",
        "saveprefs": "Uložiť nastavenia",
        "right-viewsuppressed": "Zobrazovať revízie skryté pred všetkými používateľmi",
        "right-suppressionlog": "Zobrazovať súkromné záznamy",
        "right-block": "Blokovať ostatných používateľov",
-       "right-blockemail": "Zablokovať používateľovi posielanie emailu",
+       "right-blockemail": "Zablokovať používateľovi posielanie e-mailu",
        "right-hideuser": "Zablokovať používateľské meno tak, že bude verejnosti skryté",
        "right-ipblock-exempt": "Obchádzať blokovanie IP adries, rozsahov a automatické blokovanie",
        "right-unblockself": "Odblokovať seba samého",
        "grant-group-page-interaction": "Interagovať so stránkami",
        "grant-group-file-interaction": "Interagovať s multimédiami",
        "grant-group-watchlist-interaction": "Interagovať s vašim zoznamom sledovaných stránok",
-       "grant-group-email": "Poslať email",
+       "grant-group-email": "Poslať e-mail",
        "grant-group-high-volume": "Vykonávať činnosti vo veľkom objeme",
        "grant-group-customization": "Nastavenie a prispôsobenie",
        "grant-group-administration": "Vykonávať činnosti správcu",
        "grant-privateinfo": "Pristupovať k súkromným informáciám",
        "grant-protect": "Zapínať a vypínať ochranu stránok",
        "grant-rollback": "Vracať zmeny stránok",
-       "grant-sendemail": "Posielať emaily ostatným používateľom",
+       "grant-sendemail": "Posielať e-maily ostatným používateľom",
        "grant-uploadeditmovefile": "Nahrávať, nahradzovať a presúvať súbory",
        "grant-uploadfile": "Nahrávať nové súbory",
        "grant-basic": "Základné oprávnenia",
        "emailuser-title-target": "E-mail {{GENDER:$1|tomuto používateľovi|tejto používateľke}}",
        "emailuser-title-notarget": "E-mail používateľovi",
        "emailpagetext": "Pomocou nasledovného formulára môžete {{GENDER:$1|tomuto používateľovi|tejto používateľke}} poslať e-mailovú správu.\nMailová adresa, ktorú ste zadali vo svojich [[Special:Preferences|nastaveniach]] sa zobrazí ako adresa odosielateľa mailu, aby vám mohol príjemca priamo odpovedať.",
-       "defemailsubject": "email {{GRAMMAR:genitív|{{SITENAME}}}} od používateľa „$1“",
-       "usermaildisabled": "Používateľ má vypnuté používanie emailu",
-       "usermaildisabledtext": "Nemôžete posielať emaily ostatným používateľom na tejto wiki",
+       "defemailsubject": "e-mail {{GRAMMAR:genitív|{{SITENAME}}}} od používateľa „$1“",
+       "usermaildisabled": "Používateľ má vypnuté používanie e-mailu",
+       "usermaildisabledtext": "Nemôžete posielať e-maily ostatným používateľom na tejto wiki",
        "noemailtitle": "Chýba e-mailová adresa",
        "noemailtext": "Tento používateľ neuviedol svoju platnú e-mailovú adresu.",
-       "nowikiemailtext": "Tento používateľ sa rozhodol, že si neželá prijímať emaily od ostatných používateľov.",
+       "nowikiemailtext": "Tento používateľ sa rozhodol, že si neželá prijímať e-maily od ostatných používateľov.",
        "emailnotarget": "Neexistujúce alebo neplatné používateľské meno príjemcu.",
        "emailtarget": "Zadajte používateľské meno príjemcu",
        "emailusername": "Používateľské meno:",
        "emailusernamesubmit": "Odoslať",
-       "email-legend": "Poslať email používateľovi {{GRAMMAR:genitív|{{SITENAME}}}}",
+       "email-legend": "Poslať e-mail používateľovi {{GRAMMAR:genitív|{{SITENAME}}}}",
        "emailfrom": "Od:",
        "emailto": "Komu:",
        "emailsubject": "Predmet:",
        "emailmessage": "Správa:",
        "emailsend": "Odoslať",
-       "emailccme": "Pošli mi emailom kópiu mojej správy.",
+       "emailccme": "Pošli mi e-mailom kópiu mojej správy.",
        "emailccsubject": "Kópia správy pre $1: $2",
        "emailsent": "E-mail bol odoslaný",
        "emailsenttext": "Vaša e-mailová správa bola odoslaná.",
        "rollbacklinkcount": "vrátenie $1 {{PLURAL:$1|úpravy|úprav}}",
        "rollbacklinkcount-morethan": "vrátiť viac ako $1 {{PLURAL:$1|úpravu|úprav}}",
        "rollbackfailed": "Rollback neúspešný",
+       "rollback-missingparam": "V požiadavke chýbajú povinné parametre.",
+       "rollback-missingrevision": "Nepodarilo sa načítať údaje k revízii.",
        "cantrollback": "Nie je možné úpravu vrátiť späť, posledný autor je jediný autor tejto stránky.",
        "alreadyrolled": "Nemožno vrátiť späť poslednú úpravu [[:$1]] od [[User:$2|$2]] ([[User talk:$2|Diskusia]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); niekto iný buď upravoval stránku alebo už vrátil úpravy späť.\n\nAutorom poslednej úpravy je [[User:$3|$3]] ([[User talk:$3|Diskusia]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Zhrnutie úpravy bolo: <em>$1</em>.",
        "blockip": "Zablokovať {{GENDER:$1|používateľa|používateľku}}",
        "blockip-legend": "Zablokovať používateľa",
        "blockiptext": "Tento formulár použite na zablokovanie možnosti zápisu z konkrétnej IP adresy alebo od konkrétneho používateľa.\nMali by ste to urobiť len na zabránenie vandalizmu a v súlade so [[{{MediaWiki:Policy-url}}|zásadami a smernicami {{GRAMMAR:genitív|{{SITENAME}}}}]].\nNižšie uveďte konkrétny dôvod (napríklad uveďte konkrétne stránky, ktoré padli za obeť vandalizmu).\nRozsahy IP adreies môžete blokovať pomocou syntaxe [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; najväčší povolený rozsah je /$1 v prípade IPv4 a /$2 v prípade IPv6.",
-       "ipaddressorusername": "IP adresa/meno používateľa:",
+       "ipaddressorusername": "IP adresa alebo meno používateľa:",
        "ipbexpiry": "Ukončenie:",
        "ipbreason": "Dôvod:",
        "ipbreason-dropdown": "* Bežné dôvody blokovania\n** Zámerné vkladanie chybných informácií\n** Mazanie obsahu stránok\n** Spam odkazy na externé stránky\n** Vkladanie nezmyslov do stránok\n** Zastrašujúce správanie/obťažovanie\n** Zneužívanie viacerých účtov\n** Neprípustné používateľské meno",
        "ipb-hardblock": "Zabrániť prihláseným používateľom upravovať z tejto IP adresy",
        "ipbcreateaccount": "Zabrániť vytváraniu účtov",
-       "ipbemailban": "Zabrániť používateľovi posielať emaily",
+       "ipbemailban": "Zabrániť používateľovi posielať e-maily",
        "ipbenableautoblock": "Automaticky blokovať poslednú IP adresu, ktorú tento používateľ použil, a všetky ďalšie adresy, z ktorých sa pokúsi upravovať.",
        "ipbsubmit": "Zablokovať tohto používateľa",
        "ipbother": "Iný čas",
        "anononlyblock": "iba anon.",
        "noautoblockblock": "automatické blokovanie vypnuté",
        "createaccountblock": "tvorba účtov bola zablokovaná",
-       "emailblock": "email blokovaný",
+       "emailblock": "e-mail blokovaný",
        "blocklist-nousertalk": "nemôže upravovať svoju diskusnú stránku",
        "ipblocklist-empty": "Zoznam blokovaní je prázdny.",
        "ipblocklist-no-results": "Požadovaná IP adresa alebo používateľské meno nie je blokovaná.",
        "unblocklink": "odblokovať",
        "change-blocklink": "zmeniť blokovanie",
        "contribslink": "príspevky",
-       "emaillink": "poslať email",
+       "emaillink": "poslať e-mail",
        "autoblocker": "Boli ste automaticky zablokovaný, pretože vašu IP adresu nedávno použil „[[User:$1|$1]]“.\nDôvodom zablokovania redaktora $1 bolo „$2“",
        "blocklogpage": "Záznam blokovaní",
        "blocklog-showlog": "Tento používateľ bol v minulosti zablokovaný. Záznam blokovaní uvádza nasledovný dôvod:",
        "block-log-flags-anononly": "iba anonymní používatelia",
        "block-log-flags-nocreate": "možnosť vytvoriť si účet bola vypnutá",
        "block-log-flags-noautoblock": "autoblokovanie vypnuté",
-       "block-log-flags-noemail": "email blokovaný",
+       "block-log-flags-noemail": "e-mail blokovaný",
        "block-log-flags-nousertalk": "nemôže upravovať vlastnú diskusnú stránku",
        "block-log-flags-angry-autoblock": "rozšírené automatické blokovanie zapnuté",
        "block-log-flags-hiddenname": "používateľské meno skryté",
        "namespacesall": "všetky",
        "monthsall": "všetky",
        "confirmemail": "Potvrdiť e-mailovú adresu",
-       "confirmemail_noemail": "Nenastavili ste platnú emailovú adresu vo svojich [[Special:Preferences|Nastaveniach]].",
+       "confirmemail_noemail": "Nenastavili ste platnú e-mailovú adresu vo svojich [[Special:Preferences|Nastaveniach]].",
        "confirmemail_text": "{{SITENAME}} vyžaduje, aby ste potvrdili platnosť vašej e-mailovej adresy\npred používaním e-mailových funkcií. Kliknite na tlačidlo dole, aby sa na vašu adresu odoslal potvrdzovací\ne-mail. V e-maili bude aj odkaz obsahujúci kód; otvorte odkaz\nvo vašom prehliadači, čím potvrdíte, že vaša e-mailová adresa je platná.",
-       "confirmemail_pending": "Potvrdzovací kód vám už bol zaslaný; ak ste si účet vytvorili len nedávno\nmali by ste počkať niekoľko minút, kým vám bude email doručený, predtým\nnež si vyžiadate nový kód.",
+       "confirmemail_pending": "Potvrdzovací kód vám už bol zaslaný; ak ste si účet vytvorili len nedávno\nmali by ste počkať niekoľko minút, kým vám bude e-mail doručený, predtým\nnež si vyžiadate nový kód.",
        "confirmemail_send": "Odoslať potvrdzovací kód",
        "confirmemail_sent": "Potvrdzovací e-mail odoslaný.",
-       "confirmemail_oncreate": "Na vašu emailovú adresu bol odoslaný potvrdzovací kód.\nTento kód nie je potrebný na prihlásenie, ale budete ho musieť poskytnúť pred\nzapnutím vlastností wiki využívajcich email.",
-       "confirmemail_sendfailed": "Z {{GRAMMAR:genitív|{{SITENAME}}}} nebolo možné odoslať potvrdzovací e-mail.\nSkontrolujte neplatné znaky vo vašej emailovej adrese.\n\nHlásenie programu, ktorý odosielal poštu: $1",
+       "confirmemail_oncreate": "Na vašu e-mailovú adresu bol odoslaný potvrdzovací kód.\nTento kód nie je potrebný na prihlásenie, ale budete ho musieť poskytnúť pred\nzapnutím vlastností wiki využívajcich e-mail.",
+       "confirmemail_sendfailed": "Z {{GRAMMAR:genitív|{{SITENAME}}}} nebolo možné odoslať potvrdzovací e-mail.\nSkontrolujte neplatné znaky vo vašej e-mailovej adrese.\n\nHlásenie programu, ktorý odosielal poštu: $1",
        "confirmemail_invalid": "Neplatný potvrdzovací kód. Kód možno vypršal.",
-       "confirmemail_needlogin": "Musíte sa $1 na potvrdenie vašej emailovaj adresy.",
+       "confirmemail_needlogin": "Musíte sa $1 na potvrdenie vašej e-mailovaj adresy.",
        "confirmemail_success": "Vaša e-mailová adresa bola potvrdená. Môžete sa prihlásiť a využívať wiki.",
        "confirmemail_loggedin": "Vaša e-mailová adresa bola potvrdená.",
        "confirmemail_subject": "{{SITENAME}} – potvrdenie e-mailovej adresy",
-       "confirmemail_body": "Niekto, pravdepodobne vy z IP adresy $1, zaregistroval účet\n„$2“ s touto e-mailovou adresou na {{GRAMMAR:lokál|{{SITENAME}}}}.\n\nPre potvrdenie, že tento účet skutočne patrí vám a pre aktivovanie\ne-mailových funkcií na {{GRAMMAR:lokál|{{SITENAME}}}}, otvorte tento odkaz vo vašom prehliadači:\n\n$3\n\nAk ste to *neboli* vy, otvorte tento odkaz,\nčím zrušíte potvrdenie emailovej adresy:\n\n$5\n\nTento potvrdzovací kód vyprší $4.",
+       "confirmemail_body": "Niekto, pravdepodobne vy z IP adresy $1, zaregistroval účet\n„$2“ s touto e-mailovou adresou na {{GRAMMAR:lokál|{{SITENAME}}}}.\n\nPre potvrdenie, že tento účet skutočne patrí vám a pre aktivovanie\ne-mailových funkcií na {{GRAMMAR:lokál|{{SITENAME}}}}, otvorte tento odkaz vo vašom prehliadači:\n\n$3\n\nAk ste to *neboli* vy, otvorte tento odkaz,\nčím zrušíte potvrdenie e-mailovej adresy:\n\n$5\n\nTento potvrdzovací kód vyprší $4.",
        "confirmemail_body_changed": "Niekto, pravdepodobne vy, z IP adresy $1,\nzmenil e-mailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:lokál|{{SITENAME}}}}.\n\nAby ste potvrdili, že tento účet skutočne patrí vám a znova\naktivovali funkcie emailu na{{GRAMMAR:lokál|{{SITENAME}}}},\notvorte nasledovný odkaz v prehliadači:\n\n$3\n\nAk vám účet *nepatrí*, otvorte namiesto toho tento odkaz,\nktorý zruší potvrdenie emailovej adresy:\n\n$5\n\nPlatnosť tohoto potvrdzovacieho kódu vyprší $4.",
        "confirmemail_body_set": "Niekto, pravdepodobne vy, z IP adresy $1\nnastavil e-mailovú adresu účtu „$2“ na túto adresu na {{GRAMMAR:genitív|{{SITENAME}}}}.\n\nAk chcete potvrdiť, že tento účet skutočne patrí vám a aktivovať\ne-mailové funkcie na {{GRAMMAR:genitív|{{SITENAME}}}}, otvorte tento odkaz vo vašom prehliadači:\n\n$3\n\nAk účet nie je *nepatrí* patrí k vám, nasledujte tento odkaz,\nktorý zruší potvrdenie e-mailovej adresy:\n\n$5\n\nPlatnosť tohto potvrdzovacieho kódu vyprší $4.",
-       "confirmemail_invalidated": "Potvrdenie emailovej adresy bolo zrušené",
-       "invalidateemail": "Zrušiť potvrdenie emailovej adresy",
-       "notificationemail_subject_changed": "Email zaregistrovaný na {{GRAMMAR:lokál|{{SITENAME}}}} bol zmenený",
-       "notificationemail_subject_removed": "Email zaregistrovaný na {{GRAMMAR:lokál|{{SITENAME}}}} bol odstránený",
-       "notificationemail_body_changed": "Niekoho, pravdepodobne vy, z IP adresy $1, zmenil na {{GRAMMAR:lokál|{{SITENAME}}}} emailovú adresu účtu „$2“ na „$3“.\n\nAk ste to neboli vy, čo najskôr sa obráťte na správcu {{GRAMMAR:akuzatív|{{SITENAME}}}}.",
-       "notificationemail_body_removed": "Niekoho, pravdepodobne vy, z IP adresy $1, odstránil na {{GRAMMAR:lokál|{{SITENAME}}}} emailovú adresu účtu „$2“.\n\nAk ste to neboli vy, čo najskôr sa obráťte na správcu {{GRAMMAR:akuzatív|{{SITENAME}}}}.",
+       "confirmemail_invalidated": "Potvrdenie e-mailovej adresy bolo zrušené",
+       "invalidateemail": "Zrušiť potvrdenie e-mailovej adresy",
+       "notificationemail_subject_changed": "E-mail zaregistrovaný na {{GRAMMAR:lokál|{{SITENAME}}}} bol zmenený",
+       "notificationemail_subject_removed": "E-mail zaregistrovaný na {{GRAMMAR:lokál|{{SITENAME}}}} bol odstránený",
+       "notificationemail_body_changed": "Niekoho, pravdepodobne vy, z IP adresy $1, zmenil na {{GRAMMAR:lokál|{{SITENAME}}}} e-mailovú adresu účtu „$2“ na „$3“.\n\nAk ste to neboli vy, čo najskôr sa obráťte na správcu {{GRAMMAR:akuzatív|{{SITENAME}}}}.",
+       "notificationemail_body_removed": "Niekoho, pravdepodobne vy, z IP adresy $1, odstránil na {{GRAMMAR:lokál|{{SITENAME}}}} e-mailovú adresu účtu „$2“.\n\nAk ste to neboli vy, čo najskôr sa obráťte na správcu {{GRAMMAR:akuzatív|{{SITENAME}}}}.",
        "scarytranscludedisabled": "[Transklúzia interwiki je vypnutá]",
        "scarytranscludefailed": "[Nepodarilo sa priniesť šablónu pre $1]",
        "scarytranscludefailed-httpstatus": "[Stiahnutie šablóny zlyhalo pre $1: HTTP $2]",
        "version-ext-colheader-credits": "Autori",
        "version-license-title": "Licencia pre $1",
        "version-license-not-found": "Nenašli sa žiadne podrobné licenčné informácie k tomuto rozšíreniu.",
+       "version-credits-title": "Autori $1",
+       "version-credits-not-found": "Pre toto rozšírenie neboly nájdené podrobnejšie informácie o autoroch.",
        "version-poweredby-credits": "Táto wiki beží na '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "ďalší",
        "version-poweredby-translators": "prekladatelia na translatewiki.net",
        "logentry-newusers-newusers": "Bol {{GENDER:$2|vytvorený}} používateľský účet $1",
        "logentry-newusers-create": "Bol vytvorený používateľský účet $1",
        "logentry-newusers-create2": "$1 vytvoril používateľský účet $3",
-       "logentry-newusers-byemail": "$1 vytvoril používateľský účet $3 a heslo bolo poslané emailom",
+       "logentry-newusers-byemail": "$1 vytvoril používateľský účet $3 a heslo bolo poslané e-mailom",
        "logentry-newusers-autocreate": "Používateľský účet $1 bol {{GENDER:$2|vytvorený}} automaticky",
        "logentry-protect-move_prot": "$1 {{GENDER:$2|presunul|presunula}} nastavenie zámku zo stránky $4 na $3",
        "logentry-protect-unprotect": "$1 {{GENDER:$2|odomkol|odomkla}} stránku $3",
        "log-name-tag": "Záznam značiek",
        "log-description-tag": "Táto stránka zobrazuje doplnenia a odobratia [[Special:Tags|značiek]] stránok a protokolovacích záznamov používateľmi. Zoznam nezahŕňa označenia stránok, ktoré boli súčasťou editačnej úpravy, zmazania alebo obdobnej akcie.",
        "rightsnone": "(žiadne)",
+       "rightslogentry-temporary-group": "$1 (dočasne, do $2)",
        "feedback-adding": "Pridáva sa komentár na stránku...",
        "feedback-back": "Späť",
        "feedback-bugcheck": "Skvelé! Teraz len skontrolujte, či to nie je jedna z už [$1 známych chýb].",
        "feedback-error1": "Chyba: Nerozpoznaný výsledok z API",
        "feedback-error2": "Chyba: Úprava sa nepodarila",
        "feedback-error3": "Chyba: Žiadna odpoveď z API",
+       "feedback-error4": "Chyba: Na uvedenú stránku pre spätnú väzbu nie je možné odosielať",
        "feedback-message": "Správa:",
        "feedback-subject": "Predmet:",
        "feedback-submit": "Odoslať",
        "json-error-unknown": "Došlo k problému s JSONom. Chyba: $1",
        "json-error-depth": "Maximálna hĺbka zásobníka bola prekročená",
        "json-error-state-mismatch": "Nesprávny alebo poškodený JSON",
+       "json-error-ctrl-char": "Chybný riadiaci znak, možno nesprávne kódovanie",
        "json-error-syntax": "Syntaktická chyba",
+       "json-error-utf8": "Chybné UTF-8 sekvencie, možno nesprávne kódovanie",
+       "json-error-recursion": "Jeden alebo viacero rekurentných odkazov v kódovanej hodnote",
+       "json-error-inf-or-nan": "Jedna alebo viacero hodnôt NAN nebo INF v kódovanej hodnote",
+       "json-error-unsupported-type": "Odovzdaná hodnota nekódovateľného typu",
        "headline-anchor-title": "Odkaz na túto sekciu",
        "special-characters-group-latin": "Latinka",
        "special-characters-group-latinextended": "Latina rozšírené",
        "mw-widgets-dateinput-no-date": "Nebol zvolený žiaden dátum",
        "mw-widgets-dateinput-placeholder-day": "RRRR-MM-DD",
        "mw-widgets-dateinput-placeholder-month": "RRRR-MM",
+       "mw-widgets-mediasearch-input-placeholder": "Hľadať médiá",
+       "mw-widgets-mediasearch-noresults": "Neboli nájdené žiadne výsledky.",
        "mw-widgets-titleinput-description-new-page": "stránka zatiaľ neexistuje",
        "mw-widgets-titleinput-description-redirect": "presmerovanie na $1",
        "randomrootpage": "Náhodná koreňová stránka",
index e9a5788..ca96c7a 100644 (file)
        "category-file-count-limited": "{{PLURAL:$1|1=Следећа датотека је|Следеће $1 датотеке су|Следећих $1 датотека је}} у овој категорији.",
        "listingcontinuesabbrev": "наст.",
        "index-category": "Пописане странице",
-       "noindex-category": "Ð\9dепопиÑ\81ане странице",
+       "noindex-category": "Ð\9dеиндекÑ\81иÑ\80ане странице",
        "broken-file-category": "Странице с неисправним везама до датотека",
        "about": "О нама",
        "article": "Страница са садржајем",
        "versionrequired": "Потребно је издање $1 Медијавикија",
        "versionrequiredtext": "Потребно је издање $1 Медијавикија да бисте користили ову страницу.\nПогледајте страницу за [[Special:Version|издање]].",
        "ok": "У реду",
-       "pagetitle": "$1 â\80\93 {{SITENAME}}",
+       "pagetitle": "$1 â\80\94 {{SITENAME}}",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "backlinksubtitle": "← $1",
        "retrievedfrom": "Преузето из „$1“",
        "userinvalidcssjstitle": "<strong>Упозорење:</strong> не постоји тема „$1“.\nПрилагођене странице CSS и јаваскрипт почињу малим словом, нпр. {{ns:user}}:Foo/vector.css, а не {{ns:user}}:Foo/Vector.css.",
        "updated": "(Ажурирано)",
        "note": "<strong>Напомена:</strong>",
-       "previewnote": "<strong>Ð\9eво Ñ\98е претпреглед.</strong>\nВаше измене још нису сачуване!",
+       "previewnote": "<strong>Ð\9dе Ð·Ð°Ð±Ð¾Ñ\80авиÑ\82е Ð´Ð° Ñ\98е Ð¾Ð²Ð¾ Ñ\81амо претпреглед.</strong>\nВаше измене још нису сачуване!",
        "continue-editing": "Иди на уређивачки оквир",
        "previewconflict": "Овај преглед осликава како ће текст у текстуалном оквиру изгледати.",
        "session_fail_preview": "Нисмо могли да обрадимо вашу измену због губитка података сесије.\n\nМожда сте одјављени. <strong>Проверите да ли сте пријављен и покушајте поново</strong>.\n\nАко и даље не ради, покушајте да се [[Special:UserLogout|одјавите]] и поново пријавите и проверите да ли су на Вашем претраживачу дозвољени колачићи са овог сајта.",
        "longpageerror": "'''Грешка: текст који сте унели је величине {{PLURAL:$1|један килобајт|$1 килобајта|$1 килобајта}}, што је веће од {{PLURAL:$2|дозвољеног једног килобајта|дозвољена $2 килобајта|дозвољених $2 килобајта}}.'''\nСтраница не може бити сачувана.",
        "readonlywarning": "<strong>Упозорење: база података је закључана ради одржавања, тако да тренутно нећете моћи да сачувате измене.</strong>\nМожда бисте желели сачувати текст за касније у некој текстуалној датотеци.\n\nСистемски администратор је навео следеће објашњење: $1",
        "protectedpagewarning": "<strong>Упозорење: ова страница је заштићена, тако да само администратори могу да је мењају.</strong>\nПоследњи запис у дневнику је приказан испод:",
-       "semiprotectedpagewarning": "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је уређују.\nПоследњи запис у дневнику је приказан испод:",
+       "semiprotectedpagewarning": "<strong>Напомена:</strong> Ова страница је заштићена, тако да само регистровани корисници могу да је уређују.\nПоследњи запис у дневнику приказан је испод као референца:",
        "cascadeprotectedwarning": "<strong>Упозорење:</strong> ова страница је заштићена тако да је могу уређивати само администратори, јер је она укључена у {{PLURAL:$1|следећу страницу која је|следеће странице које су}} заштићене „преносивом“ заштитом:",
        "titleprotectedwarning": "<strong>Упозорење: ову страницу могу направити само корисници [[Special:ListGroupRights|с одређеним правима]].</strong>\nИспод су наведени последњи записи у дневнику:",
        "templatesused": "{{PLURAL:$1|Шаблон|Шаблони}} на овој страници:",
        "upload-curl-error28-text": "Сервер не одговара на упит.\nПроверите да ли сајт ради, мало осачекајте и покушајте поново.\nПробајте касније када буде мање оптерећење.",
        "license": "Лиценца:",
        "license-header": "Лиценца:",
-       "nolicense": "није изабрано",
+       "nolicense": "Ð\9dије изабрано",
        "licenses-edit": "Уреди избор лиценци",
        "license-nopreview": "(преглед није доступан)",
        "upload_source_url": "(ваша изабрана датотека од исправних и јавно доступних адреса)",
        "filehist-revert": "врати",
        "filehist-current": "тренутно",
        "filehist-datetime": "Датум/време",
-       "filehist-thumb": "Ð\9cиниÑ\98аÑ\82Ñ\83Ñ\80а",
+       "filehist-thumb": "УмаÑ\9aени Ð¿Ñ\80иказ",
        "filehist-thumbtext": "Умањени приказ за издање од $1",
-       "filehist-nothumb": "Нема минијатуре",
+       "filehist-nothumb": "Нема умањеног приказа",
        "filehist-user": "Корисник",
        "filehist-dimensions": "Димензије",
        "filehist-filesize": "Величина датотеке",
        "fix-double-redirects": "Ажурирајте сва преусмерења која воде до првобитног наслова",
        "move-leave-redirect": "Остави преусмерење",
        "protectedpagemovewarning": "'''Упозорење:''' ова страница је заштићена, тако да само корисници с администраторским овлашћењима могу да је преместе.\nЗа више информација, последњи запис у дневнику измена је приказан испод:",
-       "semiprotectedpagemovewarning": "'''Напомена:''' ова страница је заштићена, тако да само регистровани корисници могу да је преместе.\nЗа више информација, последњи запис у дневнику измена је приказан испод:",
+       "semiprotectedpagemovewarning": "<strong>Напомена:</strong> Ова страница је заштићена, тако да само регистровани корисници могу да је преместе.\nПоследњи запис у дневнику измена приказан је испод као референца:",
        "move-over-sharedrepo": "[[:$1]] се налази на дељеном складишту. Ако преместите датотеку на овај наслов, то ће заменити дељену датотеку.",
        "file-exists-sharedrepo": "Наведени назив датотеке се већ користи у дељеном складишту.\nИзаберите други назив.",
        "export": "Извоз страница",
        "file-no-thumb-animation-gif": "'''Напомена: због техничких ограничења, минијатуре GIF слика високе резолуције као што је ова неће се анимирати.'''",
        "newimages": "Галерија нових датотека",
        "imagelisttext": "Испод је списак од '''$1''' {{PLURAL:$1|датотеке|датотеке|датотека}} поређаних $2.",
-       "newimages-summary": "Ð\9eва Ð¿Ð¾Ñ\81ебна Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¿Ñ\80иказÑ\83Ñ\98е Ð¿Ð¾Ñ\81ледÑ\9aе Ð¿Ð¾Ñ\81лаÑ\82е датотеке.",
+       "newimages-summary": "Ð\9eва Ð¿Ð¾Ñ\81ебна Ñ\81Ñ\82Ñ\80аниÑ\86а Ð¿Ñ\80иказÑ\83Ñ\98е Ð¿Ð¾Ñ\81ледÑ\9aе Ð¾Ñ\82пÑ\80емÑ\99ене датотеке.",
        "newimages-legend": "Филтер",
        "newimages-label": "Назив датотеке (или њен део):",
        "newimages-showbots": "Прикажи датотеке које су послали ботови",
        "exif-scenecapturetype": "Врста снимања сцена",
        "exif-gaincontrol": "Контрола сцене",
        "exif-contrast": "Контраст",
-       "exif-saturation": "Засићење",
+       "exif-saturation": "Засићеност",
        "exif-sharpness": "Оштрина",
        "exif-devicesettingdescription": "Опис поставки уређаја",
        "exif-subjectdistancerange": "Опсег удаљености објекта",
        "exif-contrast-1": "Меко",
        "exif-contrast-2": "Тврдо",
        "exif-saturation-0": "Нормално",
-       "exif-saturation-1": "Ð\9dиÑ\81ко Ð·Ð°Ñ\81иÑ\9bеÑ\9aе",
-       "exif-saturation-2": "Ð\92иÑ\81око Ð·Ð°Ñ\81иÑ\9bеÑ\9aе",
+       "exif-saturation-1": "Ð\9dиÑ\81ка Ð·Ð°Ñ\81иÑ\9bеноÑ\81Ñ\82",
+       "exif-saturation-2": "Ð\92иÑ\81ока Ð·Ð°Ñ\81иÑ\9bеноÑ\81Ñ\82",
        "exif-sharpness-0": "Нормално",
        "exif-sharpness-1": "Меко",
        "exif-sharpness-2": "Тврдо",
        "hebrew-calendar-m12-gen": "Елул",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|разговор]])",
        "timezone-utc": "UTC",
-       "duplicate-defaultsort": "'''Упозорење:''' подразумевани кључ сврставања „$2“ мења некадашњи кључ „$1“.",
+       "duplicate-defaultsort": "<strong>Упозорење:</strong> Подразумевани кључ сврставања „$2“ мења ранији подразумевани кључ сврставања „$1“.",
        "duplicate-displaytitle": "<strong>Упозорење:</strong> наслов за приказ „$2“ замениће постојећи „$1“.",
        "version": "Верзија",
        "version-extensions": "Инсталирана проширења",
index 8e9ca3c..c47fb72 100644 (file)
        "category-file-count-limited": "{{PLURAL:$1|1=Sledeća datoteka je|Sledeće $1 datoteke su|Sledećih $1 datoteka je}} u ovoj kategoriji.",
        "listingcontinuesabbrev": "nast.",
        "index-category": "Popisane stranice",
-       "noindex-category": "Nepopisane stranice",
+       "noindex-category": "Neindeksirane stranice",
        "broken-file-category": "Stranice s neispravnim vezama do datoteka",
        "about": "O nama",
        "article": "Stranica sa sadržajem",
        "versionrequired": "Potrebno je izdanje $1 Medijavikija",
        "versionrequiredtext": "Potrebno je izdanje $1 Medijavikija da biste koristili ovu stranicu.\nPogledajte stranicu za [[Special:Version|izdanje]].",
        "ok": "U redu",
-       "pagetitle": "$1 â\80\93 {{SITENAME}}",
+       "pagetitle": "$1 â\80\94 {{SITENAME}}",
        "pagetitle-view-mainpage": "{{SITENAME}}",
        "backlinksubtitle": "← $1",
        "retrievedfrom": "Preuzeto iz „$1“",
        "userinvalidcssjstitle": "<strong>Upozorenje:</strong> ne postoji tema „$1“.\nPrilagođene stranice CSS i javaskript počinju malim slovom, npr. {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.",
        "updated": "(Ažurirano)",
        "note": "<strong>Napomena:</strong>",
-       "previewnote": "<strong>Ovo je pretpregled.</strong>\nVaše izmene još nisu sačuvane!",
+       "previewnote": "<strong>Ne zaboravite da je ovo samo pretpregled.</strong>\nVaše izmene još nisu sačuvane!",
        "continue-editing": "Idi na uređivački okvir",
        "previewconflict": "Ovaj pregled oslikava kako će tekst u tekstualnom okviru izgledati.",
        "session_fail_preview": "'''Nismo mogli da obradimo vašu izmenu zbog gubitka podataka sesije.'''\nPokušajte ponovo.\nAko i dalje ne radi, pokušajte da se [[Special:UserLogout|odjavite]] i ponovo prijavite.",
        "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\nSistemski administrator je naveo sledeće objašnjenje: $1",
        "protectedpagewarning": "<strong>Upozorenje: ova stranica je zaštićena, tako da samo administratori mogu da je menjaju.</strong>\nPoslednji zapis u dnevniku je prikazan ispod:",
-       "semiprotectedpagewarning": "'''Napomena:''' ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je uređuju.\nPoslednji zapis u dnevniku je prikazan ispod:",
+       "semiprotectedpagewarning": "<strong>Napomena:</strong> Ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je uređuju.\nPoslednji zapis u dnevniku prikazan je ispod kao referenca:",
        "cascadeprotectedwarning": "<strong>Upozorenje:</strong> ova stranica je zaštićena tako da je mogu uređivati samo administratori, jer je ona uključena u {{PLURAL:$1|sledeću stranicu koja je|sledeće stranice koje su}} zaštićene „prenosivom“ zaštitom:",
        "titleprotectedwarning": "<strong>Upozorenje: ovu stranicu mogu napraviti samo korisnici [[Special:ListGroupRights|s određenim pravima]].</strong>\nIspod su navedeni poslednji zapisi u dnevniku:",
        "templatesused": "{{PLURAL:$1|Šablon|Šabloni}} na ovoj stranici:",
        "upload-curl-error28-text": "Server ne odgovara na upit.\nProverite da li sajt radi, malo osačekajte i pokušajte ponovo.\nProbajte kasnije kada bude manje opterećenje.",
        "license": "Licenca:",
        "license-header": "Licenca:",
-       "nolicense": "nije izabrano",
+       "nolicense": "Nije izabrano",
        "licenses-edit": "Uredi izbor licenci",
        "license-nopreview": "(pregled nije dostupan)",
        "upload_source_url": "(vaša izabrana datoteka od ispravnih i javno dostupnih adresa)",
        "filehist-revert": "vrati",
        "filehist-current": "trenutno",
        "filehist-datetime": "Datum/vreme",
-       "filehist-thumb": "Minijatura",
+       "filehist-thumb": "Umanjeni prikaz",
        "filehist-thumbtext": "Umanjeni prikaz za izdanje od $1",
-       "filehist-nothumb": "Nema minijature",
+       "filehist-nothumb": "Nema umanjenog prikaza",
        "filehist-user": "Korisnik",
        "filehist-dimensions": "Dimenzije",
        "filehist-filesize": "Veličina datoteke",
        "fix-double-redirects": "Ažurirajte sva preusmerenja koja vode do prvobitnog naslova",
        "move-leave-redirect": "Ostavi preusmerenje",
        "protectedpagemovewarning": "'''Upozorenje:''' ova stranica je zaštićena, tako da samo korisnici s administratorskim ovlašćenjima mogu da je premeste.\nZa više informacija, poslednji zapis u dnevniku izmena je prikazan ispod:",
-       "semiprotectedpagemovewarning": "'''Napomena:''' ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je premeste.\nZa više informacija, poslednji zapis u dnevniku izmena je prikazan ispod:",
+       "semiprotectedpagemovewarning": "<strong>Napomena:</strong> Ova stranica je zaštićena, tako da samo registrovani korisnici mogu da je premeste.\nPoslednji zapis u dnevniku izmena prikazan je ispod kao referenca:",
        "move-over-sharedrepo": "[[:$1]] se nalazi na deljenom skladištu. Ako premestite datoteku na ovaj naslov, to će zameniti deljenu datoteku.",
        "file-exists-sharedrepo": "Navedeni naziv datoteke se već koristi u deljenom skladištu.\nIzaberite drugi naziv.",
        "export": "Izvoz stranica",
        "file-no-thumb-animation-gif": "'''Napomena: zbog tehničkih ograničenja, minijature GIF slika visoke rezolucije kao što je ova neće se animirati.'''",
        "newimages": "Galerija novih datoteka",
        "imagelisttext": "Ispod je spisak od '''$1''' {{PLURAL:$1|datoteke|datoteke|datoteka}} poređanih $2.",
-       "newimages-summary": "Ova posebna stranica prikazuje poslednje poslate datoteke.",
+       "newimages-summary": "Ova posebna stranica prikazuje poslednje otpremljene datoteke.",
        "newimages-legend": "Filter",
        "newimages-label": "Naziv datoteke (ili njen deo):",
        "newimages-showbots": "Prikaži datoteke koje su poslali botovi",
        "exif-scenecapturetype": "Vrsta snimanja scena",
        "exif-gaincontrol": "Kontrola scene",
        "exif-contrast": "Kontrast",
-       "exif-saturation": "Zasićenje",
+       "exif-saturation": "Zasićenost",
        "exif-sharpness": "Oštrina",
        "exif-devicesettingdescription": "Opis postavki uređaja",
        "exif-subjectdistancerange": "Opseg udaljenosti objekta",
        "exif-contrast-1": "Meko",
        "exif-contrast-2": "Tvrdo",
        "exif-saturation-0": "Normalno",
-       "exif-saturation-1": "Nisko zasićenje",
-       "exif-saturation-2": "Visoko zasićenje",
+       "exif-saturation-1": "Niska zasićenost",
+       "exif-saturation-2": "Visoka zasićenost",
        "exif-sharpness-0": "Normalno",
        "exif-sharpness-1": "Meko",
        "exif-sharpness-2": "Tvrdo",
        "hebrew-calendar-m12-gen": "Elul",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|razgovor]])",
        "timezone-utc": "UTC",
-       "duplicate-defaultsort": "'''Upozorenje:''' podrazumevani ključ svrstavanja „$2“ menja nekadašnji ključ „$1“.",
+       "duplicate-defaultsort": "<strong>Upozorenje:</strong> Podrazumevani ključ svrstavanja „$2“ menja raniji podrazumevani ključ svrstavanja „$1“.",
        "duplicate-displaytitle": "<strong>Upozorenje:</strong> naslov za prikaz „$2“ zameniće postojeći „$1“.",
        "version": "Verzija",
        "version-extensions": "Instalirana proširenja",
index d5b211c..f3acb6e 100644 (file)
        "action-deleterevision": "bu revizyonu silmeye",
        "action-deletedhistory": "bu sayfanın silinme geçmişini görmeye",
        "action-browsearchive": "silinen sayfaları aramaya",
-       "action-undelete": "bu sayfanın silme işlemini geri almaya",
-       "action-suppressrevision": "bu gizli revizyonu gözden geçirip geri yüklemeye",
+       "action-undelete": "sayfaları geri getir",
+       "action-suppressrevision": "gizli sürümleri gözden geçir ve geri getir",
        "action-suppressionlog": "bu özel günlüğü görmeye",
        "action-block": "bu kullanıcının değişiklik yapmasını engellemeye",
        "action-protect": "bu sayfa için koruma düzeylerini değiştirmeye",
        "action-userrights-interwiki": "diğer vikilerde kullanıcıların, kullanıcı haklarını değiştirmeye",
        "action-siteadmin": "veritabanını kilitleyip açmaya",
        "action-sendemail": "e-posta gönder",
+       "action-editmyoptions": "tercihlerinizi düzenleyin",
        "action-editmywatchlist": "izleme listeni düzenle",
        "action-viewmywatchlist": "izleme listeni gör",
        "action-viewmyprivateinfo": "kendi özel bilgilerinizi görmeye",
        "action-editmyprivateinfo": "kendi özel bilgilerinizi değiştirmeye",
        "action-editcontentmodel": "bir sayfanın içerik modelini düzenle",
-       "action-managechangetags": "veritabanındaki etiketleri yarat ve sil",
+       "action-managechangetags": "etiket oluştur ve etkinleştir (veya devre dışı bırak)",
        "action-applychangetags": "değişikliklerle beraber etiketlendirmeyi de uygula",
        "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",
        "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ş",
        "recentchanges-legend-heading": "<strong>Gösterge:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ayrıca [[Special:NewPages|yeni sayfalar listesine]] bakınız)",
        "recentchanges-submit": "Göster",
+       "rcfilters-activefilters": "Etkin süzgeçler",
+       "rcfilters-restore-default-filters": "Varsayılan süzgeçleri geri getir",
+       "rcfilters-clear-all-filters": "Tüm süzgeçleri temizle",
+       "rcfilters-search-placeholder": "Son değişiklikleri filtrele (gözatın veya yazmaya başlayın)",
+       "rcfilters-invalid-filter": "Geçersiz süzgeç",
+       "rcfilters-empty-filter": "Etkin süzgeç bulunmuyor. Tüm katkıları gösteriliyor.",
+       "rcfilters-filterlist-title": "Süzgeçler",
+       "rcfilters-filterlist-feedbacklink": "Yeni (beta) süzgeçler konusunda geribildirim verin",
+       "rcfilters-highlightbutton-title": "Sonuçları vurgula",
+       "rcfilters-highlightmenu-title": "Bir renk seçin",
+       "rcfilters-highlightmenu-help": "Bu özelliği vurgulamak için bir renk seçin",
+       "rcfilters-filterlist-noresults": "Süzgeç bulunamadı",
+       "rcfilters-filtergroup-registration": "Kullanıcı kaydı",
+       "rcfilters-filter-registered-label": "Kayıtlı",
+       "rcfilters-filter-registered-description": "Oturum açmış editörler.",
+       "rcfilters-filter-unregistered-label": "Kayıtsız",
+       "rcfilters-filter-unregistered-description": "Oturum açmamış editörler.",
+       "rcfilters-filtergroup-authorship": "Düzenleme sahipliği",
+       "rcfilters-filter-editsbyself-label": "Kendi düzenlemeleriniz",
+       "rcfilters-filter-editsbyself-description": "Sizin düzenlemeleriniz.",
+       "rcfilters-filter-editsbyother-label": "Başkalarının düzenlemeleri",
+       "rcfilters-filter-editsbyother-description": "Başka kullanıcılar tarafından oluşturulan düzenlemeler (sizin değil).",
+       "rcfilters-filtergroup-userExpLevel": "Deneyim düzeyi (yalnızca kayıtlı kullanıcılar için)",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered": "Bu süzgeç etkin değildir, çünkü yalnızca kayıtlı kullanıcıları bulmaktadır, yani \"Kayıtsız\" süzgeci etkisini ortadan kaldırmaktadır.",
+       "rcfilters-filtergroup-user-experience-level-conflicts-unregistered-global": "\"Kayıtsız\" süzgeci bir veya daha fazla Deneyim süzgeciyle çakışmaktadır. Deneyim süzgeçleri yalnızca kayıtlı kullanıcıları bulmaktadır. Çakışan süzgeçler yukarıda etkin değil şeklinde işaretlenmiştir.",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Yeni gelenler",
+       "rcfilters-filter-user-experience-level-newcomer-description": "10'dan az düzenleme ve 4 günden az etkinlik.",
+       "rcfilters-filter-user-experience-level-learner-label": "Öğreniciler",
+       "rcfilters-filter-user-experience-level-learner-description": "\"Yeni gelenler\"den daha fazla gün boyunca etkinlik ve daha fazla düzenleme, ancak \"Deneyimli kullanıcılar\"dan daha az etkinlik ve düzenleme.",
+       "rcfilters-filter-user-experience-level-experienced-label": "Deneyimli kullanıcılar",
+       "rcfilters-filter-user-experience-level-experienced-description": "30'dan fazla gün etkinlik ve 500'den fazla düzenleme.",
+       "rcfilters-filtergroup-automated": "Otomatikleştirilmiş katkılar",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Otomatikleştirilmiş araçlar tarafından yapılan düzenlemeler.",
+       "rcfilters-filter-humans-label": "İnsan (bot değil)",
+       "rcfilters-filter-humans-description": "İnsan editörler tarafından yapılan düzenlemeler.",
+       "rcfilters-filtergroup-reviewstatus": "İnceleme durumu",
+       "rcfilters-filter-patrolled-label": "Devriye onayından geçmiş",
+       "rcfilters-filter-patrolled-description": "Devriye onayından geçmiş olarak işaretlenen düzenlemeler.",
+       "rcfilters-filter-unpatrolled-label": "Devriye onayından geçmemiş",
+       "rcfilters-filter-unpatrolled-description": "Devriye onayından geçmiş olarak işaretlenmeyen düzenlemeler.",
+       "rcfilters-filtergroup-significance": "Önem",
        "rcfilters-filter-minor-label": "Küçük değişiklikler",
+       "rcfilters-filter-minor-description": "Yazarın küçük olarak etiketlediği düzenlemeler.",
        "rcfilters-filter-major-label": "Küçük olmayan değişiklikler",
+       "rcfilters-filter-major-description": "Küçük olarak etiketlenmemiş düzenlemeler.",
+       "rcfilters-filtergroup-changetype": "Değişiklik türü",
+       "rcfilters-filter-pageedits-label": "Sayfa düzenlemeleri",
+       "rcfilters-filter-pageedits-description": "Viki içeriği, tartışmalar, kategori açıklamalarındaki düzenlemeler....",
+       "rcfilters-filter-newpages-label": "Sayfa oluşturmalar",
+       "rcfilters-filter-newpages-description": "Yeni sayfa oluşturan düzenlemeler.",
+       "rcfilters-filter-categorization-label": "Kategori değişiklikleri",
+       "rcfilters-filter-categorization-description": "Kategorilere eklenen veya kaldırılan sayfaların kayıtları.",
+       "rcfilters-filter-logactions-label": "Günlüğü tutulan işlemler",
        "rcnotefrom": "<strong>$3, $4</strong> tarihinden itibaren yapılan {{PLURAL:$5|değişiklik|değişiklik}} aşağıdadır (<strong>$1</strong> tarhine kadar olanlar gösterilmektedir).",
        "rclistfrom": "$3 $2 tarihinden itibaren yeni değişiklikleri göster",
        "rcshowhideminor": "Küçük değişiklikleri $1",
index afd63c2..301fb18 100644 (file)
        "prefs-help-prefershttps": "该设置将在下次登录时生效。",
        "prefswarning-warning": "您对您的参数设置的更改尚未保存。如果您不点击“$1”就离开,您的设置就不会更新。",
        "prefs-tabs-navigation-hint": "提示:您可以通过左、右箭头键在选项卡之间切换。",
-       "userrights": "用户权限管理",
+       "userrights": "用户权限",
        "userrights-lookup-user": "选择用户",
        "userrights-user-editname": "输入用户名:",
        "editusergroup": "加载用户组",
index c141307..054042d 100644 (file)
        "variantname-gan-hans": "‪中文(简体)",
        "variantname-gan-hant": "‪中文(繁體)",
        "metadata": "詮釋資料",
-       "metadata-help": "æ­¤æ\96\87件中å\8c\85å\90«é¡\8då¤\96ä¿¡æ\81¯ã\80\82é\80\99äº\9bä¿¡æ\81¯å\8f¯è\83½æ\98¯ç\94±æ\95¸ç¢¼ç\9b¸æ©\9fæ\88\96æ\8e\83æ\8f\8få\84\80å\9c¨å\89µå»ºæ\88\96æ\95¸å­\97å\8c\96é\81\8eç¨\8b中æ\89\80æ·»å\8a ç\9a\84ã\80\82å¦\82æ\9e\9cæ\96\87件è\87ªå\88\9då§\8bç\8b\80æ\85\8bå·²å\8f\97å\88°ä¿®æ\94¹ï¼\8cä¸\80äº\9b詳細說æ\98\8eå\8f¯è\83½ç\84¡æ³\95å\8f\8dæ\98 ä¿®æ\94¹å¾\8cç\9a\84æ\96\87件。",
+       "metadata-help": "æ­¤æª\94æ¡\88中å\8c\85å\90«å\85¶ä»\96è³\87è¨\8aï¼\8cé\80\99äº\9bè³\87è¨\8aå\8f¯è\83½æ\98¯ç\94±æ\95¸ä½\8dç\9b¸æ©\9fæ\88\96æ\8e\83æ\8f\8få\99¨å\9c¨å»ºç«\8bæ\88\96æ\95¸ä½\8då\8c\96é\81\8eç¨\8b中æ\89\80æ\96°å¢\9eç\9a\84ã\80\82è\8b¥æª\94æ¡\88è\87ªå\8e\9få§\8bç\8b\80æ\85\8b已被修æ\94¹ï¼\8cä¸\80äº\9b詳細è³\87æ\96\99å\8f¯è\83½ç\84¡æ³\95å®\8cæ\95´å\8f\8dæ\98 å\87ºå·²ä¿®æ\94¹ç\9a\84æª\94æ¡\88。",
        "metadata-expand": "顯示詳細資料",
        "metadata-collapse": "隱藏詳細資料",
        "metadata-fields": "在本訊息中所列出的 EXIF 詮釋資料域將包含在圖片顯示頁面,當詮釋資料表損壞時只顯示以下訊息。\n其他的詮釋資料預設為隱藏。\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
diff --git a/maintenance/archives/patch-image-user-index-2.sql b/maintenance/archives/patch-image-user-index-2.sql
new file mode 100644 (file)
index 0000000..8b19d82
--- /dev/null
@@ -0,0 +1 @@
+CREATE INDEX /*i*/img_user_timestamp ON /*_*/image (img_user,img_timestamp);
index a74d7bd..b44930f 100644 (file)
@@ -1,7 +1,7 @@
 --
 -- image-user-index.sql
 --
--- Add user/timestamp index to current image versions
+-- Add user_text/timestamp index to current image versions
 --
 
 ALTER TABLE /*$wgDBprefix*/image
index 17a8d2e..6279a34 100644 (file)
@@ -68,6 +68,7 @@ class CLIParser extends Maintenance {
                        false,
                        true
                );
+               $this->addOption( 'tidy', 'Tidy the output' );
                $this->addArg( 'file', 'File containing wikitext (Default: stdin)', false );
        }
 
@@ -127,10 +128,14 @@ class CLIParser extends Maintenance {
         * @return ParserOutput
         */
        protected function parse( $wikitext ) {
+               $options = new ParserOptions;
+               if ( $this->getOption( 'tidy' ) ) {
+                       $options->setTidy( true );
+               }
                return $this->parser->parse(
                        $wikitext,
                        $this->getTitle(),
-                       new ParserOptions()
+                       $options
                );
        }
 }
index 44922a4..8f59690 100644 (file)
@@ -899,6 +899,8 @@ CREATE TABLE /*_*/image (
   img_sha1 varbinary(32) NOT NULL default ''
 ) /*$wgDBTableOptions*/;
 
+-- Used by Special:Newimages and ApiQueryAllImages
+CREATE INDEX /*i*/img_user_timestamp ON /*_*/image (img_user,img_timestamp);
 CREATE INDEX /*i*/img_usertext_timestamp ON /*_*/image (img_user_text,img_timestamp);
 -- Used by Special:ListFiles for sort-by-size
 CREATE INDEX /*i*/img_size ON /*_*/image (img_size);
index 119d167..6d08c44 100644 (file)
@@ -1671,7 +1671,6 @@ return [
                'dependencies' => [
                        'jquery.accessKeyLabel',
                        'jquery.checkboxShiftClick',
-                       'jquery.makeCollapsible',
                        'jquery.placeholder',
                        'jquery.mw-jump',
                ],
diff --git a/resources/lib/jquery.ui/PATCHES b/resources/lib/jquery.ui/PATCHES
new file mode 100644 (file)
index 0000000..a8eba94
--- /dev/null
@@ -0,0 +1,26 @@
+jquery.ui.draggable.js
+* 71e11de2a3 Fix positioning error with draggable, revert and grid.
+             https://phabricator.wikimedia.org/T140965#2944610
+
+             https://bugs.jqueryui.com/ticket/4696
+
+
+jquery.ui.datepicker
+* 19531f3c23 Add translations in de-AT and de-CH
+
+
+themes/smoothness/jquery.ui.theme.css
+* 5e772e39dd Remove dark color from links inside dialogs
+             https://phabricator.wikimedia.org/T85857
+
+             Removed ".ui-widget-content a { color: #222222; }"
+             and ".ui-widget-header a { color: #222222; }"
+
+
+themes/smoothness/jquery.ui.core.css:
+* dc1c29f204 Collapse border in ui-helper-clearfix
+             https://phabricator.wikimedia.org/T73601
+
+             Backport of upstream change released in jQuery UI v1.10.1
+             - http://bugs.jqueryui.com/ticket/8442
+             - https://github.com/jquery/jquery-ui/commit/cb42ee7ccd
diff --git a/resources/lib/jquery.ui/themes/smoothness/PATCHES b/resources/lib/jquery.ui/themes/smoothness/PATCHES
deleted file mode 100644 (file)
index 53fbe1f..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-jquery.ui.theme.css
-* Removed ".ui-widget-content a { color: #222222; }" and
-  ".ui-widget-header a { color: #222222; }" due to bug T85857.
index b339371..5dfdede 100644 (file)
@@ -25,8 +25,7 @@
        var config = mw.config.get( [ 'wgAction', 'wgCurRevisionId' ] ),
                // This should match EditPage::POST_EDIT_COOKIE_KEY_PREFIX:
                cookieKey = 'PostEditRevision' + config.wgCurRevisionId,
-               cookieVal = mw.cookie.get( cookieKey ),
-               $div, id;
+               cookieVal, $div, id;
 
        function removeConfirmation() {
                $div.remove();
 
        mw.hook( 'postEdit' ).add( showConfirmation );
 
-       if ( config.wgAction === 'view' && cookieVal ) {
-               mw.config.set( 'wgPostEdit', true );
-
-               mw.hook( 'postEdit' ).fire( {
-                       // The following messages can be used here:
-                       // postedit-confirmation-saved
-                       // postedit-confirmation-created
-                       // postedit-confirmation-restored
-                       message: mw.msg(
-                               'postedit-confirmation-' + cookieVal,
-                               mw.user
-                       )
-               } );
-               mw.cookie.set( cookieKey, null );
+       // Only when viewing wiki pages, that exist
+       // (E.g. not on special pages or non-view actions)
+       if ( config.wgCurRevisionId && config.wgAction === 'view' ) {
+               cookieVal = mw.cookie.get( cookieKey );
+               if ( cookieVal ) {
+                       mw.config.set( 'wgPostEdit', true );
+
+                       mw.hook( 'postEdit' ).fire( {
+                               // The following messages can be used here:
+                               // postedit-confirmation-saved
+                               // postedit-confirmation-created
+                               // postedit-confirmation-restored
+                               message: mw.msg(
+                                       'postedit-confirmation-' + cookieVal,
+                                       mw.user
+                               )
+                       } );
+
+                       mw.cookie.set( cookieKey, null );
+               }
        }
 
 }( mediaWiki, jQuery ) );
index 970d140..5111a17 100644 (file)
@@ -6,7 +6,7 @@
        &-popup {
                // We have to override OOUI's definition, which is set
                // on the inline style of the popup
-               margin-top: 2.4em !important; /* stylelint-disable-line declaration-no-important */
+               margin-top: 2em !important; /* stylelint-disable-line declaration-no-important */
                max-width: 650px;
 
                .oo-ui-popupWidget-body {
index e914bbe..d786025 100644 (file)
         * Clean up the old-style show/hide that we have implemented in the filter list
         */
        mw.rcfilters.ui.FormWrapperWidget.prototype.cleanUpFieldset = function () {
-               var widget = this;
-
-               // HACK: Remove old-style filter links for filters handled by the widget
-               // Ideally the widget would handle all filters and we'd just remove .rcshowhide entirely
-               this.$element.find( '.rcshowhide' ).children().each( function () {
-                       // HACK: Interpret the class name to get the filter name
-                       // This should really be set as a data attribute
-                       var i,
-                               name = null,
-                               // Some of the older browsers we support don't have .classList,
-                               // so we have to interpret the class attribute manually.
-                               classes = this.getAttribute( 'class' ).split( ' ' );
-                       for ( i = 0; i < classes.length; i++ ) {
-                               if ( classes[ i ].substr( 0, 'rcshow'.length ) === 'rcshow' ) {
-                                       name = classes[ i ].substr( 'rcshow'.length );
-                                       break;
-                               }
-                       }
-                       if ( name === null ) {
-                               return;
-                       }
-                       if ( name === 'hidemine' ) {
-                               // HACK: the span for hidemyself is called hidemine
-                               name = 'hidemyself';
-                       }
-
-                       // This span corresponds to a filter that's in our model, so remove it
-                       if ( widget.filtersModel.getItemByName( name ) ) {
-                               // HACK: Remove the text node after the span.
-                               // If there isn't one, we're at the end, so remove the text node before the span.
-                               // This would be unnecessary if we added separators with CSS.
-                               if ( this.nextSibling && this.nextSibling.nodeType === Node.TEXT_NODE ) {
-                                       this.parentNode.removeChild( this.nextSibling );
-                               } else if ( this.previousSibling && this.previousSibling.nodeType === Node.TEXT_NODE ) {
-                                       this.parentNode.removeChild( this.previousSibling );
-                               }
-                               // Remove the span itself
-                               this.parentNode.removeChild( this );
+               this.$element.find( '.rcshowhideoption[data-feature-in-structured-ui=1]' ).each( function () {
+                       // HACK: Remove the text node after the span.
+                       // If there isn't one, we're at the end, so remove the text node before the span.
+                       // This would be unnecessary if we added separators with CSS.
+                       if ( this.nextSibling && this.nextSibling.nodeType === Node.TEXT_NODE ) {
+                               this.parentNode.removeChild( this.nextSibling );
+                       } else if ( this.previousSibling && this.previousSibling.nodeType === Node.TEXT_NODE ) {
+                               this.parentNode.removeChild( this.previousSibling );
                        }
+                       // Remove the span itself
+                       this.parentNode.removeChild( this );
                } );
        };
 }( mediaWiki ) );
index 04da3db..0b0f912 100644 (file)
@@ -1,16 +1,6 @@
 /* interwiki search results */
 /*==========================*/
 
-#mw-interwiki-results {
-       width: 30%;
-       display: inline-block;
-       margin-left: 10%;
-}
-
-.searchresults .mw-search-createlink {
-       float: left;
-}
-
 .iw-headline {
        font-weight: bold;
        font-size: 1rem;
@@ -187,37 +177,20 @@ to resemble a traditional dictionary definition */
        text-align: right;
 }
 
-/* no results
-span the interwiki results across the bottom of the page.
-*/
+/* desktop only */
 
-.mw-search-nonefound ~ #mw-search-interwiki {
-       width: 100%;
-}
+@media only screen and ( min-width: @deviceWidthTablet ) {
 
-.mw-search-nonefound ~ #mw-search-interwiki .iw-resultset {
-       width: 30%;
-       max-width: 300px;
-       margin-left: 0.5em;
-       margin-right: 0.5em;
-}
-
-/* mobile */
-/* stylelint-disable declaration-no-important */
-@media only screen and ( max-width: 768px ) {
        #mw-interwiki-results {
-               width: 100%;
-               margin-left: 0;
-       }
-       .mw-search-results {
-               max-width: none !important;
+               width: 30%;
+               display: inline-block; /* used to align iw sidebar with the top of the main search results*/
+               margin-left: 10%;
        }
-       .iw-resultset {
-               width: 100% !important;
-               margin-left: 0 !important;
-               margin-right: 0 !important;
-               max-width: none !important;
+       .searchresults .mw-search-createlink,
+       .searchresults .mw-search-nonefound,
+       .searchresults .mw-search-results {
+               float: left;
+               width: 60%;
        }
 
 }
-/* stylelint-enable declaration-no-important */
index 89f5132..72ede97 100644 (file)
@@ -32,9 +32,9 @@
 
 .mw-search-results {
        margin: 0;
-       float: left;
-       max-width: 60%;
+       max-width: 38em;
 }
+
 .mw-search-visualclear {
        clear: both;
 }
index 0ec6a4c..dd2ce2a 100644 (file)
@@ -56,7 +56,7 @@
         *     } );
         *
         * @class
-        * @extends OO.ui.InputWidget
+        * @extends OO.ui.TextInputWidget
         * @mixins OO.ui.mixin.IndicatorElement
         *
         * @constructor
 
                // Properties (must be set before parent constructor, which calls #setValue)
                this.$handle = $( '<div>' );
-               this.label = new OO.ui.LabelWidget();
+               this.innerLabel = new OO.ui.LabelWidget();
                this.textInput = new OO.ui.TextInputWidget( {
                        required: config.required,
                        placeholder: placeholderDateFormat,
                this.longDisplayFormat = config.longDisplayFormat;
                this.required = config.required;
                this.placeholderLabel = config.placeholderLabel;
-
                // Validate and set min and max dates as properties
+
                if ( config.mustBeAfter !== undefined ) {
                        mustBeAfter = moment( config.mustBeAfter, 'YYYY-MM-DD' );
                        if ( mustBeAfter.isValid() ) {
                                this.mustBeBefore = mustBeBefore;
                        }
                }
-
                // Parent constructor
                mw.widgets.DateInputWidget.parent.call( this, config );
 
                // Move 'tabindex' from this.$input (which is invisible) to the visible handle
                this.setTabIndexedElement( this.$handle );
                this.$handle
-                       .append( this.label.$element, this.$indicator )
+                       .append( this.innerLabel.$element, this.$indicator )
                        .addClass( 'mw-widget-dateInputWidget-handle' );
                this.calendar.$element
                        .addClass( 'mw-widget-dateInputWidget-calendar' );
 
        /* Inheritance */
 
-       OO.inheritClass( mw.widgets.DateInputWidget, OO.ui.InputWidget );
+       OO.inheritClass( mw.widgets.DateInputWidget, OO.ui.TextInputWidget );
        OO.mixinClass( mw.widgets.DateInputWidget, OO.ui.mixin.IndicatorElement );
 
        /* Methods */
                if ( this.getValue() === '' ) {
                        this.textInput.setValue( '' );
                        this.calendar.setDate( null );
-                       this.label.setLabel( this.placeholderLabel );
+                       this.innerLabel.setLabel( this.placeholderLabel );
                        this.$element.addClass( 'mw-widget-dateInputWidget-empty' );
                } else {
                        moment = this.getMoment();
                        if ( !this.inCalendar ) {
                                this.calendar.setDate( this.getValue() );
                        }
-                       this.label.setLabel( moment.format( this.getDisplayFormat() ) );
+                       this.innerLabel.setLabel( moment.format( this.getDisplayFormat() ) );
                        this.$element.removeClass( 'mw-widget-dateInputWidget-empty' );
                }
        };
index 8ba9a99..cad2b02 100644 (file)
 @indicator-size: unit( 12 / 16 / 0.8, em );
 
 .mw-widget-dateInputWidget {
-       display: inline-block;
-       position: relative;
-       width: 21em;
-       margin-top: 0.25em;
-       .oo-ui-inline-spacing( 0.5em );
-       margin-bottom: 0.25em;
-       margin-left: 0;
-
-       &-handle {
+       &.oo-ui-textInputWidget {
+               display: inline-block;
+               position: relative;
+               width: 21em;
+               margin-top: 0.25em;
+               .oo-ui-inline-spacing( 0.5em );
+               margin-bottom: 0.25em;
+               margin-left: 0;
+       }
+
+       &-handle,
+       &.oo-ui-textInputWidget input {
                background-color: #fff;
                display: inline-block;
                position: relative;
                border-radius: 2px;
                outline: 0;
                line-height: 1.275;
+               /**
+                * Ensures non-infused and infused widget have the same height.
+                * Equal to line height + top padding + bottom padding
+                */
+               height: 2.275em;
 
                > .oo-ui-labelElement-label {
                        padding: 0;
index 0a73bef..7880b55 100755 (executable)
@@ -30,7 +30,6 @@
                var $form = config.$input ? config.$input.closest( 'form' ) : $();
 
                config = $.extend( {
-                       type: 'search',
                        icon: 'search',
                        maxLength: undefined,
                        performSearchOnClick: true,
                                )
                        } );
                }.bind( this ) );
+
+               this.$element.addClass( 'oo-ui-textInputWidget-type-search' );
+               this.updateSearchIndicator();
+               this.connect( this, {
+                       disable: 'onDisable'
+               } );
        };
 
        /* Setup */
 
        /* Methods */
 
+       /**
+        * @inheritdoc
+        * @protected
+        */
+       mw.widgets.SearchInputWidget.prototype.getInputElement = function () {
+               return $( '<input>' ).attr( 'type', 'search' );
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.SearchInputWidget.prototype.onIndicatorMouseDown = function ( e ) {
+               if ( e.which === OO.ui.MouseButtons.LEFT ) {
+                       // Clear the text field
+                       this.setValue( '' );
+                       this.$input[ 0 ].focus();
+                       return false;
+               }
+       };
+
+       /**
+        * Update the 'clear' indicator displayed on type: 'search' text
+        * fields, hiding it when the field is already empty or when it's not
+        * editable.
+        */
+       mw.widgets.SearchInputWidget.prototype.updateSearchIndicator = function () {
+               if ( this.getValue() === '' || this.isDisabled() || this.isReadOnly() ) {
+                       this.setIndicator( null );
+               } else {
+                       this.setIndicator( 'clear' );
+               }
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.SearchInputWidget.prototype.onChange = function () {
+               mw.widgets.SearchInputWidget.parent.prototype.onChange.call( this );
+               this.updateSearchIndicator();
+       };
+
+       /**
+        * Handle disable events.
+        *
+        * @param {boolean} disabled Element is disabled
+        * @private
+        */
+       mw.widgets.SearchInputWidget.prototype.onDisable = function () {
+               this.updateSearchIndicator();
+       };
+
+       /**
+        * @inheritdoc
+        */
+       mw.widgets.SearchInputWidget.prototype.setReadOnly = function ( state ) {
+               mw.widgets.SearchInputWidget.parent.prototype.setReadOnly.call( this, state );
+               this.updateSearchIndicator();
+               return this;
+       };
+
        /**
         * @inheritdoc mw.widgets.TitleWidget
         */
index 33f146b..c2cee7e 100644 (file)
                /* eslint-enable no-bitwise */
        }
 
-       // <https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Set>
-       StringSet = window.Set || ( function () {
-               /**
-                * @private
-                * @class
-                */
-               function StringSet() {
-                       this.set = {};
-               }
-               StringSet.prototype.add = function ( value ) {
-                       this.set[ value ] = true;
-               };
-               StringSet.prototype.has = function ( value ) {
-                       return hasOwn.call( this.set, value );
-               };
-               return StringSet;
-       }() );
+       function defineFallbacks() {
+               // <https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Set>
+               StringSet = window.Set || ( function () {
+                       /**
+                        * @private
+                        * @class
+                        */
+                       function StringSet() {
+                               this.set = {};
+                       }
+                       StringSet.prototype.add = function ( value ) {
+                               this.set[ value ] = true;
+                       };
+                       StringSet.prototype.has = function ( value ) {
+                               return hasOwn.call( this.set, value );
+                       };
+                       return StringSet;
+               }() );
+       }
 
        /**
         * Create an object that can be read from or written to via methods that allow
                }
        };
 
+       defineFallbacks();
+
        /* eslint-disable no-console */
        log = ( function () {
                // Also update the restoration of methods in mediawiki.log.js
         * @class mw
         */
        mw = {
+               redefineFallbacksForTest: function () {
+                       if ( !window.QUnit ) {
+                               throw new Error( 'Reset not allowed outside unit tests' );
+                       }
+                       defineFallbacks();
+               },
 
                /**
                 * Get the current time, measured in milliseconds since January 1, 1970 (UTC).
index d228f3e..f11bbde 100644 (file)
        }
 
        mw.hook( 'wikipage.content' ).add( function ( $content ) {
-               var $sortableTables;
+               var $sortable, $collapsible;
 
                // Run jquery.placeholder polyfill if placeholder is not supported
                if ( !supportsPlaceholder ) {
                        $content.find( 'input[placeholder]' ).placeholder();
                }
 
-               // Run jquery.makeCollapsible
-               $content.find( '.mw-collapsible' ).makeCollapsible();
+               $collapsible = $content.find( '.mw-collapsible' );
+               if ( $collapsible.length ) {
+                       // Preloaded by Skin::getDefaultModules()
+                       mw.loader.using( 'jquery.makeCollapsible', function () {
+                               $collapsible.makeCollapsible();
+                       } );
+               }
 
-               // Lazy load jquery.tablesorter
-               $sortableTables = $content.find( 'table.sortable' );
-               if ( $sortableTables.length ) {
+               $sortable = $content.find( 'table.sortable' );
+               if ( $sortable.length ) {
+                       // Preloaded by Skin::getDefaultModules()
                        mw.loader.using( 'jquery.tablesorter', function () {
-                               $sortableTables.tablesorter();
+                               $sortable.tablesorter();
                        } );
                }
 
index ebd3c53..2a4c43f 100644 (file)
@@ -160,6 +160,8 @@ $wgAutoloadClasses += [
        'MockDjVuHandler' => "$testDir/phpunit/mocks/media/MockDjVuHandler.php",
        'MockOggHandler' => "$testDir/phpunit/mocks/media/MockOggHandler.php",
        'MockMediaHandlerFactory' => "$testDir/phpunit/mocks/media/MockMediaHandlerFactory.php",
+       'MockChangesListFilter' => "$testDir/phpunit/mocks/MockChangesListFilter.php",
+       'MockChangesListFilterGroup' => "$testDir/phpunit/mocks/MockChangesListFilterGroup.php",
        'MockWebRequest' => "$testDir/phpunit/mocks/MockWebRequest.php",
        'MediaWiki\\Session\\DummySessionBackend'
                => "$testDir/phpunit/mocks/session/DummySessionBackend.php",
index 469f45a..2bd9086 100644 (file)
@@ -51,6 +51,43 @@ class TemplateParserTest extends MediaWikiTestCase {
                                false,
                                'UnexpectedValueException'
                        ],
+                       [
+                               "\000../foobar",
+                               [],
+                               false,
+                               'UnexpectedValueException'
+                       ],
+                       [
+                               '/',
+                               [],
+                               false,
+                               'UnexpectedValueException'
+                       ],
+                       [
+                               // Allegedly this can strip ext in windows.
+                               'baz<',
+                               [],
+                               false,
+                               'UnexpectedValueException'
+                       ],
+                       [
+                               '\\foo',
+                               [],
+                               false,
+                               'UnexpectedValueException'
+                       ],
+                       [
+                               'C:\bar',
+                               [],
+                               false,
+                               'UnexpectedValueException'
+                       ],
+                       [
+                               "foo\000bar",
+                               [],
+                               false,
+                               'UnexpectedValueException'
+                       ],
                        [
                                'nonexistenttemplate',
                                [],
index 0db3a49..d98311f 100644 (file)
@@ -19,33 +19,6 @@ class ChangesListBooleanFilterGroupTest extends MediaWikiTestCase {
                );
        }
 
-       public function testAutoPriorities() {
-               $group = new ChangesListBooleanFilterGroup( [
-                       'name' => 'groupName',
-                       'priority' => 1,
-                       'filters' => [
-                               [ 'name' => 'hidefoo', 'default' => false, ],
-                               [ 'name' => 'hidebar', 'default' => false, ],
-                               [ 'name' => 'hidebaz', 'default' => false, ],
-                       ],
-               ] );
-
-               $filters = $group->getFilters();
-               $this->assertEquals(
-                       [
-                               -2,
-                               -3,
-                               -4,
-                       ],
-                       array_map(
-                               function ( $f ) {
-                                       return $f->getPriority();
-                               },
-                               array_values( $filters )
-                       )
-               );
-       }
-
        public function testGetJsData() {
                $definition = [
                        'name' => 'some-group',
index c715988..2c0c22d 100644 (file)
@@ -107,58 +107,6 @@ class ChangesListBooleanFilterTest extends MediaWikiTestCase {
                );
        }
 
-       /**
-        * @expectedException MWException
-        * @expectedExceptionMessage Supersets can only be defined for filters in the same group
-        */
-       public function testSetAsSupersetOf() {
-               $groupA = new ChangesListBooleanFilterGroup( [
-                       'name' => 'groupA',
-                       'priority' => 2,
-                       'filters' => [
-                               [
-                                       'name' => 'foo',
-                                       'default' => false,
-                               ],
-                               [
-                                       'name' => 'bar',
-                                       'default' => false,
-                               ]
-                       ],
-               ] );
-
-               $groupB = new ChangesListBooleanFilterGroup( [
-                       'name' => 'groupB',
-                       'priority' => 3,
-                       'filters' => [
-                               [
-                                       'name' => 'baz',
-                                       'default' => true,
-                               ],
-                       ],
-               ] );
-
-               $foo = TestingAccessWrapper::newFromObject( $groupA->getFilter( 'foo' ) );
-
-               $bar = $groupA->getFilter( 'bar' );
-
-               $baz = $groupB->getFilter( 'baz' );
-
-               $foo->setAsSupersetOf( $bar );
-               $this->assertArrayEquals( [
-                               [
-                                       'group' => 'groupA',
-                                       'filter' => 'bar',
-                               ],
-                       ],
-                       $foo->subsetFilters,
-                       /** ordered= */ false,
-                       /** named= */ true
-               );
-
-               $foo->setAsSupersetOf( $baz, 'some-message' );
-       }
-
        public function testIsFeatureAvailableOnStructuredUi() {
                $specialPage = $this->getMockBuilder( 'ChangesListSpecialPage' )
                        ->setConstructorArgs( [
diff --git a/tests/phpunit/includes/changes/ChangesListFilterGroupTest.php b/tests/phpunit/includes/changes/ChangesListFilterGroupTest.php
new file mode 100644 (file)
index 0000000..f712a2f
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+
+/**
+ * @covers ChangesListFilterGroup
+ */
+class ChangesListFilterGroupTest extends MediaWikiTestCase {
+       // @codingStandardsIgnoreStart
+       /**
+        * @expectedException MWException
+        * @expectedExceptionMessage Group names may not contain '_'.  Use the naming convention: 'camelCase'
+        */
+       // @codingStandardsIgnoreEnd
+       public function testReservedCharacter() {
+               new MockChangesListFilterGroup(
+                       [
+                               'type' => 'some_type',
+                               'name' => 'group_name',
+                               'priority' => 1,
+                               'filters' => [],
+                       ]
+               );
+       }
+
+       public function testAutoPriorities() {
+               $group = new MockChangesListFilterGroup(
+                       [
+                               'type' => 'some_type',
+                               'name' => 'groupName',
+                               'isFullCoverage' => true,
+                               'priority' => 1,
+                               'filters' => [
+                                       [ 'name' => 'hidefoo' ],
+                                       [ 'name' => 'hidebar' ],
+                                       [ 'name' => 'hidebaz' ],
+                               ],
+                       ]
+               );
+
+               $filters = $group->getFilters();
+               $this->assertEquals(
+                       [
+                               -2,
+                               -3,
+                               -4,
+                       ],
+                       array_map(
+                               function ( $f ) {
+                                       return $f->getPriority();
+                               },
+                               array_values( $filters )
+                       )
+               );
+       }
+}
diff --git a/tests/phpunit/includes/changes/ChangesListFilterTest.php b/tests/phpunit/includes/changes/ChangesListFilterTest.php
new file mode 100644 (file)
index 0000000..c212560
--- /dev/null
@@ -0,0 +1,93 @@
+<?php
+
+/**
+ * @covers ChangesListFilter
+ */
+class ChangesListFilterTest extends MediaWikiTestCase {
+       protected $group;
+
+       public function setUp() {
+               $this->group = $this->getGroup( [ 'name' => 'group' ] );
+
+               parent::setUp();
+       }
+
+       protected function getGroup( $groupDefinition ) {
+               return new MockChangesListFilterGroup(
+                       $groupDefinition + [
+                               'isFullCoverage' => true,
+                               'type' => 'some_type',
+                               'name' => 'group',
+                               'filters' => [],
+                       ]
+               );
+
+       }
+
+       // @codingStandardsIgnoreStart
+       /**
+        * @expectedException MWException
+        * @expectedExceptionMessage Filter names may not contain '_'.  Use the naming convention: 'lowercase'
+        */
+       // @codingStandardsIgnoreEnd
+       public function testReservedCharacter() {
+               $filter = new MockChangesListFilter(
+                       [
+                               'group' => $this->group,
+                               'name' => 'some_name',
+                               'priority' => 1,
+                       ]
+               );
+       }
+
+       /**
+        * @expectedException MWException
+        * @expectedExceptionMessage Supersets can only be defined for filters in the same group
+        */
+       public function testSetAsSupersetOf() {
+               $groupA = $this->getGroup(
+                       [
+                               'name' => 'groupA',
+                               'filters' => [
+                                       [
+                                               'name' => 'foo',
+                                       ],
+                                       [
+                                               'name' => 'bar',
+                                       ]
+                               ],
+                       ]
+               );
+
+               $groupB =  $this->getGroup(
+                       [
+                               'name' => 'groupB',
+                               'filters' => [
+                                       [
+                                               'name' => 'baz',
+                                       ],
+                               ],
+                       ]
+               );
+
+               $foo = TestingAccessWrapper::newFromObject( $groupA->getFilter( 'foo' ) );
+
+               $bar = $groupA->getFilter( 'bar' );
+
+               $baz = $groupB->getFilter( 'baz' );
+
+               $foo->setAsSupersetOf( $bar );
+               $this->assertArrayEquals( [
+                               [
+                                       'group' => 'groupA',
+                                       'filter' => 'bar',
+                               ],
+                       ],
+                       $foo->subsetFilters,
+                       /** ordered= */ false,
+                       /** named= */ true
+               );
+
+               $foo->setAsSupersetOf( $baz );
+       }
+}
index a5a1b7a..6b12229 100644 (file)
@@ -46,7 +46,7 @@ class SearchIndexFieldTest extends MediaWikiTestCase {
                $this->assertFalse( $field1->merge( $field2 ) );
 
                $field1->setMergeCallback(
-                       function ( $this, $that ) {
+                       function ( $a, $b ) {
                                return "test";
                        }
                );
diff --git a/tests/phpunit/mocks/MockChangesListFilter.php b/tests/phpunit/mocks/MockChangesListFilter.php
new file mode 100644 (file)
index 0000000..cbf306e
--- /dev/null
@@ -0,0 +1,11 @@
+<?php
+
+class MockChangesListFilter extends ChangesListFilter {
+       public function displaysOnUnstructuredUi( ChangesListSpecialPage $specialPage ) {
+               throw new MWException(
+                       'Not implemented: If the test relies on this, put it one of the ' .
+                       'subclasses\' tests (e.g. ChangesListBooleanFilterTest) ' .
+                       'instead of testing the abstract class'
+               );
+       }
+}
diff --git a/tests/phpunit/mocks/MockChangesListFilterGroup.php b/tests/phpunit/mocks/MockChangesListFilterGroup.php
new file mode 100644 (file)
index 0000000..f2891ce
--- /dev/null
@@ -0,0 +1,19 @@
+<?php
+
+class MockChangesListFilterGroup extends ChangesListFilterGroup {
+       public function createFilter( array $filterDefinition ) {
+               return new MockChangesListFilter( $filterDefinition );
+       }
+
+       public function registerFilter( MockChangesListFilter $filter ) {
+               $this->filters[$filter->getName()] = $filter;
+       }
+
+       public function isPerGroupRequestParameter() {
+               throw new MWException(
+                       'Not implemented: If the test relies on this, put it one of the ' .
+                       'subclasses\' tests (e.g. ChangesListBooleanFilterGroupTest) ' .
+                       'instead of testing the abstract class'
+               );
+       }
+}
index 6f9af76..477b04d 100644 (file)
@@ -5,6 +5,11 @@
                },
                teardown: function () {
                        mw.loader.store.enabled = false;
+                       // Teardown for StringSet shim test
+                       if ( this.nativeSet ) {
+                               window.Set = this.nativeSet;
+                               mw.redefineFallbacksForTest();
+                       }
                }
        } ) );
 
                } );
        } );
 
-       QUnit.test( '.using() Error: Circular dependency', function ( assert ) {
+       // Covers mw.loader#sortDependencies (with native Set if available)
+       QUnit.test( '.using() Error: Circular dependency [StringSet default]', function ( assert ) {
                var done = assert.async();
 
                mw.loader.register( [
                .always( done );
        } );
 
+       // @covers mw.loader#sortDependencies (with fallback shim)
+       QUnit.test( '.using() Error: Circular dependency [StringSet shim]', function ( assert ) {
+               var done = assert.async();
+
+               if ( !window.Set ) {
+                       assert.expect( 0 );
+                       done();
+                       return;
+               }
+
+               this.nativeSet = window.Set;
+               window.Set = undefined;
+               mw.redefineFallbacksForTest();
+
+               mw.loader.register( [
+                       [ 'test.shim.circle1', '0', [ 'test.shim.circle2' ] ],
+                       [ 'test.shim.circle2', '0', [ 'test.shim.circle3' ] ],
+                       [ 'test.shim.circle3', '0', [ 'test.shim.circle1' ] ]
+               ] );
+               mw.loader.using( 'test.shim.circle3' ).then(
+                       function done() {
+                               assert.ok( false, 'Unexpected resolution, expected error.' );
+                       },
+                       function fail( e ) {
+                               assert.ok( /Circular/.test( String( e ) ), 'Detect circular dependency' );
+                       }
+               )
+               .always( done );
+       } );
+
        QUnit.test( '.load() - Error: Circular dependency', function ( assert ) {
                mw.loader.register( [
                        [ 'test.circleA', '0', [ 'test.circleB' ] ],