Merge "Add new rules when user is blocked for UTP"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 11 Dec 2018 13:18:14 +0000 (13:18 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 11 Dec 2018 13:18:14 +0000 (13:18 +0000)
150 files changed:
.travis.yml
RELEASE-NOTES-1.33
autoload.php
composer.json
docs/hooks.txt
includes/EditPage.php
includes/GlobalFunctions.php
includes/Linker.php
includes/MovePage.php
includes/OutputPage.php
includes/Title.php
includes/api/ApiComparePages.php
includes/api/i18n/ar.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/fr.json
includes/api/i18n/mk.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/api/i18n/qqq.json
includes/api/i18n/zh-hant.json
includes/cache/LinkCache.php
includes/db/DatabaseOracle.php
includes/debug/logger/LegacyLogger.php
includes/debug/logger/monolog/CeeFormatter.php [new file with mode: 0644]
includes/filerepo/file/LocalFile.php
includes/htmlform/fields/HTMLTitlesMultiselectField.php
includes/http/GuzzleHttpRequest.php [new file with mode: 0644]
includes/http/HttpRequestFactory.php
includes/http/MWHttpRequest.php
includes/installer/PostgresUpdater.php
includes/installer/i18n/da.json
includes/jobqueue/jobs/CategoryMembershipChangeJob.php
includes/libs/filebackend/FileBackendStore.php
includes/libs/filebackend/SwiftFileBackend.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/DatabasePostgres.php
includes/libs/redis/RedisConnRef.php
includes/objectcache/SqlBagOStuff.php
includes/page/ImagePage.php
includes/parser/BlockLevelPass.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/preferences/DefaultPreferencesFactory.php
includes/resourceloader/ResourceLoaderContext.php
includes/search/SearchEngine.php
includes/search/SearchHighlighter.php
includes/site/SiteSQLStore.php
includes/skins/Skin.php
includes/sparql/SparqlClient.php
includes/specialpage/AuthManagerSpecialPage.php
includes/specials/SpecialBlock.php
includes/specials/SpecialLockdb.php
includes/specials/SpecialMovepage.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialUnusedimages.php
includes/specials/SpecialWhatlinkshere.php
includes/specials/pagers/AllMessagesTablePager.php
includes/specials/pagers/ContribsPager.php
includes/title/MediaWikiTitleCodec.php
includes/upload/UploadBase.php
includes/user/User.php
includes/widget/TitlesMultiselectWidget.php
languages/Language.php
languages/classes/LanguageKk_cyrl.php
languages/classes/LanguageTyv.php
languages/data/ZhConversion.php
languages/i18n/ar.json
languages/i18n/azb.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cs.json
languages/i18n/da.json
languages/i18n/de-formal.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/el.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/frr.json
languages/i18n/gcr.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/ig.json
languages/i18n/io.json
languages/i18n/it.json
languages/i18n/kiu.json
languages/i18n/kjp.json
languages/i18n/ko.json
languages/i18n/mai.json
languages/i18n/mk.json
languages/i18n/nap.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pl.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/rue.json
languages/i18n/shn.json
languages/i18n/sk.json
languages/i18n/skr-arab.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/szl.json
languages/i18n/th.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/yi.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/createAndPromote.php
maintenance/language/generateCollationData.php
maintenance/language/generateNormalizerDataAr.php
maintenance/language/zhtable/simp2trad.manual
maintenance/language/zhtable/toCN.manual
maintenance/language/zhtable/toHK.manual
maintenance/language/zhtable/toSimp.manual
maintenance/language/zhtable/toTW.manual
maintenance/language/zhtable/toTrad.manual
maintenance/language/zhtable/trad2simp.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/pruneFileCache.php
maintenance/rebuildFileCache.php
maintenance/storage/compressOld.php
resources/Resources.php
resources/src/mediawiki.special.contributions.js
resources/src/mediawiki.special.pageLanguage.js
resources/src/mediawiki.special.search/search.js
tests/parser/TestFileReader.php
tests/phpunit/includes/RevisionTest.php
tests/phpunit/includes/Storage/SqlBlobStoreTest.php
tests/phpunit/includes/api/ApiComparePagesTest.php
tests/phpunit/includes/debug/logger/monolog/CeeFormatterTest.php [new file with mode: 0644]
tests/phpunit/includes/http/HttpTest.php
tests/phpunit/includes/search/SearchResultSetTest.php
tests/phpunit/includes/specialpage/ChangesListSpecialPageTest.php
tests/phpunit/includes/specials/SpecialBlockTest.php
tests/phpunit/suites/ParserTestTopLevelSuite.php
tests/selenium/pageobjects/edit.page.js
tests/selenium/specs/page.js

index b28861d..4260c46 100644 (file)
@@ -17,6 +17,18 @@ sudo: false
 # - Required for non-buggy xml library for XmlTypeCheck/UploadBaseTest (T75176).
 dist: trusty
 
+git:
+  depth: 3
+  quiet: true
+
+# Cache NPM and Composer directories
+# <https://docs.travis-ci.com/user/caching/>
+cache:
+  npm: true
+  directories:
+  # Composer doesn't have a dedicated cache setting in Travis CI config, so set the directory path instead.
+  - vendor
+
 matrix:
   fast_finish: true
   include:
index 1bee855..f68875b 100644 (file)
@@ -34,7 +34,6 @@ production.
 * …
 
 === New features in 1.33 ===
-* The 'GetPreferences' hook now receives an additional $context parameter.
 * (T96041) __EXPECTUNUSEDCATEGORY__ on a category page causes the category
   to be hidden on Special:UnusedCategories.
 * Add PasswordPolicy to check the password isn't in the large blacklist.
@@ -45,6 +44,11 @@ production.
 ==== New external libraries ====
 * Added wikimedia/password-blacklist 0.1.4.
 * …
+* Added guzzlehttp/guzzle 6.3.3 and dependents:
+  * guzzlehttp/promises 1.3.1
+  * guzzlehttp/psr7 1.5.0
+  * psr/http-message 1.0.1
+  * ralouphie/getallheaders 2.0.5
 
 ==== Changed external libraries ====
 * Updated wikimedia/xmp-reader from 0.6.0 to 0.6.1.
@@ -161,6 +165,7 @@ because of Phabricator reports.
   * filterTimezoneInput()
   * getTimeZoneList()
 * mw.util.jsMessage(), deprecated in 1.20, was removed. Use mw.notify instead.
+* (T61113) User::EDIT_TOKEN_SUFFIX was removed. It was deprecated since 1.27.
 
 === Deprecations in 1.33 ===
 * The configuration option $wgUseESI has been deprecated, and is expected
index ba5ff7a..c411948 100644 (file)
@@ -571,6 +571,7 @@ $wgAutoloadLocalClasses = [
        'GitInfo' => __DIR__ . '/includes/GitInfo.php',
        'GlobalDependency' => __DIR__ . '/includes/cache/CacheDependency.php',
        'GlobalVarConfig' => __DIR__ . '/includes/config/GlobalVarConfig.php',
+       'GuzzleHttpRequest' => __DIR__ . '/includes/http/GuzzleHttpRequest.php',
        'HHVMMakeRepo' => __DIR__ . '/maintenance/hhvm/makeRepo.php',
        'HTMLApiField' => __DIR__ . '/includes/htmlform/fields/HTMLApiField.php',
        'HTMLAutoCompleteSelectField' => __DIR__ . '/includes/htmlform/fields/HTMLAutoCompleteSelectField.php',
@@ -886,6 +887,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Logger\\MonologSpi' => __DIR__ . '/includes/debug/logger/MonologSpi.php',
        'MediaWiki\\Logger\\Monolog\\AvroFormatter' => __DIR__ . '/includes/debug/logger/monolog/AvroFormatter.php',
        'MediaWiki\\Logger\\Monolog\\BufferHandler' => __DIR__ . '/includes/debug/logger/monolog/BufferHandler.php',
+       'MediaWiki\\Logger\\Monolog\\CeeFormatter' => __DIR__ . '/includes/debug/logger/monolog/CeeFormatter.php',
        'MediaWiki\\Logger\\Monolog\\KafkaHandler' => __DIR__ . '/includes/debug/logger/monolog/KafkaHandler.php',
        'MediaWiki\\Logger\\Monolog\\LegacyFormatter' => __DIR__ . '/includes/debug/logger/monolog/LegacyFormatter.php',
        'MediaWiki\\Logger\\Monolog\\LegacyHandler' => __DIR__ . '/includes/debug/logger/monolog/LegacyHandler.php',
index bf3a101..08b0e01 100644 (file)
                "ext-json": "*",
                "ext-mbstring": "*",
                "ext-xml": "*",
+               "guzzlehttp/guzzle": "6.3.3",
+               "guzzlehttp/promises": "1.3.1",
+               "guzzlehttp/psr7": "1.5.0",
                "liuggio/statsd-php-client": "1.0.18",
                "oojs/oojs-ui": "0.29.6",
                "pear/mail": "1.4.1",
                "pear/mail_mime": "1.10.2",
                "pear/net_smtp": "1.8.0",
                "php": ">=5.6.99",
+               "psr/http-message": "1.0.1",
                "psr/log": "1.0.2",
+               "ralouphie/getallheaders": "2.0.5",
                "wikimedia/assert": "0.2.2",
                "wikimedia/at-ease": "1.2.0",
                "wikimedia/base-convert": "2.0.0",
index 2f800a4..a7ff453 100644 (file)
@@ -1735,7 +1735,6 @@ $out: OutputPage object (to check what type of page the user is on)
 'GetPreferences': Modify user preferences.
 $user: User whose preferences are being modified.
 &$preferences: Preferences description array, to be fed to an HTMLForm object
-$context: IContextSource object (added in 1.33)
 
 'GetRelativeTimestamp': Pre-emptively override the relative timestamp generated
 by MWTimestamp::getRelativeTimestamp(). Return false in this hook to use the
index 400ea47..4599564 100644 (file)
@@ -689,7 +689,7 @@ class EditPage {
                # that edit() already checked just in case someone tries to sneak
                # in the back door with a hand-edited submission URL.
 
-               if ( 'save' == $this->formtype ) {
+               if ( $this->formtype == 'save' ) {
                        $resultDetails = null;
                        $status = $this->attemptSave( $resultDetails );
                        if ( !$this->handleStatus( $status, $resultDetails ) ) {
@@ -699,7 +699,7 @@ class EditPage {
 
                # First time through: get contents, set time for conflict
                # checking, etc.
-               if ( 'initial' == $this->formtype || $this->firsttime ) {
+               if ( $this->formtype == 'initial' || $this->firsttime ) {
                        if ( $this->initialiseForm() === false ) {
                                $out = $this->context->getOutput();
                                if ( $out->getRedirect() === '' ) { // mcrundo hack redirects, don't override it
@@ -2863,7 +2863,7 @@ ERROR;
                // Put these up at the top to ensure they aren't lost on early form submission
                $this->showFormBeforeText();
 
-               if ( $this->wasDeletedSinceLastEdit() && 'save' == $this->formtype ) {
+               if ( $this->wasDeletedSinceLastEdit() && $this->formtype == 'save' ) {
                        $username = $this->lastDelete->user_name;
                        $comment = CommentStore::getStore()
                                ->getComment( 'log_comment', $this->lastDelete )->text;
index 26c4d0a..a5f4def 100644 (file)
@@ -471,7 +471,7 @@ function wfAppendQuery( $url, $query ) {
                }
 
                // Add parameter
-               if ( false === strpos( $url, '?' ) ) {
+               if ( strpos( $url, '?' ) === false ) {
                        $url .= '?';
                } else {
                        $url .= '&';
index 2028197..731317e 100644 (file)
@@ -227,7 +227,7 @@ class Linker {
         */
        private static function fnamePart( $url ) {
                $basename = strrchr( $url, '/' );
-               if ( false === $basename ) {
+               if ( $basename === false ) {
                        $basename = $url;
                } else {
                        $basename = substr( $basename, 1 );
@@ -334,7 +334,7 @@ class Linker {
 
                $prefix = $postfix = '';
 
-               if ( 'center' == $frameParams['align'] ) {
+               if ( $frameParams['align'] == 'center' ) {
                        $prefix = '<div class="center">';
                        $postfix = '</div>';
                        $frameParams['align'] = 'none';
@@ -916,7 +916,7 @@ class Linker {
                $userId, $userText, $redContribsWhenNoEdits = false, $flags = 0, $edits = null
        ) {
                global $wgUser, $wgDisableAnonTalk, $wgLang;
-               $talkable = !( $wgDisableAnonTalk && 0 == $userId );
+               $talkable = !( $wgDisableAnonTalk && $userId == 0 );
                $blockable = !( $flags & self::TOOL_LINKS_NOBLOCK );
                $addEmailLink = $flags & self::TOOL_LINKS_EMAIL && $userId;
 
index bb76395..7d27a27 100644 (file)
@@ -249,23 +249,7 @@ class MovePage {
                        return $status;
                }
 
-               // If it is a file, move it first.
-               // It is done before all other moving stuff is done because it's hard to revert.
                $dbw = wfGetDB( DB_MASTER );
-               if ( $this->oldTitle->getNamespace() == NS_FILE ) {
-                       $file = wfLocalFile( $this->oldTitle );
-                       $file->load( File::READ_LATEST );
-                       if ( $file->exists() ) {
-                               $status = $file->move( $this->newTitle );
-                               if ( !$status->isOK() ) {
-                                       return $status;
-                               }
-                       }
-                       // Clear RepoGroup process cache
-                       RepoGroup::singleton()->clearCache( $this->oldTitle );
-                       RepoGroup::singleton()->clearCache( $this->newTitle ); # clear false negative cache
-               }
-
                $dbw->startAtomic( __METHOD__ );
 
                Hooks::run( 'TitleMoveStarting', [ $this->oldTitle, $this->newTitle, $user ] );
@@ -394,6 +378,16 @@ class MovePage {
                        $store->duplicateAllAssociatedEntries( $this->oldTitle, $this->newTitle );
                }
 
+               // If it is a file then move it last.
+               // This is done after all database changes so that file system errors cancel the transaction.
+               if ( $this->oldTitle->getNamespace() == NS_FILE ) {
+                       $status = $this->moveFile( $this->oldTitle, $this->newTitle );
+                       if ( !$status->isOK() ) {
+                               $dbw->cancelAtomic( __METHOD__ );
+                               return $status;
+                       }
+               }
+
                Hooks::run(
                        'TitleMoveCompleting',
                        [ $this->oldTitle, $this->newTitle,
@@ -427,6 +421,33 @@ class MovePage {
                return Status::newGood();
        }
 
+       /**
+        * Move a file associated with a page to a new location.
+        * Can also be used to revert after a DB failure.
+        *
+        * @access private
+        * @param Title Old location to move the file from.
+        * @param Title New location to move the file to.
+        * @return Status
+        */
+       private function moveFile( $oldTitle, $newTitle ) {
+               $status = Status::newFatal(
+                       'cannotdelete',
+                       $oldTitle->getPrefixedText()
+               );
+
+               $file = wfLocalFile( $oldTitle );
+               $file->load( File::READ_LATEST );
+               if ( $file->exists() ) {
+                       $status = $file->move( $newTitle );
+               }
+
+               // Clear RepoGroup process cache
+               RepoGroup::singleton()->clearCache( $oldTitle );
+               RepoGroup::singleton()->clearCache( $newTitle ); # clear false negative cache
+               return $status;
+       }
+
        /**
         * Move page to a title which is either a redirect to the
         * source page or nonexistent
index 2423315..02e13e7 100644 (file)
@@ -2847,16 +2847,18 @@ class OutputPage extends ContextSource {
                                        $query['returntoquery'] = wfArrayToCgi( $returntoquery );
                                }
                        }
+                       $title = SpecialPage::getTitleFor( 'Userlogin' );
                        $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+                       $loginUrl = $title->getLinkURL( $query, false, PROTO_RELATIVE );
                        $loginLink = $linkRenderer->makeKnownLink(
-                               SpecialPage::getTitleFor( 'Userlogin' ),
+                               $title,
                                $this->msg( 'loginreqlink' )->text(),
                                [],
                                $query
                        );
 
                        $this->prepareErrorPage( $this->msg( 'loginreqtitle' ) );
-                       $this->addHTML( $this->msg( $msg )->rawParams( $loginLink )->parse() );
+                       $this->addHTML( $this->msg( $msg )->rawParams( $loginLink )->params( $loginUrl )->parse() );
 
                        # Don't return to a page the user can't read otherwise
                        # we'll end up in a pointless loop
index 8b4075b..972d5b1 100644 (file)
@@ -1661,7 +1661,7 @@ class Title implements LinkTarget {
                        $p = $this->mInterwiki . ':';
                }
 
-               if ( 0 != $this->mNamespace ) {
+               if ( $this->mNamespace != 0 ) {
                        $nsText = $this->getNsText();
 
                        if ( $nsText === false ) {
@@ -3573,7 +3573,7 @@ class Title implements LinkTarget {
                        $this->mArticleID = $linkCache->addLinkObj( $this );
                        $linkCache->forUpdate( $oldUpdate );
                } else {
-                       if ( -1 == $this->mArticleID ) {
+                       if ( $this->mArticleID == -1 ) {
                                $this->mArticleID = $linkCache->addLinkObj( $this );
                        }
                }
index 393f435..f688346 100644 (file)
@@ -22,6 +22,7 @@
 use MediaWiki\MediaWikiServices;
 use MediaWiki\Revision\MutableRevisionRecord;
 use MediaWiki\Revision\RevisionRecord;
+use MediaWiki\Revision\RevisionArchiveRecord;
 use MediaWiki\Revision\RevisionStore;
 use MediaWiki\Revision\SlotRecord;
 
@@ -65,6 +66,11 @@ class ApiComparePages extends ApiBase {
                        if ( !$fromRelRev ) {
                                $this->dieWithError( 'apierror-compare-relative-to-nothing' );
                        }
+                       if ( $params['torelative'] !== 'cur' && $fromRelRev instanceof RevisionArchiveRecord ) {
+                               // RevisionStore's getPreviousRevision/getNextRevision blow up
+                               // when passed an RevisionArchiveRecord for a deleted page
+                               $this->dieWithError( [ 'apierror-compare-relative-to-deleted', $params['torelative'] ] );
+                       }
                        switch ( $params['torelative'] ) {
                                case 'prev':
                                        // Swap 'from' and 'to'
index 37a28d5..17c95be 100644 (file)
        "apierror-compare-nofromrevision": "ليس 'من' مراجعة، حدد <var>fromrev</var> أو <var>fromtitle</var> أو <var>fromid</var>.",
        "apierror-compare-notext": "لا يمكن استخدام الوسيط <var>$1</var> بدون <var>$2</var>.",
        "apierror-compare-notorevision": "ليس 'إلى' مراجعة، حدد <var>torev</var> أو <var>totitle</var> أو <var>toid</var>.",
+       "apierror-compare-relative-to-deleted": "لا يمكن استخدام <kbd>torelative=$1</kbd> بالنسبة لمراجعة محذوفة.",
        "apierror-compare-relative-to-nothing": "لا توجد مراجعة 'من' لـ<var>torelative</var> لتكون نسبة.",
        "apierror-contentserializationexception": "فشل تسلسل المحتوى: $1",
        "apierror-contenttoobig": "يتجاوز المحتوى الذي أدخلته حد حجم المقالة البالغ $1 {{PLURAL:$1|كيلوبايت}}.",
index 2b818e2..8643135 100644 (file)
        "apierror-compare-nofromrevision": "Keine Version „from“. <var>fromrev</var>, <var>fromtitle</var> oder <var>fromid</var> angeben.",
        "apierror-compare-notext": "Der Parameter <var>$1</var> kann nicht ohne <var>$2</var> verwendet werden.",
        "apierror-compare-notorevision": "Keine Version „to“. <var>torev</var>, <var>totitle</var> oder <var>toid</var> angeben.",
+       "apierror-compare-relative-to-deleted": "<kbd>torelative=$1</kbd> kann nicht relativ zu einer gelöschten Version verwendet werden.",
        "apierror-emptypage": "Das Erstellen neuer leerer Seiten ist nicht erlaubt.",
        "apierror-filedoesnotexist": "Die Datei ist nicht vorhanden.",
        "apierror-import-unknownerror": "Unbekannter Fehler beim Importieren: $1.",
index 3848786..9b74c5e 100644 (file)
        "apierror-compare-nofromrevision": "No 'from' revision. Specify <var>fromrev</var>, <var>fromtitle</var>, or <var>fromid</var>.",
        "apierror-compare-notext": "Parameter <var>$1</var> cannot be used without <var>$2</var>.",
        "apierror-compare-notorevision": "No 'to' revision. Specify <var>torev</var>, <var>totitle</var>, or <var>toid</var>.",
+       "apierror-compare-relative-to-deleted": "Cannot use <kbd>torelative=$1</kbd> relative to a deleted revision.",
        "apierror-compare-relative-to-nothing": "No 'from' revision for <var>torelative</var> to be relative to.",
        "apierror-contentserializationexception": "Content serialization failed: $1",
        "apierror-contenttoobig": "The content you supplied exceeds the article size limit of $1 {{PLURAL:$1|kilobyte|kilobytes}}.",
index d7c4ee7..5d453b4 100644 (file)
        "apierror-compare-nofromrevision": "Aucune révision 'from'. Spécifiez <var>fromrev</var>, <var>fromtitle</var>, ou <var>fromid</var>.",
        "apierror-compare-notext": "Le paramètre <var>$1</var> ne peut pas être utilisé sans <var>$2</var>.",
        "apierror-compare-notorevision": "Aucune révision 'to'. Spécifiez <var>torev</var>, <var>totitle</var>, ou <var>toid</var>.",
+       "apierror-compare-relative-to-deleted": "Impossible d’utiliser <kbd>torelative=$1</kbd> par rapport à une révision supprimée.",
        "apierror-compare-relative-to-nothing": "Pas de révision 'depuis' pour <var>torelative</var> à laquelle se rapporter.",
        "apierror-contentserializationexception": "Échec de sérialisation du contenu : $1",
        "apierror-contenttoobig": "Le contenu que vous avez fourni dépasse la limite de taille d’un article, qui est de $1 {{PLURAL:$1|kilooctet|kilooctets}}.",
index 00a3ce4..1a2a744 100644 (file)
@@ -6,7 +6,7 @@
                        "Vlad5250"
                ]
        },
-       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Ð\94окÑ\83менÑ\82аÑ\86иÑ\98а]]\n*  [[mw:API:FAQ|ЧÐ\9fÐ\9f]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Ð\9fоÑ\88Ñ\82енÑ\81ки Ñ\81пиÑ\81ок]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Ð¡Ð¾Ð¾Ð¿Ñ\88Ñ\82ениÑ\98а Ð·Ð° Ð\98звÑ\80Ñ\88никоÑ\82]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ð\93Ñ\80еÑ\88ки Ð¸ Ð±Ð°Ñ\80аÑ\9aа]\n</div>\n<strong>СÑ\82аÑ\82Ñ\83Ñ\81:</strong> Ð¡Ð¸Ñ\82е Ñ\81Ñ\82авки Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ава Ð±Ð¸ Ñ\82Ñ\80ебало Ð´Ð° Ñ\80абоÑ\82аÑ\82, Ð½Ð¾ Ð\98звÑ\80Ñ\88никоÑ\82 Ñ\81епак Ðµ Ð²Ð¾ Ð°ÐºÑ\82ивна Ñ\80азÑ\80абоÑ\82ка, Ñ\88Ñ\82о Ð·Ð½Ð°Ñ\87и Ð´ÐµÐºÐ° Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ñ\81мени Ð²Ð¾ Ñ\81екое Ð²Ñ\80еме. Ð\9eбÑ\98авиÑ\82е Ð·Ð° Ð¸Ð·Ð¼ÐµÐ½Ð¸ Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¸ Ð´Ð¾Ð·Ð½Ð°Ð²Ð°Ñ\82е Ð°ÐºÐ¾ Ñ\81е Ð¿Ñ\80иÑ\98авиÑ\82е Ð½Ð° [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ Ð¿Ð¾Ñ\88Ñ\82енÑ\81киоÑ\82 Ñ\81пиÑ\81ок â\80\9ethe mediawiki-api-announceâ\80\9c].\n\n<strong>Ð\9fогÑ\80еÑ\88ни Ð±Ð°Ñ\80аÑ\9aа:</strong> Ð\9aога Ð\98звÑ\80Ñ\88никоÑ\82 Ñ\9cе Ð´Ð¾Ð±Ð¸Ðµ Ð¿Ð¾Ð³Ñ\80еÑ\88ни Ð±Ð°Ñ\80аÑ\9aа, Ñ\9cе Ñ\81е Ð¸Ñ\81пÑ\80аÑ\82и HTTP-заглавие Ñ\81о ÐºÐ»Ñ\83Ñ\87оÑ\82 â\80\9eMediaWiki-API-Errorâ\80\9c Ð¸ Ð¿Ð¾Ñ\82оа Ð½Ð° Ð²Ñ\80едноÑ\81Ñ\82иÑ\82е Ð½Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ð¸ÐµÑ\82о Ð¸ Ñ\88иÑ\84Ñ\80аÑ\82а Ð½Ð° Ð³Ñ\80еÑ\88каÑ\82а Ñ\88Ñ\82о Ñ\9cе Ñ\81е Ð¿Ð¾Ñ\98аваÑ\82 Ñ\9cе Ð¸Ð¼ Ð±Ð¸Ð´Ðµ Ð·Ð°Ð´Ð°Ð´ÐµÐ½Ð° Ð¸Ñ\81Ñ\82аÑ\82а Ð²Ñ\80едноÑ\81Ñ\82. Ð\9fÐ\9eвеќе информации ќе најдете на  [[mw:API:Errors_and_warnings|Извршник: Грешки и предупредувања]].",
+       "apihelp-main-extended-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Ð\94окÑ\83менÑ\82аÑ\86иÑ\98а]]\n*  [[mw:API:FAQ|ЧÐ\9fÐ\9f]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Ð\9fоÑ\88Ñ\82енÑ\81ки Ñ\81пиÑ\81ок]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Ð¡Ð¾Ð¾Ð¿Ñ\88Ñ\82ениÑ\98а Ð·Ð° Ð\98звÑ\80Ñ\88никоÑ\82]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ð\93Ñ\80еÑ\88ки Ð¸ Ð±Ð°Ñ\80аÑ\9aа]\n</div>\n<strong>СÑ\82аÑ\82Ñ\83Ñ\81:</strong> Ð¡Ð¸Ñ\82е Ñ\81Ñ\82авки Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86ава Ð±Ð¸ Ñ\82Ñ\80ебало Ð´Ð° Ñ\80абоÑ\82аÑ\82, Ð½Ð¾ Ð\98звÑ\80Ñ\88никоÑ\82 Ñ\81епак Ðµ Ð²Ð¾ Ð°ÐºÑ\82ивна Ñ\80азÑ\80абоÑ\82ка, Ñ\88Ñ\82о Ð·Ð½Ð°Ñ\87и Ð´ÐµÐºÐ° Ð¼Ð¾Ð¶Ðµ Ð´Ð° Ñ\81е Ñ\81мени Ð²Ð¾ Ñ\81екое Ð²Ñ\80еме. Ð\9eбÑ\98авиÑ\82е Ð·Ð° Ð¸Ð·Ð¼ÐµÐ½Ð¸ Ð¼Ð¾Ð¶ÐµÑ\82е Ð´Ð° Ð³Ð¸ Ð´Ð¾Ð·Ð½Ð°Ð²Ð°Ñ\82е Ð°ÐºÐ¾ Ñ\81е Ð¿Ñ\80иÑ\98авиÑ\82е Ð½Ð° [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ Ð¿Ð¾Ñ\88Ñ\82енÑ\81киоÑ\82 Ñ\81пиÑ\81ок â\80\9ethe mediawiki-api-announceâ\80\9c].\n\n<strong>Ð\9fогÑ\80еÑ\88ни Ð±Ð°Ñ\80аÑ\9aа:</strong> Ð\9aога Ð\98звÑ\80Ñ\88никоÑ\82 Ñ\9cе Ð´Ð¾Ð±Ð¸Ðµ Ð¿Ð¾Ð³Ñ\80еÑ\88ни Ð±Ð°Ñ\80аÑ\9aа, Ñ\9cе Ñ\81е Ð¸Ñ\81пÑ\80аÑ\82и HTTP-заглавие Ñ\81о ÐºÐ»Ñ\83Ñ\87оÑ\82 â\80\9eMediaWiki-API-Errorâ\80\9c Ð¸ Ð¿Ð¾Ñ\82оа Ð½Ð° Ð²Ñ\80едноÑ\81Ñ\82иÑ\82е Ð½Ð° Ð·Ð°Ð³Ð»Ð°Ð²Ð¸ÐµÑ\82о Ð¸ Ñ\88иÑ\84Ñ\80аÑ\82а Ð½Ð° Ð³Ñ\80еÑ\88каÑ\82а Ñ\88Ñ\82о Ñ\9cе Ñ\81е Ð¿Ð¾Ñ\98аваÑ\82 Ñ\9cе Ð¸Ð¼ Ð±Ð¸Ð´Ðµ Ð·Ð°Ð´Ð°Ð´ÐµÐ½Ð° Ð¸Ñ\81Ñ\82аÑ\82а Ð²Ñ\80едноÑ\81Ñ\82. Ð\9fовеќе информации ќе најдете на  [[mw:API:Errors_and_warnings|Извршник: Грешки и предупредувања]].",
        "apihelp-main-param-action": "Кое дејство да се изврши.",
        "apihelp-main-param-format": "Формат на изводот.",
        "apihelp-main-param-maxlag": "Најголемиот допуштен заостаток може да се користи кога МедијаВики е воспоставен на грозд умножен од базата. За да спречите дополнителни заостатоци од дејства, овој параметар му наложува на клиентот да почека додека заостатокот не се намали под укажаната вредност. Во случај на преголем заостаток, системт ја дава грешката со код <samp>maxlag</samp> со порака од обликот <samp>Го чекам $host: има заостаток од $lag секунди</samp>.<br />Погл. [[mw:Manual:Maxlag_parameter|Прирачник: Параметар Maxlag]]",
index c31f1c0..b3c26ce 100644 (file)
        "apierror-compare-nofromrevision": "Não foi especificada uma revisão 'from'. Especificar <var>fromrev</var>, <var>fromtitle</var> ou <var>fromid</var>.",
        "apierror-compare-notext": "O parâmetro <var>$1</var> não pode ser usado sem <var>$2</var>.",
        "apierror-compare-notorevision": "Não foi especificada uma revisão 'to'. Especificar <var>torev</var>, <var>totitle</var> ou <var>toid</var>.",
+       "apierror-compare-relative-to-deleted": "Não pode usar <kbd>torelative=$1</kbd> com relação a uma revisão eliminada.",
        "apierror-compare-relative-to-nothing": "Nenhuma revisão 'from' para <var>torelative</var> para ser relativa à.",
        "apierror-contentserializationexception": "Falha na serialização de conteúdo: $1",
        "apierror-contenttoobig": "O conteúdo fornecido excede o limite de tamanho do artigo de $1 {{PLURAL: $1|kilobyte|kilobytes}}.",
index 41d06d6..a609992 100644 (file)
        "apierror-compare-nofromrevision": "Não foi especificada uma revisão 'from'. Especificar <var>fromrev</var>, <var>fromtitle</var> ou <var>fromid</var>.",
        "apierror-compare-notext": "O parâmetro <var>$1</var> não pode ser usado sem <var>$2</var>.",
        "apierror-compare-notorevision": "Não foi especificada uma revisão 'to'. Especificar <var>torev</var>, <var>totitle</var> ou <var>toid</var>.",
+       "apierror-compare-relative-to-deleted": "Não pode usar <kbd>torelative=$1</kbd> com relação a uma revisão eliminada.",
        "apierror-compare-relative-to-nothing": "Não existe uma revisão 'from' em relação à qual <var>torelative</var> possa ser relativo.",
        "apierror-contentserializationexception": "A seriação do conteúdo falhou: $1",
        "apierror-contenttoobig": "O conteúdo que forneceu excede o tamanho máximo dos artigos que é $1 {{PLURAL:$1|kilobyte|kilobytes}}.",
index 9786053..b33f44a 100644 (file)
        "apierror-compare-nofromrevision": "{{doc-apierror}}",
        "apierror-compare-notext": "{{doc-apierror}}\n\nParameters:\n* $1 - Parameter that is not allowed without <var>totext-&#x7B;role}</var>/<var>fromtext-&#x7B;role}</var>.\n* $2 - The specific <var>totext-&#x7B;role}</var>/<var>fromtext-&#x7B;role}</var> parameter that must be present.",
        "apierror-compare-notorevision": "{{doc-apierror}}",
+       "apierror-compare-relative-to-deleted": "{{doc-apierror}}",
        "apierror-compare-relative-to-nothing": "{{doc-apierror}}",
        "apierror-contentserializationexception": "{{doc-apierror}}\n\nParameters:\n* $1 - Exception text, may end with punctuation. Currently this is probably English, hopefully we'll fix that in the future.",
        "apierror-contenttoobig": "{{doc-apierror}}\n\nParameters:\n* $1 - Maximum article size in kilobytes.",
index 22fae90..3972b4e 100644 (file)
@@ -46,6 +46,7 @@
        "apihelp-block-param-watchuser": "監視使用者或 IP 位址的使用者頁面與對話頁面。",
        "apihelp-block-param-tags": "在封鎖日誌裡更改套用到項目的標籤。",
        "apihelp-block-param-partial": "封鎖使用者訪問特殊頁面或命名空間,而不是整個網站。",
+       "apihelp-block-param-pagerestrictions": "封鎖使用者做出編輯的標題清單。僅在「partial」被設定為 true 時套用。",
        "apihelp-block-example-ip-simple": "封鎖 IP 位址 <kbd>192.0.2.5</kbd> 三天,原因為 <kbd>First strike</kbd>。",
        "apihelp-block-example-user-complex": "永久封鎖 IP 位址 <kbd>Vandal</kbd>,原因為 <kbd>Vandalism</kbd>。",
        "apihelp-changeauthenticationdata-summary": "為目前使用者變更身分核對資料。",
        "apihelp-edit-param-notminor": "非小編輯。",
        "apihelp-edit-param-bot": "標記此編輯為機器人編輯。",
        "apihelp-edit-param-basetimestamp": "基於修訂的時間戳記,用來檢測編輯衝突。也许可以取得[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]]認可。",
+       "apihelp-edit-param-recreate": "覆蓋有關頁面在此期間已被刪除的任何錯誤。",
        "apihelp-edit-param-createonly": "若頁面已存在,則不編輯頁面。",
        "apihelp-edit-param-nocreate": "若頁面不存在,則產生錯誤。",
        "apihelp-edit-param-watch": "加入目前頁面至您的監視清單。",
        "apihelp-options-example-complex": "重置所有偏好設定,然後再設定 <kbd>skin</kbd> 與 <kbd>nickname</kbd>。",
        "apihelp-paraminfo-summary": "獲得有關 API 模組的資訊。",
        "apihelp-paraminfo-param-helpformat": "說明字串的格式。",
+       "apihelp-paraminfo-param-mainmodule": "如同取得有關主要(最高級別)模組的資訊。可改用 <kbd>$1modules=main</kbd>。",
+       "apihelp-paraminfo-param-pagesetmodule": "如同取得有關頁面設定模組(提供 titles= 與友人)的資訊。",
        "apihelp-paraminfo-param-formatmodules": "格式模組名稱清單(<var>format</var> 參數的值)。請改用 <var>$1modules</var> 。",
        "apihelp-paraminfo-example-1": "顯示 <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>、<kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>、<kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>、和 <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> 的資訊。",
        "apihelp-paraminfo-example-2": "顯示 <kbd>[[Special:ApiHelp/query|action=query]]</kbd> 所有子模組的資訊。",
        "apierror-badupload": "檔案上傳參數 <var>$1</var> 不是一個檔案上傳,請確定在您的 POST 有使用 <code>multipart/form-data</code>,並且在 <code>Content-Disposition</code> 標頭有包含檔案名稱。",
        "apierror-badurl": "用於 URL 參數 <var>$1</var> 的值「$2」無效。",
        "apierror-baduser": "用於使用者參數 <var>$1</var> 的值「$2」無效。",
+       "apierror-badvalue-notmultivalue": "U+001F 多值區分僅可用於多值參數。",
        "apierror-bad-watchlist-token": "提供無效的監視清單權杖。請在 [[Special:Preferences]] 設定正確權杖。",
        "apierror-blockedfrommail": "您已被封鎖,無法發送電子郵件。",
        "apierror-blocked": "您已被封鎖,無法編輯。",
        "apiwarn-parse-nocontentmodel": "未提供 <var>title</var> 或 <var>contentmodel</var>,應是 $1。",
        "apiwarn-parse-revidwithouttext": "<var>revid</var> 在不帶有 <var>text</var> 的情況下使用,且請求了已解析頁面屬性。請問您是指要使用 <var>oldid</var> 而不是 <var>revid</var> 嗎?",
        "apiwarn-parse-titlewithouttext": "<var>title</var> 在不帶有 <var>text</var> 的情況下使用,且請求了已解析頁面屬性。請問您是指要使用 <var>page</var> 而不是 <var>title</var> 嗎?",
+       "apiwarn-redirectsandrevids": "重新導向處理不能與參數 <var>revids</var> 一同使用。任何 <var>revids</var> 所指向的重新導向都尚未被解決。",
        "apiwarn-tokennotallowed": "「$1」操作不允許目前的使用者。",
        "apiwarn-tokens-origin": "當未套用相同來源方針,權杖可能無法取得。",
        "apiwarn-truncatedresult": "結果會被截短,否則將會大於 $1 位元組限制。",
index 9e182c7..b9944a8 100644 (file)
@@ -197,6 +197,7 @@ class LinkCache {
         * @return int Page ID or zero
         */
        public function addLink( $title ) {
+               wfDeprecated( __METHOD__, '1.27' );
                $nt = Title::newFromDBkey( $title );
                if ( !$nt ) {
                        return 0;
index 696e81f..628b47b 100644 (file)
@@ -972,7 +972,7 @@ class DatabaseOracle extends Database {
                        if ( $sl < 0 ) {
                                continue;
                        }
-                       if ( '-' == $line[0] && '-' == $line[1] ) {
+                       if ( $line[0] == '-' && $line[1] == '-' ) {
                                continue;
                        }
 
@@ -986,7 +986,7 @@ class DatabaseOracle extends Database {
                                        $dollarquote = true;
                                }
                        } elseif ( !$dollarquote ) {
-                               if ( ';' == $line[$sl] && ( $sl < 2 || ';' != $line[$sl - 1] ) ) {
+                               if ( $line[$sl] == ';' && ( $sl < 2 || $line[$sl - 1] != ';' ) ) {
                                        $done = true;
                                        $line = substr( $line, 0, $sl );
                                }
@@ -1017,7 +1017,7 @@ class DatabaseOracle extends Database {
                                                call_user_func( $resultCallback, $res, $this );
                                        }
 
-                                       if ( false === $res ) {
+                                       if ( $res === false ) {
                                                $err = $this->lastError();
 
                                                return "Query \"{$cmd}\" failed with error code \"$err\".\n";
index 6288a50..9f63ede 100644 (file)
@@ -375,7 +375,7 @@ class LegacyLogger extends AbstractLogger {
         * @return string
         */
        protected static function flatten( $item ) {
-               if ( null === $item ) {
+               if ( $item === null ) {
                        return '[Null]';
                }
 
diff --git a/includes/debug/logger/monolog/CeeFormatter.php b/includes/debug/logger/monolog/CeeFormatter.php
new file mode 100644 (file)
index 0000000..4b0c6cb
--- /dev/null
@@ -0,0 +1,23 @@
+<?php
+
+namespace MediaWiki\Logger\Monolog;
+
+/**
+ * CeeFormatter extends LogstashFormatter to prefix records with a "cee cookie".
+ * The cookie is used to tell JSON and non-JSON messages apart when logging to syslog.
+ * See also: https://www.rsyslog.com/doc/v8-stable/configuration/modules/mmjsonparse.html
+ *
+ * Compatible with Monolog 1.x only.
+ *
+ * @since 1.33
+ */
+class CeeFormatter extends LogstashFormatter {
+       /**
+        * Format records with a cee cookie
+        * @param array $record
+        * @return array
+        */
+       public function format( array $record ) {
+               return "@cee: " . parent::format( $record );
+       }
+}
index 95ee4f4..e4c2173 100644 (file)
@@ -1242,7 +1242,7 @@ class LocalFile extends File {
                                $fileQuery['joins']
                        );
 
-                       if ( 0 == $dbr->numRows( $this->historyRes ) ) {
+                       if ( $dbr->numRows( $this->historyRes ) == 0 ) {
                                $this->historyRes = null;
 
                                return false;
index 6fef23b..7b099ca 100644 (file)
@@ -7,7 +7,7 @@ use MediaWiki\Widget\TitlesMultiselectWidget;
  *
  * Besides the parameters recognized by HTMLTitleTextField, additional recognized
  * parameters are:
- *  default - (optional) Array of usernames to use as preset data
+ *  default - (optional) Array of titles to use as preset data
  *  placeholder - (optional) Custom placeholder message for input
  *
  * The result is the array of titles
diff --git a/includes/http/GuzzleHttpRequest.php b/includes/http/GuzzleHttpRequest.php
new file mode 100644 (file)
index 0000000..5654a71
--- /dev/null
@@ -0,0 +1,202 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use GuzzleHttp\Client;
+use GuzzleHttp\Psr7\Request;
+
+/**
+ * MWHttpRequest implemented using the Guzzle library
+ *
+ * Differences from the CurlHttpRequest implementation:
+ *   1) the MWHttpRequest 'callback" option is unsupported.  Instead, use the 'sink' option to
+ *      send a filename/stream (see http://docs.guzzlephp.org/en/stable/request-options.html#sink)
+ *   2) callers may set a custom handler via the 'handler' option.
+ *      If this is not set, Guzzle will use curl (if available) or PHP streams (otherwise)
+ *   3) setting either sslVerifyHost or sslVerifyCert will enable both.  Guzzle does not allow
+ *      them to be set separately.
+ *
+ * @since 1.33
+ */
+class GuzzleHttpRequest extends MWHttpRequest {
+       const SUPPORTS_FILE_POSTS = true;
+
+       protected $handler = null;
+       protected $sink = null;
+       protected $guzzleOptions = [ 'http_errors' => false ];
+
+       /**
+        * @param string $url Url to use. If protocol-relative, will be expanded to an http:// URL
+        * @param array $options (optional) extra params to pass (see Http::request())
+        * @param string $caller The method making this request, for profiling
+        * @param Profiler|null $profiler An instance of the profiler for profiling, or null
+        * @throws Exception
+        */
+       public function __construct(
+               $url, array $options = [], $caller = __METHOD__, $profiler = null
+       ) {
+               parent::__construct( $url, $options, $caller, $profiler );
+
+               if ( isset( $options['handler'] ) ) {
+                       $this->handler = $options['handler'];
+               }
+               if ( isset( $options['sink'] ) ) {
+                       $this->sink = $options['sink'];
+               }
+       }
+
+       /**
+        * @see MWHttpRequest::execute
+        *
+        * @return Status
+        */
+       public function execute() {
+               $this->prepare();
+
+               if ( !$this->status->isOK() ) {
+                       return Status::wrap( $this->status ); // TODO B/C; move this to callers
+               }
+
+               if ( $this->proxy ) {
+                       $this->guzzleOptions['proxy'] = $this->proxy;
+               }
+
+               $this->guzzleOptions['timeout'] = $this->timeout;
+               $this->guzzleOptions['connect_timeout'] = $this->connectTimeout;
+               $this->guzzleOptions['version'] = '1.1';
+
+               if ( !$this->followRedirects ) {
+                       $this->guzzleOptions['allow_redirects'] = false;
+               } else {
+                       $this->guzzleOptions['allow_redirects'] = [
+                               'max' => $this->maxRedirects
+                       ];
+               }
+
+               if ( $this->method == 'POST' ) {
+                       $postData = $this->postData;
+                       $this->guzzleOptions['body'] = $postData;
+
+                       // Suppress 'Expect: 100-continue' header, as some servers
+                       // will reject it with a 417 and Curl won't auto retry
+                       // with HTTP 1.0 fallback
+                       $this->guzzleOptions['expect'] = false;
+               }
+
+               $this->guzzleOptions['headers'] = $this->reqHeaders;
+
+               if ( $this->handler ) {
+                       $this->guzzleOptions['handler'] = $this->handler;
+               }
+
+               if ( $this->sink ) {
+                       $this->guzzleOptions['sink'] = $this->sink;
+               }
+
+               if ( $this->caInfo ) {
+                       $this->guzzleOptions['verify'] = $this->caInfo;
+               } elseif ( !$this->sslVerifyHost && !$this->sslVerifyCert ) {
+                       $this->guzzleOptions['verify'] = false;
+               }
+
+               try {
+                       $client = new Client( $this->guzzleOptions );
+                       $request = new Request( $this->method, $this->url );
+                       $response = $client->send( $request );
+                       $this->headerList = $response->getHeaders();
+                       $this->content = $response->getBody()->getContents();
+
+                       $this->respVersion = $response->getProtocolVersion();
+                       $this->respStatus = $response->getStatusCode() . ' ' . $response->getReasonPhrase();
+
+               } catch ( GuzzleHttp\Exception\ConnectException $e ) {
+                       // ConnectException is thrown for several reasons besides generic "timeout":
+                       //   Connection refused
+                       //   couldn't connect to host
+                       //   connection attempt failed
+                       //   Could not resolve IPv4 address for host
+                       //   Could not resolve IPv6 address for host
+                       if ( $this->usingCurl() ) {
+                               $handlerContext = $e->getHandlerContext();
+                               if ( $handlerContext['errno'] == CURLE_OPERATION_TIMEOUTED ) {
+                                       $this->status->fatal( 'http-timed-out', $this->url );
+                               } else {
+                                       $this->status->fatal( 'http-curl-error', $handlerContext['error'] );
+                               }
+                       } else {
+                               $this->status->fatal( 'http-request-error' );
+                       }
+               } catch ( GuzzleHttp\Exception\RequestException $e ) {
+                       if ( $this->usingCurl() ) {
+                               $handlerContext = $e->getHandlerContext();
+                               $this->status->fatal( 'http-curl-error', $handlerContext['error'] );
+                       } else {
+                               // Non-ideal, but the only way to identify connection timeout vs other conditions
+                               $needle = 'Connection timed out';
+                               if ( strpos( $e->getMessage(), $needle ) !== false ) {
+                                       $this->status->fatal( 'http-timed-out', $this->url );
+                               } else {
+                                       $this->status->fatal( 'http-request-error' );
+                               }
+                       }
+               } catch ( GuzzleHttp\Exception\GuzzleException $e ) {
+                       $this->status->fatal( 'http-internal-error' );
+               }
+
+               if ( $this->profiler ) {
+                       $profileSection = $this->profiler->scopedProfileIn(
+                               __METHOD__ . '-' . $this->profileName
+                       );
+               }
+
+               if ( $this->profiler ) {
+                       $this->profiler->scopedProfileOut( $profileSection );
+               }
+
+               $this->parseHeader();
+               $this->setStatus();
+
+               return Status::wrap( $this->status ); // TODO B/C; move this to callers
+       }
+
+       /**
+        * @return bool
+        */
+       protected function usingCurl() {
+               return ( $this->handler && is_a( $this->handler, 'GuzzleHttp\Handler\CurlHandler' ) ) ||
+                       ( !$this->handler && extension_loaded( 'curl' ) );
+       }
+
+       /**
+        * Guzzle provides headers as an array.  Reprocess to match our expectations.  Guzzle will
+        * have already parsed and removed the status line (in EasyHandle::createResponse)z.
+        */
+       protected function parseHeader() {
+               // Failure without (valid) headers gets a response status of zero
+               if ( !$this->status->isOK() ) {
+                       $this->respStatus = '0 Error';
+               }
+
+               foreach ( $this->headerList as $name => $values ) {
+                       $this->respHeaders[strtolower( $name )] = $values;
+               }
+
+               $this->parseCookies();
+       }
+}
index c5413b3..a3a14d0 100644 (file)
@@ -26,6 +26,7 @@ use MediaWiki\Logger\LoggerFactory;
 use MWHttpRequest;
 use PhpHttpRequest;
 use Profiler;
+use GuzzleHttpRequest;
 
 /**
  * Factory creating MWHttpRequest objects.
@@ -43,7 +44,7 @@ class HttpRequestFactory {
         */
        public function create( $url, array $options = [], $caller = __METHOD__ ) {
                if ( !Http::$httpEngine ) {
-                       Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php';
+                       Http::$httpEngine = 'guzzle';
                } elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) {
                        throw new DomainException( __METHOD__ . ': curl (https://secure.php.net/curl) is not ' .
                           'installed, but Http::$httpEngine is set to "curl"' );
@@ -54,6 +55,8 @@ class HttpRequestFactory {
                }
 
                switch ( Http::$httpEngine ) {
+                       case 'guzzle':
+                               return new GuzzleHttpRequest( $url, $options, $caller, Profiler::instance() );
                        case 'curl':
                                return new CurlHttpRequest( $url, $options, $caller, Profiler::instance() );
                        case 'php':
index 435c34d..b087019 100644 (file)
@@ -88,6 +88,7 @@ abstract class MWHttpRequest implements LoggerAwareInterface {
         * @param array $options (optional) extra params to pass (see Http::request())
         * @param string $caller The method making this request, for profiling
         * @param Profiler|null $profiler An instance of the profiler for profiling, or null
+        * @throws Exception
         */
        public function __construct(
                $url, array $options = [], $caller = __METHOD__, $profiler = null
@@ -408,18 +409,20 @@ abstract class MWHttpRequest implements LoggerAwareInterface {
        /**
         * Sets HTTPRequest status member to a fatal value with the error
         * message if the returned integer value of the status code was
-        * not successful (< 300) or a redirect (>=300 and < 400).  (see
-        * RFC2616, section 10,
-        * http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html for a
-        * list of status codes.)
+        * not successful (1-299) or a redirect (300-399).
+        * See RFC2616, section 10, http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
+        * for a list of status codes.
         */
        protected function setStatus() {
                if ( !$this->respHeaders ) {
                        $this->parseHeader();
                }
 
-               if ( (int)$this->respStatus > 399 ) {
+               if ( ( (int)$this->respStatus > 0 && (int)$this->respStatus < 400 ) ) {
+                       $this->status->setResult( true, (int)$this->respStatus );
+               } else {
                        list( $code, $message ) = explode( " ", $this->respStatus, 2 );
+                       $this->status->setResult( false, (int)$this->respStatus );
                        $this->status->fatal( "http-bad-status", $code, $message );
                }
        }
index 5730743..917f589 100644 (file)
@@ -958,7 +958,7 @@ END;
                }
                if ( $fi->isNullable() ) {
                        # # It's NULL - does it need to be NOT NULL?
-                       if ( 'NOT NULL' === $null ) {
+                       if ( $null === 'NOT NULL' ) {
                                $this->output( "Changing '$table.$field' to not allow NULLs\n" );
                                if ( $update ) {
                                        $this->db->query( "UPDATE $table SET $field = DEFAULT WHERE $field IS NULL" );
@@ -969,7 +969,7 @@ END;
                        }
                } else {
                        # # It's NOT NULL - does it need to be NULL?
-                       if ( 'NULL' === $null ) {
+                       if ( $null === 'NULL' ) {
                                $this->output( "Changing '$table.$field' to allow NULLs\n" );
                                $this->db->query( "ALTER TABLE $table ALTER $field DROP NOT NULL" );
                        } else {
index 953ac8a..3acdec0 100644 (file)
        "config-header-sqlite": "SQLite-indstillinger",
        "config-header-oracle": "Oracle-indstillinger",
        "config-invalid-db-type": "Ugyldig databasetype",
+       "config-db-web-create": "Opret kontoen hvis den ikke allerede findes",
+       "config-mysql-innodb": "InnoDB (anbefalet)",
+       "config-mysql-myisam": "MyISAM",
        "config-mssql-windowsauth": "Windows-godkendelse",
        "config-site-name": "Navn på wiki:",
        "config-site-name-blank": "Indtast et hjemmesidenavn.",
        "config-project-namespace": "Projektnavnerum:",
        "config-ns-generic": "Projekt",
        "config-ns-site-name": "Samme som wikinavnet: $1",
+       "config-ns-other": "Andet (angiv)",
        "config-admin-box": "Administratorkonto",
        "config-admin-name": "Dit brugernavn:",
        "config-admin-password": "Adgangskode:",
        "config-admin-password-confirm": "Tast adgangskoden igen:",
        "config-admin-email": "E-postadresse:",
+       "config-admin-error-bademail": "Du har indtastet en ugyldig e-mailadresse.",
        "config-optional-continue": "Stil mig flere spørgsmål.",
+       "config-optional-skip": "Jeg keder mig allerede, installer bare wikien.",
        "config-profile-wiki": "Åbn wiki",
        "config-profile-no-anon": "Kontooprettelse er krævet",
        "config-profile-fishbowl": "Kun godkendte redaktører",
        "config-extensions": "Udvidelser",
        "config-install-step-done": "udført",
        "config-install-step-failed": "mislykkedes",
+       "config-install-database": "Opsætter database",
        "config-install-user-alreadyexists": "Brugeren \"$1\" findes allerede",
        "config-install-user-create-failed": "Oprettelse af brugeren \"$1\" mislykkedes: $2",
        "config-install-tables": "Opretter tabeller",
+       "config-install-mainpage-exists": "Forsiden findes allerede, springer over",
        "config-install-mainpage-failed": "Kunne ikke indsætte forside: $1",
        "config-help": "hjælp",
        "config-help-tooltip": "klik for at udvide",
+       "config-nofile": "Filen \"$1\" kunne ikke blive fundet. Er den blevet slettet?",
        "config-skins-screenshots": "$1 (skærmbilleder: $2)",
        "config-extensions-requires": "$1 (kræver $2)",
        "config-screenshot": "skærmbillede",
index 1c7647c..b64c87a 100644 (file)
@@ -47,7 +47,7 @@ class CategoryMembershipChangeJob extends Job {
        private $parserCache;
 
        /**
-        * @param Title $title The title of the page for which to update category emmbership.
+        * @param Title $title The title of the page for which to update category membership.
         * @param string $revisionTimestamp The timestamp of the new revision that triggered the job.
         * @return JobSpecification
         */
@@ -66,6 +66,9 @@ class CategoryMembershipChangeJob extends Job {
        /**
         * Constructor for use by the Job Queue infrastructure.
         * @note Don't call this when queueing a new instance, use newSpec() instead.
+        * @param ParserCache $parserCache Cache outputs of PHP parser.
+        * @param Title $title Title of the categorized page.
+        * @param array $params Such latest revision instance of the categorized page.
         */
        public function __construct( ParserCache $parserCache, Title $title, array $params ) {
                parent::__construct( 'categoryMembershipChange', $title, $params );
index 0403725..33afe65 100644 (file)
@@ -626,16 +626,32 @@ abstract class FileBackendStore extends FileBackend {
                        return false; // invalid storage path
                }
                $ps = $this->scopedProfileSection( __METHOD__ . "-{$this->name}" );
+
                $latest = !empty( $params['latest'] ); // use latest data?
-               if ( !$latest && !$this->cheapCache->hasField( $path, 'stat', self::CACHE_TTL ) ) {
-                       $this->primeFileCache( [ $path ] ); // check persistent cache
+               $requireSHA1 = !empty( $params['requireSHA1'] ); // require SHA-1 if file exists?
+
+               if ( !$latest ) {
+                       $stat = $this->cheapCache->getField( $path, 'stat', self::CACHE_TTL );
+                       // Note that some backends, like SwiftFileBackend, sometimes set file stat process
+                       // cache entries from mass object listings that do not include the SHA-1. In that
+                       // case, loading the persistent stat cache will likely yield the SHA-1.
+                       if (
+                               $stat === null ||
+                               ( $requireSHA1 && is_array( $stat ) && !isset( $stat['sha1'] ) )
+                       ) {
+                               $this->primeFileCache( [ $path ] ); // check persistent cache
+                       }
                }
-               if ( $this->cheapCache->hasField( $path, 'stat', self::CACHE_TTL ) ) {
-                       $stat = $this->cheapCache->getField( $path, 'stat' );
+
+               $stat = $this->cheapCache->getField( $path, 'stat', self::CACHE_TTL );
+               if ( $stat !== null ) {
                        // If we want the latest data, check that this cached
                        // value was in fact fetched with the latest available data.
                        if ( is_array( $stat ) ) {
-                               if ( !$latest || $stat['latest'] ) {
+                               if (
+                                       ( !$latest || $stat['latest'] ) &&
+                                       ( !$requireSHA1 || isset( $stat['sha1'] ) )
+                               ) {
                                        return $stat;
                                }
                        } elseif ( in_array( $stat, [ 'NOT_EXIST', 'NOT_EXIST_LATEST' ] ) ) {
@@ -644,7 +660,9 @@ abstract class FileBackendStore extends FileBackend {
                                }
                        }
                }
+
                $stat = $this->doGetFileStat( $params );
+
                if ( is_array( $stat ) ) { // file exists
                        // Strongly consistent backends can automatically set "latest"
                        $stat['latest'] = $stat['latest'] ?? $latest;
index 31882de..61b4d69 100644 (file)
@@ -720,7 +720,7 @@ class SwiftFileBackend extends FileBackendStore {
         * @param string $path Storage path to object
         * @return array New headers
         */
-       protected function addMissingMetadata( array $objHdrs, $path ) {
+       protected function addMissingHashMetadata( array $objHdrs, $path ) {
                if ( isset( $objHdrs['x-object-meta-sha1base36'] ) ) {
                        return $objHdrs; // nothing to do
                }
@@ -780,8 +780,8 @@ class SwiftFileBackend extends FileBackendStore {
                $auth = $this->getAuthentication();
 
                $ep = array_diff_key( $params, [ 'srcs' => 1 ] ); // for error logging
-               // Blindly create tmp files and stream to them, catching any exception if the file does
-               // not exist. Doing stats here is useless and will loop infinitely in addMissingMetadata().
+               // Blindly create tmp files and stream to them, catching any exception
+               // if the file does not exist. Do not waste time doing file stats here.
                $reqs = []; // (path => op)
 
                foreach ( $params['srcs'] as $path ) { // each path in this concurrent batch
@@ -1052,14 +1052,12 @@ class SwiftFileBackend extends FileBackendStore {
        }
 
        protected function doGetFileSha1base36( array $params ) {
+               // Avoid using stat entries from file listings, which never include the SHA-1 hash.
+               // Also, recompute the hash if it's not part of the metadata headers for some reason.
+               $params['requireSHA1'] = true;
+
                $stat = $this->getFileStat( $params );
                if ( $stat ) {
-                       if ( !isset( $stat['sha1'] ) ) {
-                               // Stat entries filled by file listings don't include SHA1
-                               $this->clearCache( [ $params['src'] ] );
-                               $stat = $this->getFileStat( $params );
-                       }
-
                        return $stat['sha1'];
                } else {
                        return false;
@@ -1139,8 +1137,8 @@ class SwiftFileBackend extends FileBackendStore {
                $auth = $this->getAuthentication();
 
                $ep = array_diff_key( $params, [ 'srcs' => 1 ] ); // for error logging
-               // Blindly create tmp files and stream to them, catching any exception if the file does
-               // not exist. Doing a stat here is useless causes infinite loops in addMissingMetadata().
+               // Blindly create tmp files and stream to them, catching any exception
+               // if the file does not exist. Do not waste time doing file stats here.
                $reqs = []; // (path => op)
 
                foreach ( $params['srcs'] as $path ) { // each path in this concurrent batch
@@ -1631,7 +1629,9 @@ class SwiftFileBackend extends FileBackendStore {
                        list( $rcode, $rdesc, $rhdrs, $rbody, $rerr ) = $reqs[$path]['response'];
                        if ( $rcode === 200 || $rcode === 204 ) {
                                // Update the object if it is missing some headers
-                               $rhdrs = $this->addMissingMetadata( $rhdrs, $path );
+                               if ( !empty( $params['requireSHA1'] ) ) {
+                                       $rhdrs = $this->addMissingHashMetadata( $rhdrs, $path );
+                               }
                                // Load the stat array from the headers
                                $stat = $this->getStatFromHeaders( $rhdrs );
                                if ( $this->isRGW ) {
index 7865db4..9a9e36a 100644 (file)
@@ -4276,7 +4276,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                $fp = fopen( $filename, 'r' );
                Wikimedia\restoreWarnings();
 
-               if ( false === $fp ) {
+               if ( $fp === false ) {
                        throw new RuntimeException( "Could not open \"{$filename}\".\n" );
                }
 
@@ -4327,7 +4327,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                                continue;
                        }
 
-                       if ( '-' == $line[0] && '-' == $line[1] ) {
+                       if ( $line[0] == '-' && $line[1] == '-' ) {
                                continue;
                        }
 
@@ -4357,7 +4357,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                                                $resultCallback( $res, $this );
                                        }
 
-                                       if ( false === $res ) {
+                                       if ( $res === false ) {
                                                $err = $this->lastError();
 
                                                return "Query \"{$cmd}\" failed with error code \"$err\".\n";
index adcd899..5f04e39 100644 (file)
@@ -916,22 +916,22 @@ __INDEXATTR__;
         * @return string[]
         */
        private function pg_array_parse( $text, &$output, $limit = false, $offset = 1 ) {
-               if ( false === $limit ) {
+               if ( $limit === false ) {
                        $limit = strlen( $text ) - 1;
                        $output = [];
                }
-               if ( '{}' == $text ) {
+               if ( $text == '{}' ) {
                        return $output;
                }
                do {
-                       if ( '{' != $text[$offset] ) {
+                       if ( $text[$offset] != '{' ) {
                                preg_match( "/(\\{?\"([^\"\\\\]|\\\\.)*\"|[^,{}]+)+([,}]+)/",
                                        $text, $match, 0, $offset );
                                $offset += strlen( $match[0] );
-                               $output[] = ( '"' != $match[1][0]
+                               $output[] = ( $match[1][0] != '"'
                                        ? $match[1]
                                        : stripcslashes( substr( $match[1], 1, -1 ) ) );
-                               if ( '},' == $match[3] ) {
+                               if ( $match[3] == '},' ) {
                                        return $output;
                                }
                        } else {
index a73fac1..d09620b 100644 (file)
@@ -44,22 +44,16 @@ class RedisConnRef implements LoggerAwareInterface {
 
        /**
         * No authentication errors.
-        *
-        * @var constant
         */
        const AUTH_NO_ERROR = 200;
 
        /**
         * Temporary authentication error; recovered by reauthenticating.
-        *
-        * @var constant
         */
        const AUTH_ERROR_TEMPORARY = 201;
 
        /**
         * Authentication error was permanent and could not be recovered.
-        *
-        * @var constant
         */
        const AUTH_ERROR_PERMANENT = 202;
 
@@ -210,7 +204,7 @@ class RedisConnRef implements LoggerAwareInterface {
        /**
         * Handle authentication errors and automatically reauthenticate.
         *
-        * @return constant self::AUTH_NO_ERROR, self::AUTH_ERROR_TEMPORARY, or self::AUTH_ERROR_PERMANENT
+        * @return int self::AUTH_NO_ERROR, self::AUTH_ERROR_TEMPORARY, or self::AUTH_ERROR_PERMANENT
         */
        private function checkAuthentication() {
                if ( preg_match( '/^ERR operation not permitted\b/', $this->conn->getLastError() ) ) {
index e2d8107..2866a6c 100644 (file)
@@ -691,7 +691,7 @@ class SqlBagOStuff extends BagOStuff {
                        $decomp = gzinflate( $serial );
                        Wikimedia\restoreWarnings();
 
-                       if ( false !== $decomp ) {
+                       if ( $decomp !== false ) {
                                $serial = $decomp;
                        }
                }
index c933c15..cbc5966 100644 (file)
@@ -281,7 +281,7 @@ class ImagePage extends Article {
         */
        public function getEmptyPageParserOutput( ParserOptions $options ) {
                $this->loadFile();
-               if ( $this->mPage->getFile() && !$this->mPage->getFile()->isLocal() && 0 == $this->getId() ) {
+               if ( $this->mPage->getFile() && !$this->mPage->getFile()->isLocal() && $this->getId() == 0 ) {
                        return new ParserOutput();
                }
                return parent::getEmptyPageParserOutput( $options );
index 0553db9..a69b3d2 100644 (file)
@@ -53,7 +53,8 @@ class BlockLevelPass {
        }
 
        /**
-        * Private constructor
+        * @param string $text
+        * @param bool $lineStart
         */
        private function __construct( $text, $lineStart ) {
                $this->text = $text;
@@ -105,13 +106,13 @@ class BlockLevelPass {
        private function openList( $char ) {
                $result = $this->closeParagraph();
 
-               if ( '*' === $char ) {
+               if ( $char === '*' ) {
                        $result .= "<ul><li>";
-               } elseif ( '#' === $char ) {
+               } elseif ( $char === '#' ) {
                        $result .= "<ol><li>";
-               } elseif ( ':' === $char ) {
+               } elseif ( $char === ':' ) {
                        $result .= "<dl><dd>";
-               } elseif ( ';' === $char ) {
+               } elseif ( $char === ';' ) {
                        $result .= "<dl><dt>";
                        $this->DTopen = true;
                } else {
@@ -128,14 +129,14 @@ class BlockLevelPass {
         * @return string
         */
        private function nextItem( $char ) {
-               if ( '*' === $char || '#' === $char ) {
+               if ( $char === '*' || $char === '#' ) {
                        return "</li>\n<li>";
-               } elseif ( ':' === $char || ';' === $char ) {
+               } elseif ( $char === ':' || $char === ';' ) {
                        $close = "</dd>\n";
                        if ( $this->DTopen ) {
                                $close = "</dt>\n";
                        }
-                       if ( ';' === $char ) {
+                       if ( $char === ';' ) {
                                $this->DTopen = true;
                                return $close . '<dt>';
                        } else {
@@ -153,11 +154,11 @@ class BlockLevelPass {
         * @return string
         */
        private function closeList( $char ) {
-               if ( '*' === $char ) {
+               if ( $char === '*' ) {
                        $text = "</li></ul>";
-               } elseif ( '#' === $char ) {
+               } elseif ( $char === '#' ) {
                        $text = "</li></ol>";
-               } elseif ( ':' === $char ) {
+               } elseif ( $char === ':' ) {
                        if ( $this->DTopen ) {
                                $this->DTopen = false;
                                $text = "</dt></dl>";
@@ -271,7 +272,7 @@ class BlockLevelPass {
                                        $char = $prefix[$commonPrefixLength];
                                        $output .= $this->openList( $char );
 
-                                       if ( ';' === $char ) {
+                                       if ( $char === ';' ) {
                                                # @todo FIXME: This is dupe of code above
                                                if ( $this->findColonNoLinks( $t, $term, $t2 ) !== false ) {
                                                        $t = $t2;
@@ -288,7 +289,7 @@ class BlockLevelPass {
                        }
 
                        # If we have no prefixes, go to paragraph mode.
-                       if ( 0 == $prefixLength ) {
+                       if ( $prefixLength == 0 ) {
                                # No prefix (not in list)--go to paragraph mode
                                # @todo consider using a stack for nestable elements like span, table and div
 
@@ -339,7 +340,7 @@ class BlockLevelPass {
                                        }
                                        $inBlockElem = !$closeMatch;
                                } elseif ( !$inBlockElem && !$this->inPre ) {
-                                       if ( ' ' == substr( $t, 0, 1 )
+                                       if ( substr( $t, 0, 1 ) == ' '
                                                && ( $this->lastSection === 'pre' || trim( $t ) != '' )
                                                && !$inBlockquote
                                        ) {
index 81e23ad..5f7621e 100644 (file)
@@ -3146,7 +3146,7 @@ class Parser {
                # $args is a list of argument nodes, starting from index 0, not including $part1
                # @todo FIXME: If piece['parts'] is null then the call to getLength()
                # below won't work b/c this $args isn't an object
-               $args = ( null == $piece['parts'] ) ? [] : $piece['parts'];
+               $args = ( $piece['parts'] == null ) ? [] : $piece['parts'];
 
                $profileSection = null; // profile templates
 
@@ -5470,6 +5470,7 @@ class Parser {
         * Adds an entry to appropriate link tables.
         *
         * @since 1.32
+        * @param string $value
         * @return array of `[ type, target ]`, where:
         *   - `type` is one of:
         *     - `null`: Given value is not a valid link target, use default
index 032d481..8407992 100644 (file)
@@ -650,8 +650,10 @@ class ParserOptions {
 
        /**
         * Lazy initializer for dateFormat
+        * @param ParserOptions $popt
+        * @return string
         */
-       private static function initDateFormat( $popt ) {
+       private static function initDateFormat( ParserOptions $popt ) {
                return $popt->mUser->getDatePreference();
        }
 
index 769954d..512a6b3 100644 (file)
@@ -127,7 +127,7 @@ class DefaultPreferencesFactory implements PreferencesFactory {
                $this->watchlistPreferences( $user, $context, $preferences );
                $this->searchPreferences( $preferences );
 
-               Hooks::run( 'GetPreferences', [ $user, &$preferences, $context ] );
+               Hooks::run( 'GetPreferences', [ $user, &$preferences ] );
 
                $this->loadPreferenceValues( $user, $context, $preferences );
                $this->logger->debug( "Created form descriptor for user '{$user->getName()}'" );
index 3ceb915..57392b9 100644 (file)
@@ -74,7 +74,7 @@ class ResourceLoaderContext implements MessageLocalizer {
                $this->user = $request->getRawVal( 'user' );
                $this->debug = $request->getFuzzyBool(
                        'debug',
-                       $resourceLoader->getConfig()->get( 'ResourceLoaderDebug' )
+                       $this->getConfig()->get( 'ResourceLoaderDebug' )
                );
                $this->only = $request->getRawVal( 'only', null );
                $this->version = $request->getRawVal( 'version', null );
@@ -89,7 +89,7 @@ class ResourceLoaderContext implements MessageLocalizer {
                $skinnames = Skin::getSkinNames();
                // If no skin is specified, or we don't recognize the skin, use the default skin
                if ( !$this->skin || !isset( $skinnames[$this->skin] ) ) {
-                       $this->skin = $resourceLoader->getConfig()->get( 'DefaultSkin' );
+                       $this->skin = $this->getConfig()->get( 'DefaultSkin' );
                }
        }
 
@@ -149,6 +149,13 @@ class ResourceLoaderContext implements MessageLocalizer {
                return $this->resourceLoader;
        }
 
+       /**
+        * @return Config
+        */
+       public function getConfig() {
+               return $this->getResourceLoader()->getConfig();
+       }
+
        /**
         * @return WebRequest
         */
@@ -181,7 +188,7 @@ class ResourceLoaderContext implements MessageLocalizer {
                        $lang = $this->getRequest()->getRawVal( 'lang', '' );
                        // Stricter version of RequestContext::sanitizeLangCode()
                        if ( !Language::isValidBuiltInCode( $lang ) ) {
-                               $lang = $this->getResourceLoader()->getConfig()->get( 'LanguageCode' );
+                               $lang = $this->getConfig()->get( 'LanguageCode' );
                        }
                        $this->language = $lang;
                }
index 2941f0a..a0100ca 100644 (file)
@@ -287,6 +287,7 @@ abstract class SearchEngine {
         * @return SearchResultSet
         */
        public static function getNearMatchResultSet( $searchterm ) {
+               wfDeprecated( __METHOD__, '1.27' );
                return static::defaultNearMatcher()->getNearMatchResultSet( $searchterm );
        }
 
index 5dfc4df..469502f 100644 (file)
@@ -519,7 +519,7 @@ class SearchHighlighter {
                $extract = "";
                $contLang = MediaWikiServices::getInstance()->getContentLanguage();
                foreach ( $lines as $line ) {
-                       if ( 0 == $contextlines ) {
+                       if ( $contextlines == 0 ) {
                                break;
                        }
                        ++$lineno;
index 91d9ef7..b106d11 100644 (file)
@@ -44,6 +44,7 @@ class SiteSQLStore {
         * @return SiteStore
         */
        public static function newInstance( $sitesTable = null, BagOStuff $cache = null ) {
+               wfDeprecated( __METHOD__, '1.27' );
                if ( $sitesTable !== null ) {
                        throw new InvalidArgumentException(
                                __METHOD__ . ': $sitesTable parameter is unused and must be null'
index 3247f1d..809d411 100644 (file)
@@ -196,14 +196,15 @@ abstract class Skin extends ContextSource {
                        'core' => [
                                'site',
                                'mediawiki.page.startup',
-                               'mediawiki.user',
                        ],
                        // modules that enhance the content in some way
                        'content' => [
                                'mediawiki.page.ready',
                        ],
                        // modules relating to search functionality
-                       'search' => [],
+                       'search' => [
+                               'mediawiki.searchSuggest',
+                       ],
                        // modules relating to functionality relating to watching an article
                        'watch' => [],
                        // modules which relate to the current users preferences
@@ -242,8 +243,6 @@ abstract class Skin extends ContextSource {
                        $modules['watch'][] = 'mediawiki.page.watch.ajax';
                }
 
-               $modules['search'][] = 'mediawiki.searchSuggest';
-
                if ( $user->getBoolOption( 'editsectiononrightclick' ) ) {
                        $modules['user'][] = 'mediawiki.action.view.rightClickEdit';
                }
index 778a3b3..20fc9b3 100644 (file)
@@ -170,7 +170,7 @@ class SparqlClient {
                $status = $request->execute();
 
                if ( !$status->isOK() ) {
-                       throw new SparqlException( "HTTP error: {$status->getWikiText()}" );
+                       throw new SparqlException( 'HTTP error: ' . $status->getWikiText( false, false, 'en' ) );
                }
                $result = $request->getContent();
                \Wikimedia\suppressWarnings();
index 8466399..c56cc65 100644 (file)
@@ -456,7 +456,7 @@ abstract class AuthManagerSpecialPage extends SpecialPage {
                                // Let's just submit the data to AuthManager directly instead.
                                LoggerFactory::getInstance( 'authentication' )
                                        ->warning( 'Validation error on return', [ 'data' => $form->mFieldData,
-                                               'status' => $status->getWikiText() ] );
+                                               'status' => $status->getWikiText( false, false, 'en' ) ] );
                                $status = $this->handleFormSubmit( $form->mFieldData );
                        }
                }
index e043a72..78b8f8a 100644 (file)
@@ -66,7 +66,6 @@ class SpecialBlock extends FormSpecialPage {
         */
        protected function checkExecutePermissions( User $user ) {
                parent::checkExecutePermissions( $user );
-
                # T17810: blocked admins should have limited access here
                $status = self::checkUnblockSelf( $this->target, $user );
                if ( $status !== true ) {
@@ -74,6 +73,15 @@ class SpecialBlock extends FormSpecialPage {
                }
        }
 
+       /**
+        * We allow certain special cases where user is blocked
+        *
+        * @return bool
+        */
+       public function requiresUnblock() {
+               return false;
+       }
+
        /**
         * Handle some magic here
         *
@@ -1022,7 +1030,11 @@ class SpecialBlock extends FormSpecialPage {
         * T17810: blocked admins should not be able to block/unblock
         * others, and probably shouldn't be able to unblock themselves
         * either.
-        * @param User|int|string $user
+        *
+        * Exception: Users can block the user who blocked them, to reduce
+        * advantage of a malicious account blocking all admins (T150826)
+        *
+        * @param User|int|string $user Target to block or unblock
         * @param User $performer User doing the request
         * @return bool|string True or error message key
         */
@@ -1032,7 +1044,6 @@ class SpecialBlock extends FormSpecialPage {
                } elseif ( is_string( $user ) ) {
                        $user = User::newFromName( $user );
                }
-
                if ( $performer->isBlocked() ) {
                        if ( $user instanceof User && $user->getId() == $performer->getId() ) {
                                # User is trying to unblock themselves
@@ -1044,6 +1055,19 @@ class SpecialBlock extends FormSpecialPage {
                                } else {
                                        return 'ipbnounblockself';
                                }
+                       } elseif (
+                               $user instanceof User &&
+                               $performer->getBlock() instanceof Block &&
+                               $performer->getBlock()->getBy() &&
+                               $performer->getBlock()->getBy() === $user->getId()
+                       ) {
+                               // Allow users to block the user that blocked them.
+                               // This is to prevent a situation where a malicious user
+                               // blocks all other users. This way, the non-malicious
+                               // user can block the malicious user back, resulting
+                               // in a stalemate.
+                               return true;
+
                        } else {
                                # User is trying to block/unblock someone else
                                return 'ipbblocked';
index a2c2530..c7c45b5 100644 (file)
@@ -84,7 +84,7 @@ class SpecialLockdb extends FormSpecialPage {
                $fp = fopen( $this->getConfig()->get( 'ReadOnlyFile' ), 'w' );
                Wikimedia\restoreWarnings();
 
-               if ( false === $fp ) {
+               if ( $fp === false ) {
                        # This used to show a file not found error, but the likeliest reason for fopen()
                        # to fail at this point is insufficient permission to write to the file...good old
                        # is_writable() is plain wrong in some cases, it seems...
index 3ce786e..599ab31 100644 (file)
@@ -122,7 +122,7 @@ class MovePageForm extends UnlistedSpecialPage {
                $this->moveOverShared = $request->getBool( 'wpMoveOverSharedFile' );
                $this->watch = $request->getCheck( 'wpWatch' ) && $user->isLoggedIn();
 
-               if ( 'submit' == $request->getVal( 'action' ) && $request->wasPosted()
+               if ( $request->getVal( 'action' ) == 'submit' && $request->wasPosted()
                        && $user->matchEditToken( $request->getVal( 'wpEditToken' ) )
                ) {
                        $this->doSubmit();
index 5ba7c88..8051b0b 100644 (file)
@@ -76,19 +76,19 @@ class SpecialNewpages extends IncludableSpecialPage {
        protected function parseParams( $par ) {
                $bits = preg_split( '/\s*,\s*/', trim( $par ) );
                foreach ( $bits as $bit ) {
-                       if ( 'shownav' == $bit ) {
+                       if ( $bit === 'shownav' ) {
                                $this->showNavigation = true;
                        }
-                       if ( 'hideliu' === $bit ) {
+                       if ( $bit === 'hideliu' ) {
                                $this->opts->setValue( 'hideliu', true );
                        }
-                       if ( 'hidepatrolled' == $bit ) {
+                       if ( $bit === 'hidepatrolled' ) {
                                $this->opts->setValue( 'hidepatrolled', true );
                        }
-                       if ( 'hidebots' == $bit ) {
+                       if ( $bit === 'hidebots' ) {
                                $this->opts->setValue( 'hidebots', true );
                        }
-                       if ( 'showredirs' == $bit ) {
+                       if ( $bit === 'showredirs' ) {
                                $this->opts->setValue( 'hideredirs', false );
                        }
                        if ( is_numeric( $bit ) ) {
index 9fcbf15..bcb3b85 100644 (file)
@@ -76,6 +76,11 @@ class UnusedimagesPage extends ImageQueryPage {
        }
 
        function getPageHeader() {
+               if ( $this->getConfig()->get( 'CountCategorizedImagesAsUsed' ) ) {
+                       return $this->msg(
+                               'unusedimagestext-categorizedimgisused'
+                       )->parseAsBlock();
+               }
                return $this->msg( 'unusedimagestext' )->parseAsBlock();
        }
 
index 8eee37c..766e190 100644 (file)
@@ -200,7 +200,7 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                        && ( $hidetrans || !$tlRes->numRows() )
                        && ( $hideimages || !$ilRes->numRows() )
                ) {
-                       if ( 0 == $level ) {
+                       if ( $level == 0 ) {
                                if ( !$this->including() ) {
                                        $out->addHTML( $this->whatlinkshereForm() );
 
@@ -461,11 +461,11 @@ class SpecialWhatLinksHere extends IncludableSpecialPage {
                $changed = $this->opts->getChangedValues();
                unset( $changed['target'] ); // Already in the request title
 
-               if ( 0 != $prevId ) {
+               if ( $prevId != 0 ) {
                        $overrides = [ 'from' => $this->opts->getValue( 'back' ) ];
                        $prev = $this->makeSelfLink( $prev, array_merge( $changed, $overrides ) );
                }
-               if ( 0 != $nextId ) {
+               if ( $nextId != 0 ) {
                        $overrides = [ 'from' => $nextId, 'back' => $prevId ];
                        $next = $this->makeSelfLink( $next, array_merge( $changed, $overrides ) );
                }
index 6d5f64b..a9479c4 100644 (file)
@@ -372,12 +372,6 @@ class AllMessagesTablePager extends TablePager {
                        $arr['class'] = 'allmessages-customised';
                }
 
-               if ( !$isSecond ) {
-                       $arr['id'] = Sanitizer::escapeIdForAttribute(
-                               'msg_' . $this->getLanguage()->lcfirst( $row->am_title )
-                       );
-               }
-
                return $arr;
        }
 
index 5cfc437..510bf92 100644 (file)
@@ -415,9 +415,10 @@ class ContribsPager extends RangeChronologicalPager {
         * id then null is returned.
         *
         * @param object $row
+        * @param Title|null $title
         * @return Revision|null
         */
-       public function tryToCreateValidRevision( $row ) {
+       public function tryToCreateValidRevision( $row, $title = null ) {
                /*
                 * There may be more than just revision rows. To make sure that we'll only be processing
                 * revisions here, let's _try_ to build a revision out of our row (without displaying
@@ -427,7 +428,7 @@ class ContribsPager extends RangeChronologicalPager {
                 */
                Wikimedia\suppressWarnings();
                try {
-                       $rev = new Revision( $row );
+                       $rev = new Revision( $row, 0, $title );
                        $validRevision = (bool)$rev->getId();
                } catch ( Exception $e ) {
                        $validRevision = false;
@@ -455,11 +456,16 @@ class ContribsPager extends RangeChronologicalPager {
 
                $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
 
-               $rev = $this->tryToCreateValidRevision( $row );
+               $page = null;
+               // Create a title for the revision if possible
+               // Rows from the hook may not include title information
+               if ( isset( $row->page_namespace ) && isset( $row->page_title ) ) {
+                       $page = Title::newFromRow( $row );
+               }
+               $rev = $this->tryToCreateValidRevision( $row, $page );
                if ( $rev ) {
                        $attribs['data-mw-revid'] = $rev->getId();
 
-                       $page = Title::newFromRow( $row );
                        $link = $linkRenderer->makeLink(
                                $page,
                                $page->getPrefixedText(),
index f6a4c06..e06bfb5 100644 (file)
@@ -325,7 +325,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
 
                                        # Redundant interwiki prefix to the local wiki
                                        foreach ( $this->localInterwikis as $localIW ) {
-                                               if ( 0 == strcasecmp( $parts['interwiki'], $localIW ) ) {
+                                               if ( strcasecmp( $parts['interwiki'], $localIW ) == 0 ) {
                                                        if ( $dbkey == '' ) {
                                                                # Empty self-links should point to the Main Page, to ensure
                                                                # compatibility with cross-wiki transclusions and the like.
@@ -363,7 +363,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                } while ( true );
 
                $fragment = strstr( $dbkey, '#' );
-               if ( false !== $fragment ) {
+               if ( $fragment !== false ) {
                        $parts['fragment'] = str_replace( '_', ' ', substr( $fragment, 1 ) );
                        $dbkey = substr( $dbkey, 0, strlen( $dbkey ) - strlen( $fragment ) );
                        # remove whitespace again: prevents "Foo_bar_#"
@@ -438,7 +438,7 @@ class MediaWikiTitleCodec implements TitleFormatter, TitleParser {
                }
 
                // Any remaining initial :s are illegal.
-               if ( $dbkey !== '' && ':' == $dbkey[0] ) {
+               if ( $dbkey !== '' && $dbkey[0] == ':' ) {
                        throw new MalformedTitleException( 'title-invalid-leading-colon', $text );
                }
 
index ea805fb..c7dbf83 100644 (file)
@@ -1344,7 +1344,7 @@ abstract class UploadBase {
                }
 
                foreach ( $tags as $tag ) {
-                       if ( false !== strpos( $chunk, $tag ) ) {
+                       if ( strpos( $chunk, $tag ) !== false ) {
                                wfDebug( __METHOD__ . ": found something that may make it be mistaken for html: $tag\n" );
 
                                return true;
index f15df06..1412215 100644 (file)
@@ -55,13 +55,6 @@ class User implements IDBAccessObject, UserIdentity {
         */
        const INVALID_TOKEN = '*** INVALID ***';
 
-       /**
-        * Global constant made accessible as class constants so that autoloader
-        * magic can be used.
-        * @deprecated since 1.27, use \MediaWiki\Session\Token::SUFFIX
-        */
-       const EDIT_TOKEN_SUFFIX = Token::SUFFIX;
-
        /**
         * @const int Serialized record version.
         */
@@ -1831,7 +1824,7 @@ class User implements IDBAccessObject, UserIdentity {
        private function getBlockedStatus( $bFromReplica = true ) {
                global $wgProxyWhitelist, $wgUser, $wgApplyIpBlocksToXff, $wgSoftBlockRanges;
 
-               if ( -1 != $this->mBlockedby ) {
+               if ( $this->mBlockedby != -1 ) {
                        return;
                }
 
@@ -2548,8 +2541,14 @@ class User implements IDBAccessObject, UserIdentity {
                                        $this->mActorId = (int)$dbw->insertId();
                                } else {
                                        // Outdated cache?
-                                       list( , $options ) = DBAccessObjectUtils::getDBOptions( $this->queryFlagsUsed );
-                                       $this->mActorId = (int)$dbw->selectField( 'actor', 'actor_id', $q, __METHOD__, $options );
+                                       // Use LOCK IN SHARE MODE to bypass any MySQL REPEATABLE-READ snapshot.
+                                       $this->mActorId = (int)$dbw->selectField(
+                                               'actor',
+                                               'actor_id',
+                                               $q,
+                                               __METHOD__,
+                                               [ 'LOCK IN SHARE MODE' ]
+                                       );
                                        if ( !$this->mActorId ) {
                                                throw new CannotCreateActorException(
                                                        "Cannot create actor ID for user_id={$this->getId()} user_name={$this->getName()}"
@@ -4117,7 +4116,7 @@ class User implements IDBAccessObject, UserIdentity {
         */
        public function setCookies( $request = null, $secure = null, $rememberMe = false ) {
                $this->load();
-               if ( 0 == $this->mId ) {
+               if ( $this->mId == 0 ) {
                        return;
                }
 
@@ -4211,7 +4210,7 @@ class User implements IDBAccessObject, UserIdentity {
                }
 
                $this->load();
-               if ( 0 == $this->mId ) {
+               if ( $this->mId == 0 ) {
                        return; // anon
                }
 
index 0a50fcd..f62ee83 100644 (file)
@@ -20,7 +20,7 @@ class TitlesMultiselectWidget extends \OOUI\Widget {
 
        /**
         * @param array $config Configuration options
-        *   - array $config['titles'] Array of titles to use as preset data
+        *   - array $config['default'] Array of titles to use as preset data
         *   - array $config['placeholder'] Placeholder message for input
         *   - array $config['name'] Name attribute (used in forms)
         *   - number $config['tagLimit'] Maximum number of selected titles
index d7cd8b5..1c2e4f1 100644 (file)
@@ -2189,7 +2189,7 @@ class Language {
                }
 
                # No difference ? Return time unchanged
-               if ( 0 == $minDiff ) {
+               if ( $minDiff == 0 ) {
                        return $ts;
                }
 
index 7353a82..b9da24a 100644 (file)
@@ -760,14 +760,10 @@ class LanguageKk_cyrl extends Language {
                                if ( strcmp( $xvalue, $yvalue ) == 0 ) {
                                        $lastLetter[1] = $xvalue;
                                        break;
-                               } else {
-                                       continue;
                                }
                        }
                        if ( $lastLetter[1] !== null ) {
                                break;
-                       } else {
-                               continue;
                        }
                }
 
index 437651c..0101b27 100644 (file)
@@ -72,15 +72,11 @@ class LanguageTyv extends Language {
                                if ( strcmp( $xvalue, $yvalue ) == 0 ) {
                                        $wordLastVowel = $xvalue;
                                        break;
-                               } else {
-                                       continue;
                                }
                        }
 
                        if ( $wordLastVowel !== null ) {
                                break;
-                       } else {
-                               continue;
                        }
                }
 
index 617545d..cdec27d 100644 (file)
@@ -63,6 +63,7 @@ public static $zh2Hant = [
 '䀥' => '䁻',
 '䁖' => '瞜',
 '䂵' => '碽',
+'䃅' => '磾',
 '䅉' => '稏',
 '䅪' => '𥢢',
 '䇲' => '筴',
@@ -425,6 +426,7 @@ public static $zh2Hant = [
 '埚' => '堝',
 '堑' => '塹',
 '堕' => '墮',
+'塆' => '壪',
 '墙' => '牆',
 '壮' => '壯',
 '声' => '聲',
@@ -2041,7 +2043,7 @@ public static $zh2Hant = [
 '锅' => '鍋',
 '锆' => '鋯',
 '锇' => '鋨',
-'é\94\88' => 'é\8a¹',
+'é\94\88' => 'é\8f½',
 '锉' => '銼',
 '锊' => '鋝',
 '锋' => '鋒',
@@ -3039,6 +3041,7 @@ public static $zh2Hant = [
 '𫞩' => '璊',
 '𫟅' => '綡',
 '𫟦' => '䡵',
+'𫟷' => '鉝',
 '𫟹' => '鉷',
 '𫟼' => '鐽',
 '𫠆' => '頍',
@@ -3149,17 +3152,15 @@ public static $zh2Hant = [
 '𬹼' => '齘',
 '𬺈' => '齮',
 '𬺓' => '齼',
-'0出现' => '0出現',
-'0出現' => '0出現',
-'0出線' => '0出線',
-'0出线' => '0出線',
 '0只支持' => '0只支持',
 '0只支援' => '0只支援',
 '0周后' => '0周後',
 '0天后' => '0天後',
 '0只' => '0隻',
 '0余' => '0餘',
-'0出' => '0齣',
+'0出。' => '0齣。',
+'0出电影' => '0齣電影',
+'0出,' => '0齣,',
 '1只支持' => '1只支持',
 '1只支援' => '1只支援',
 '1周后' => '1周後',
@@ -3357,7 +3358,6 @@ public static $zh2Hant = [
 '不丑' => '不醜',
 '不采声' => '不采聲',
 '不采聲' => '不采聲',
-'不锈钢' => '不鏽鋼',
 '不食乾腊' => '不食乾腊',
 '不食干腊' => '不食乾腊',
 '不斗' => '不鬥',
@@ -3624,9 +3624,6 @@ public static $zh2Hant = [
 '干鱼' => '乾魚',
 '干鲜' => '乾鮮',
 '干面' => '乾麵',
-'乱发生' => '亂發生',
-'乱发脾气' => '亂發脾氣',
-'乱发' => '亂髮',
 '乱斗' => '亂鬥',
 '乱哄哄' => '亂鬨鬨',
 '了然后' => '了然後',
@@ -3773,7 +3770,6 @@ public static $zh2Hant = [
 '于洪區' => '于洪區',
 '于浩威' => '于浩威',
 '于海' => '于海',
-'于海洋' => '于海洋',
 '于湘兰' => '于湘蘭',
 '于湘蘭' => '于湘蘭',
 '于汉超' => '于漢超',
@@ -3904,8 +3900,6 @@ public static $zh2Hant = [
 '仲裁制' => '仲裁制',
 '件钟' => '件鐘',
 '价川' => '价川',
-'任何钟' => '任何鐘',
-'任何钟表' => '任何鐘錶',
 '仿制' => '仿製',
 '伊于湖底' => '伊于湖底',
 '伊府面' => '伊府麵',
@@ -3944,6 +3938,7 @@ public static $zh2Hant = [
 '余威德' => '余威德',
 '余子明' => '余子明',
 '余思敏' => '余思敏',
+'佛历' => '佛曆',
 '佛罗棱萨' => '佛羅稜薩',
 '佛钟' => '佛鐘',
 '作品里' => '作品裡',
@@ -4183,7 +4178,11 @@ public static $zh2Hant = [
 '冬游' => '冬遊',
 '冰山里' => '冰山裡',
 '冶游' => '冶遊',
+'冷面天使' => '冷面天使',
+'冷面杀手' => '冷面殺手',
+'冷面殺手' => '冷面殺手',
 '冷面相' => '冷面相',
+'冷面笑匠' => '冷面笑匠',
 '冷面' => '冷麵',
 '准三后' => '准三后',
 '准保护' => '准保護',
@@ -4441,7 +4440,6 @@ public static $zh2Hant = [
 '只影響' => '只影響',
 '只采' => '只採',
 '只冲' => '只衝',
-'只要功夫深,铁杵磨成锈花针' => '只要功夫深,鐵杵磨成鏽花針',
 '只身上已' => '只身上已',
 '只身上有' => '只身上有',
 '只身上沒' => '只身上沒',
@@ -4554,7 +4552,6 @@ public static $zh2Hant = [
 '含齿戴发' => '含齒戴髮',
 '吸干' => '吸乾',
 '吹干' => '吹乾',
-'吹发' => '吹髮',
 '吾为之范我驰驱' => '吾爲之範我馳驅',
 '吕后' => '呂后',
 '呂后' => '呂后',
@@ -4608,9 +4605,6 @@ public static $zh2Hant = [
 '喂喲' => '喂喲',
 '喂!' => '喂!',
 '喂,' => '喂,',
-'喜欢表' => '喜歡錶',
-'喜欢钟' => '喜歡鐘',
-'喜欢钟表' => '喜歡鐘錶',
 '喝干' => '喝乾',
 '喧哗' => '喧譁',
 '喧哄' => '喧鬨',
@@ -4632,6 +4626,7 @@ public static $zh2Hant = [
 '噙齿戴发' => '噙齒戴髮',
 '当啷' => '噹啷',
 '当当' => '噹噹',
+'尝粪' => '嚐糞',
 '噜苏' => '嚕囌',
 '啮合' => '嚙合',
 '啮齿类' => '嚙齒類',
@@ -5169,6 +5164,7 @@ public static $zh2Hant = [
 '干路' => '幹路',
 '干办' => '幹辦',
 '干这' => '幹這',
+'干过' => '幹過',
 '干道' => '幹道',
 '干部' => '幹部',
 '干革命' => '幹革命',
@@ -5697,12 +5693,12 @@ public static $zh2Hant = [
 '拙朴' => '拙樸',
 '拚舍' => '拚捨',
 '拜托' => '拜託',
-'括发' => '括髮',
 '拭干' => '拭乾',
 '拮据' => '拮据',
 '拳局' => '拳跼',
 '拼斗' => '拼鬥',
 '拾沈' => '拾瀋',
+'拿不准' => '拿不準',
 '拿准' => '拿準',
 '拿破仑' => '拿破崙',
 '挌斗' => '挌鬥',
@@ -5713,7 +5709,6 @@ public static $zh2Hant = [
 '捉奸贼' => '捉奸賊',
 '捉奸党' => '捉奸黨',
 '捉奸' => '捉姦',
-'捉发' => '捉髮',
 '捍御' => '捍禦',
 '捏面人' => '捏麵人',
 '舍不得' => '捨不得',
@@ -5945,7 +5940,6 @@ public static $zh2Hant = [
 '教范' => '教範',
 '敢干' => '敢幹',
 '敢情欲' => '敢情欲',
-'敢斗了胆' => '敢斗了膽',
 '散伙' => '散夥',
 '散荡' => '散蕩',
 '敦朴' => '敦樸',
@@ -5983,6 +5977,7 @@ public static $zh2Hant = [
 '文思泉涌' => '文思泉湧',
 '文杰' => '文杰',
 '文采郁郁' => '文采郁郁',
+'斗法会' => '斗法會',
 '斗牛星' => '斗牛星',
 '斫雕为朴' => '斫雕為樸',
 '新井里美' => '新井里美',
@@ -5992,6 +5987,7 @@ public static $zh2Hant = [
 '新历史' => '新歷史',
 '新扎' => '新紮',
 '斲雕为朴' => '斲雕為樸',
+'断发现' => '斷發現',
 '断发' => '斷髮',
 '断发文身' => '斷髮文身',
 '方便面' => '方便麵',
@@ -6000,7 +5996,9 @@ public static $zh2Hant = [
 '于山东' => '於山東',
 '于山西' => '於山西',
 '于海上' => '於海上',
+'于海平面' => '於海平面',
 '于海拔' => '於海拔',
+'于海洋' => '於海洋',
 '于海边' => '於海邊',
 '于震中' => '於震中',
 '于震前' => '於震前',
@@ -6267,6 +6265,7 @@ public static $zh2Hant = [
 '朴父' => '樸父',
 '朴直' => '樸直',
 '朴素' => '樸素',
+'朴茨茅斯' => '樸茨茅斯',
 '朴讷' => '樸訥',
 '朴质' => '樸質',
 '朴鄙' => '樸鄙',
@@ -6723,9 +6722,6 @@ public static $zh2Hant = [
 '狐借虎威' => '狐藉虎威',
 '猛冲' => '猛衝',
 '猜三划五' => '猜三划五',
-'犹如表' => '猶如錶',
-'犹如钟' => '猶如鐘',
-'犹如钟表' => '猶如鐘錶',
 '狱里' => '獄裡',
 '奖杯' => '獎盃',
 '独裁制' => '獨裁制',
@@ -6751,6 +6747,11 @@ public static $zh2Hant = [
 '理个发' => '理個髮',
 '理完发' => '理完髮',
 '理次发' => '理次髮',
+'理发动' => '理發動',
+'理发展' => '理發展',
+'理发现' => '理發現',
+'理发生' => '理發生',
+'理发表' => '理發表',
 '理发' => '理髮',
 '琴钟' => '琴鐘',
 '珐琅' => '琺瑯',
@@ -6767,11 +6768,13 @@ public static $zh2Hant = [
 '甜面酱' => '甜麵醬',
 '生力面' => '生力麵',
 '生物钟' => '生物鐘',
-'生发生' => '生發生',
 '生华发' => '生華髮',
 '生姜' => '生薑',
-'生锈' => '生鏽',
-'生发' => '生髮',
+'生发剂' => '生髮劑',
+'生发水' => '生髮水',
+'生发油' => '生髮油',
+'生发液' => '生髮液',
+'生发药' => '生髮藥',
 '苏醒' => '甦醒',
 '用法里' => '用法裡',
 '甩发' => '甩髮',
@@ -6780,6 +6783,7 @@ public static $zh2Hant = [
 '田里' => '田裡',
 '田里穗' => '田里穗',
 '由余' => '由余',
+'由于' => '由於',
 '甲胄' => '甲冑',
 '甲后路' => '甲后路',
 '男仆' => '男僕',
@@ -6789,7 +6793,6 @@ public static $zh2Hant = [
 '留发行' => '留發行',
 '留长发' => '留長髮',
 '留发' => '留髮',
-'毕生发展' => '畢生發展',
 '画里' => '畫裡',
 '当准' => '當準',
 '当当丁丁' => '當當丁丁',
@@ -6817,6 +6820,7 @@ public static $zh2Hant = [
 '发状态' => '發狀態',
 '发状况' => '發狀況',
 '发签' => '發籤',
+'发表' => '發表',
 '发松' => '發鬆',
 '发面' => '發麵',
 '白干儿' => '白乾兒',
@@ -6893,6 +6897,7 @@ public static $zh2Hant = [
 '相干' => '相干',
 '相冲' => '相衝',
 '相斗' => '相鬥',
+'盼复' => '盼覆',
 '看法里' => '看法裡',
 '看准' => '看準',
 '看表面' => '看表面',
@@ -6940,7 +6945,11 @@ public static $zh2Hant = [
 '研制' => '研製',
 '砰当' => '砰噹',
 '破鉴' => '破鑑',
+'朱卷' => '硃卷',
+'朱批' => '硃批',
 '朱砂' => '硃砂',
+'朱笔' => '硃筆',
+'朱谕' => '硃諭',
 '硬干' => '硬幹',
 '确瘠' => '确瘠',
 '碑志' => '碑誌',
@@ -7047,6 +7056,7 @@ public static $zh2Hant = [
 '谷胱' => '穀胱',
 '谷舱' => '穀艙',
 '谷苗' => '穀苗',
+'谷茬' => '穀茬',
 '谷草' => '穀草',
 '谷贵饿农' => '穀貴餓農',
 '谷贱伤农' => '穀賤傷農',
@@ -7183,6 +7193,8 @@ public static $zh2Hant = [
 '纸扎' => '紙紮',
 '素数里' => '素數裡',
 '素朴' => '素樸',
+'素发现' => '素發現',
+'素发生' => '素發生',
 '素发' => '素髮',
 '素面' => '素麵',
 '索馬里' => '索馬里',
@@ -7212,12 +7224,16 @@ public static $zh2Hant = [
 '组里' => '組裡',
 '结伴同游' => '結伴同遊',
 '结伙' => '結夥',
+'结发育' => '結發育',
+'结发表' => '結發表',
 '结扎' => '結紮',
 '结余' => '結餘',
 '结发' => '結髮',
 '绞干' => '絞乾',
 '络腮胡' => '絡腮鬍',
 '丝恩发怨' => '絲恩髮怨',
+'丝发现' => '絲發現',
+'丝发生' => '絲發生',
 '丝制' => '絲製',
 '丝发' => '絲髮',
 '绑扎' => '綁紮',
@@ -7375,6 +7391,9 @@ public static $zh2Hant = [
 '胃脏' => '胃臟',
 '胃里' => '胃裡',
 '背地里' => '背地裡',
+'胎发展' => '胎發展',
+'胎发生' => '胎發生',
+'胎发育' => '胎發育',
 '胎发' => '胎髮',
 '胜肽' => '胜肽',
 '胜鍵' => '胜鍵',
@@ -7812,7 +7831,6 @@ public static $zh2Hant = [
 '复壁' => '複壁',
 '复姓' => '複姓',
 '复字键' => '複字鍵',
-'复审' => '複審',
 '复写' => '複寫',
 '复对数' => '複對數',
 '复平面' => '複平面',
@@ -7869,6 +7887,7 @@ public static $zh2Hant = [
 '要自制' => '要自制',
 '要冲' => '要衝',
 '复信' => '覆信',
+'复审' => '覆審',
 '复核' => '覆核',
 '见棱见角' => '見稜見角',
 '见素抱朴' => '見素抱樸',
@@ -7942,6 +7961,7 @@ public static $zh2Hant = [
 '评鉴' => '評鑑',
 '词干' => '詞幹',
 '词汇' => '詞彙',
+'词里' => '詞裡',
 '词余' => '詞餘',
 '试制' => '試製',
 '詩云' => '詩云',
@@ -8049,6 +8069,7 @@ public static $zh2Hant = [
 '译文里' => '譯文裡',
 '译制' => '譯製',
 '译注' => '譯註',
+'护发展' => '護發展',
 '护发' => '護髮',
 '变征' => '變徵',
 '变丑' => '變醜',
@@ -8484,6 +8505,7 @@ public static $zh2Hant = [
 '铜制' => '銅製',
 '铜钟' => '銅鐘',
 '铯钟' => '銫鐘',
+'锈病' => '銹病',
 '铝制' => '鋁製',
 '锌制' => '鋅製',
 '钢之炼金术师' => '鋼之鍊金術師',
@@ -8498,8 +8520,6 @@ public static $zh2Hant = [
 '表停' => '錶停',
 '表冠' => '錶冠',
 '表带' => '錶帶',
-'表快' => '錶快',
-'表慢' => '錶慢',
 '表板' => '錶板',
 '表王' => '錶王',
 '表盘' => '錶盤',
@@ -8523,9 +8543,6 @@ public static $zh2Hant = [
 '镰仓' => '鎌倉',
 '镇里' => '鎮裡',
 '镜图里' => '鏡圖裡',
-'锈病' => '鏽病',
-'锈菌' => '鏽菌',
-'锈蚀' => '鏽蝕',
 '钟上' => '鐘上',
 '钟下' => '鐘下',
 '钟不' => '鐘不',
@@ -8550,8 +8567,6 @@ public static $zh2Hant = [
 '钟形' => '鐘形',
 '钟形虫' => '鐘形蟲',
 '钟律' => '鐘律',
-'钟快' => '鐘快',
-'钟慢' => '鐘慢',
 '钟摆' => '鐘擺',
 '钟敲' => '鐘敲',
 '钟有' => '鐘有',
@@ -8580,9 +8595,6 @@ public static $zh2Hant = [
 '钟速' => '鐘速',
 '钟表' => '鐘錶',
 '钟表停' => '鐘錶停',
-'钟表快' => '鐘錶快',
-'钟表慢' => '鐘錶慢',
-'钟表王' => '鐘錶王',
 '钟表盘' => '鐘錶盤',
 '钟表速' => '鐘錶速',
 '钟关' => '鐘關',
@@ -8597,7 +8609,6 @@ public static $zh2Hant = [
 '钟鼎' => '鐘鼎',
 '钟鼓' => '鐘鼓',
 '铁制' => '鐵製',
-'铁锈' => '鐵鏽',
 '铁钟' => '鐵鐘',
 '铸钟' => '鑄鐘',
 '鉴别' => '鑑別',
@@ -8667,7 +8678,6 @@ public static $zh2Hant = [
 '防水表' => '防水錶',
 '防御' => '防禦',
 '防范' => '防範',
-'防锈' => '防鏽',
 '阿里' => '阿里',
 '附注' => '附註',
 '限制' => '限制',
@@ -8773,6 +8783,7 @@ public static $zh2Hant = [
 '面包住' => '面包住',
 '面包含' => '面包含',
 '面包围' => '面包圍',
+'面包圍' => '面包圍',
 '面包容' => '面包容',
 '面包庇' => '面包庇',
 '面包厢' => '面包廂',
@@ -8786,6 +8797,7 @@ public static $zh2Hant = [
 '面包着' => '面包著',
 '面包藏' => '面包藏',
 '面包装' => '面包裝',
+'面包裝' => '面包裝',
 '面包裹' => '面包裹',
 '面包起' => '面包起',
 '面包办' => '面包辦',
@@ -8821,7 +8833,11 @@ public static $zh2Hant = [
 '预报不准' => '預報不準',
 '预制' => '預製',
 '领袖欲' => '領袖慾',
+'头乱发' => '頭亂髮',
+'头发动' => '頭發動',
+'头发展' => '頭發展',
 '头发现' => '頭發現',
+'头发生' => '頭發生',
 '头里' => '頭裡',
 '头长发' => '頭長髮',
 '头发' => '頭髮',
@@ -9421,7 +9437,6 @@ public static $zh2Hant = [
 '齐王舍牛' => '齊王捨牛',
 '齿危发秀' => '齒危髮秀',
 '齿落发白' => '齒落髮白',
-'齿发' => '齒髮',
 '龙岩' => '龍巖',
 '龙卷' => '龍捲',
 '龙眼干' => '龍眼乾',
@@ -9921,6 +9936,7 @@ public static $zh2Hans = [
 '壠' => '垅',
 '壢' => '坜',
 '壩' => '坝',
+'壪' => '塆',
 '壯' => '壮',
 '壺' => '壶',
 '壻' => '婿',
@@ -10927,6 +10943,7 @@ public static $zh2Hans = [
 '矚' => '瞩',
 '矯' => '矫',
 '砲' => '炮',
+'硃' => '朱',
 '硜' => '硁',
 '硤' => '硖',
 '硨' => '砗',
@@ -10947,6 +10964,7 @@ public static $zh2Hans = [
 '磧' => '碛',
 '磯' => '矶',
 '磽' => '硗',
+'磾' => '䃅',
 '礄' => '硚',
 '礆' => '碱',
 '礎' => '础',
@@ -12205,6 +12223,7 @@ public static $zh2Hans = [
 '鉗' => '钳',
 '鉚' => '铆',
 '鉛' => '铅',
+'鉝' => '𫟷',
 '鉞' => '钺',
 '鉢' => '钵',
 '鉤' => '钩',
@@ -12246,6 +12265,7 @@ public static $zh2Hans = [
 '銳' => '锐',
 '銶' => '𨱇',
 '銷' => '销',
+'銹' => '锈',
 '銻' => '锑',
 '銼' => '锉',
 '鋁' => '铝',
@@ -13660,9 +13680,10 @@ public static $zh2Hans = [
 '土著' => '土著',
 '坤乾' => '坤乾',
 '墨瀋' => '墨渖',
+'覆審' => '复审',
 '覆查' => '复查',
 '覆核' => '复核',
-'è¦\86æ£\80' => '复检',
+'è¦\86檢' => '复检',
 '復甦' => '复苏',
 '大麴' => '大曲',
 '天道为乾' => '天道为乾',
@@ -13828,9 +13849,6 @@ public static $zh2Hans = [
 '朝乾夕惕' => '朝乾夕惕',
 '朱有燉' => '朱有燉',
 '朱淛' => '朱淛',
-'硃砂' => '朱砂',
-'硃紅' => '朱红',
-'硃色' => '朱色',
 '朴於宇同' => '朴於宇同',
 '李乾德' => '李乾德',
 '李乾順' => '李乾顺',
@@ -13879,6 +13897,7 @@ public static $zh2Hans = [
 '皁保' => '皁保',
 '目劄' => '目劄',
 '直昇' => '直升',
+'盼覆' => '盼复',
 '睹微知著' => '睹微知著',
 '瞭台' => '瞭台',
 '瞭臺' => '瞭台',
@@ -13887,6 +13906,7 @@ public static $zh2Hans = [
 '矇矓' => '矇眬',
 '石碁' => '石碁',
 '石碁鎮' => '石碁镇',
+'硃山湖' => '硃山湖',
 '碩託' => '硕讬',
 '鹼菜' => '硷菜',
 '碁圣' => '碁圣',
@@ -13974,9 +13994,9 @@ public static $zh2Hans = [
 '鍾意' => '钟意',
 '鍾靈' => '钟灵',
 '鍾愛' => '钟爱',
+'鍾祥' => '钟祥',
 '鐵鍊' => '铁链',
 '鉸鍊' => '铰链',
-'銀硃' => '银朱',
 '銀鍊' => '银链',
 '鍊子' => '链子',
 '鍊條' => '链条',
@@ -14073,6 +14093,8 @@ public static $zh2TW = [
 '落車' => '下車',
 '不來梅' => '不萊梅',
 '不来梅' => '不萊梅',
+'登巴萨' => '丹帕沙',
+'登巴薩' => '丹帕沙',
 '幺' => '么',
 '以太网' => '乙太網',
 '九杆' => '九桿',
@@ -14139,6 +14161,7 @@ public static $zh2TW = [
 '十杆' => '十桿',
 '特立尼达和托巴哥' => '千里達托貝哥',
 '特立尼達和多巴哥' => '千里達托貝哥',
+'不列颠哥伦比亚省' => '卑詩省',
 '南朝鲜' => '南韓',
 '卡斯特罗' => '卡斯楚',
 '卡塔尔' => '卡達',
@@ -14167,8 +14190,8 @@ public static $zh2TW = [
 '斯坦福大学' => '史丹福大學',
 '斯皮尔伯格' => '史匹柏',
 '斯特劳斯' => '史特勞斯',
-'斯威士兰' => '史瓦濟蘭',
-'斯威士蘭' => '史瓦濟蘭',
+'斯威士兰' => '史瓦帝尼',
+'斯威士蘭' => '史瓦帝尼',
 '斯蒂芬' => '史蒂芬',
 '斯大林' => '史達林',
 '結他' => '吉他',
@@ -14246,6 +14269,7 @@ public static $zh2TW = [
 '门德尔松' => '孟德爾頌',
 '安哈尔特' => '安哈特',
 '安哈爾特' => '安哈特',
+'安提瓜' => '安地卡',
 '安提瓜和巴布达' => '安地卡及巴布達',
 '安提瓜和巴布達' => '安地卡及巴布達',
 '洪都拉斯' => '宏都拉斯',
@@ -14266,6 +14290,7 @@ public static $zh2TW = [
 '尼日尔' => '尼日',
 '尼日爾' => '尼日',
 '雅马哈' => '山葉',
+'巴厘岛' => '峇里島',
 '特朗普' => '川普',
 '机床' => '工具機',
 '機床' => '工具機',
@@ -14284,10 +14309,10 @@ public static $zh2TW = [
 '勃蘭登堡' => '布蘭登堡',
 '布里斯托尔' => '布里斯托',
 '布隆方丹' => '布隆泉',
+'希拉克略' => '希拉克略',
 '希拉莉' => '希拉蕊',
 '希拉里' => '希拉蕊',
 '希特拉' => '希特勒',
-'傷殘奧林匹克' => '帕拉林匹克',
 '残疾人奥林匹克' => '帕拉林匹克',
 '残奥会' => '帕運會',
 '殘奧會' => '帕運會',
@@ -14344,6 +14369,7 @@ public static $zh2TW = [
 '揮杆' => '揮桿',
 '搜索引擎' => '搜尋引擎',
 '摩根士丹利' => '摩根史坦利',
+'阿拉伯撒哈拉' => '撒拉威阿拉伯',
 '台球' => '撞球',
 '攻打' => '攻打',
 '数字化' => '數位化',
@@ -14378,6 +14404,8 @@ public static $zh2TW = [
 '智能手機' => '智慧型手機',
 '智能电话' => '智慧型電話',
 '智能電話' => '智慧型電話',
+'智能机器人' => '智慧機器人',
+'智能機械人' => '智慧機器人',
 '知識產權' => '智慧財產權',
 '知识产权' => '智慧財產權',
 '萌島' => '曼島',
@@ -14420,7 +14448,6 @@ public static $zh2TW = [
 '標準杆' => '標準桿',
 '毛里求斯' => '模里西斯',
 '毛里裘斯' => '模里西斯',
-'机器人' => '機器人',
 '機械人' => '機器人',
 '概率' => '機率',
 '電單車' => '機車',
@@ -14492,6 +14519,7 @@ public static $zh2TW = [
 '徵狀' => '症狀',
 '勃朗宁' => '白朗寧',
 '百慕大' => '百慕達',
+'皮特凯恩' => '皮特肯',
 '卢旺达' => '盧安達',
 '盧旺達' => '盧安達',
 '真人騷' => '真人秀',
@@ -14671,14 +14699,19 @@ public static $zh2TW = [
 '浮罗交怡' => '蘭卡威',
 '浮羅交怡' => '蘭卡威',
 '劳拉' => '蘿拉',
+'虚拟现实' => '虛擬實境',
 '荧光' => '螢光',
 '荧屏' => '螢屏',
 '行人路权' => '行人路權',
 '行人路權' => '行人路權',
 '流動作業系統' => '行動作業系統',
 '移动操作系统' => '行動作業系統',
+'流動支付' => '行動支付',
+'移动支付' => '行動支付',
 '流動網絡' => '行動網路',
 '移动网络' => '行動網路',
+'流動裝置' => '行動裝置',
+'移动设备' => '行動裝置',
 '流動電話' => '行動電話',
 '移动电话' => '行動電話',
 '冲着' => '衝著',
@@ -15255,8 +15288,6 @@ public static $zh2HK = [
 '備著者' => '備著者',
 '備著述' => '備著述',
 '備著錄' => '備著錄',
-'帕拉林匹克' => '傷殘奧林匹克',
-'残疾人奥林匹克' => '傷殘奧林匹克',
 '傻里傻气' => '傻裏傻氣',
 '雇员' => '僱員',
 '雇用' => '僱用',
@@ -15351,6 +15382,7 @@ public static $zh2HK = [
 '北朝鲜' => '北韓',
 '区里有' => '區裏有',
 '区里的' => '區裏的',
+'不列颠哥伦比亚省' => '卑詩省',
 '南朝鲜' => '南韓',
 '波札那' => '博茨瓦納',
 '占卜' => '占卜',
@@ -15642,6 +15674,7 @@ public static $zh2HK = [
 '守著述' => '守著述',
 '守著錄' => '守著錄',
 '安哈特' => '安哈爾特',
+'安地卡' => '安提瓜',
 '安地卡及巴布達' => '安提瓜和巴布達',
 '定著' => '定着',
 '定著作' => '定著作',
@@ -15711,6 +15744,7 @@ public static $zh2HK = [
 '山里的' => '山裏的',
 '甘比亞' => '岡比亞',
 '岸裡' => '岸裡',
+'巴厘岛' => '峇里島',
 '工作台' => '工作枱',
 '已占' => '已佔',
 '巴塞罗那' => '巴塞隆拿',
@@ -16203,6 +16237,7 @@ public static $zh2HK = [
 '斥著述' => '斥著述',
 '斥著錄' => '斥著錄',
 '斯堪地那維亞' => '斯堪的納維亞',
+'史瓦帝尼' => '斯威士蘭',
 '史瓦濟蘭' => '斯威士蘭',
 '斯洛維尼亞' => '斯洛文尼亞',
 '紐澳良' => '新奧爾良',
@@ -16244,6 +16279,7 @@ public static $zh2HK = [
 '智慧型' => '智能',
 '智慧卡' => '智能卡',
 '智慧手機' => '智能手機',
+'智慧機器人' => '智能機械人',
 '暗地里' => '暗地裏',
 '暗沟里' => '暗溝裏',
 '暗著' => '暗着',
@@ -16372,6 +16408,7 @@ public static $zh2HK = [
 '死里求生' => '死裏求生',
 '死里逃生' => '死裏逃生',
 '帕運會' => '殘奧會',
+'帕拉林匹克' => '殘疾人奧林匹克',
 '殺著' => '殺着',
 '殺著作' => '殺著作',
 '殺著名' => '殺著名',
@@ -16446,8 +16483,12 @@ public static $zh2HK = [
 '活著錄' => '活著錄',
 '移动操作系统' => '流動作業系統',
 '行動作業系統' => '流動作業系統',
+'移动支付' => '流動支付',
+'行動支付' => '流動支付',
 '移动网络' => '流動網絡',
 '行動網路' => '流動網絡',
+'移动设备' => '流動裝置',
+'行動裝置' => '流動裝置',
 '移动电话' => '流動電話',
 '行動電話' => '流動電話',
 '流著' => '流着',
@@ -16685,6 +16726,7 @@ public static $zh2HK = [
 '疑著述' => '疑著述',
 '疑著錄' => '疑著錄',
 '狂牛症' => '瘋牛症',
+'丹帕沙' => '登巴薩',
 '发布' => '發佈',
 '發布' => '發佈',
 '發著' => '發着',
@@ -16698,6 +16740,7 @@ public static $zh2HK = [
 '百科里' => '百科裏',
 '的图里' => '的圖裏',
 '的山里' => '的山裏',
+'皮特凯恩' => '皮特肯',
 '皮里春秋' => '皮裏春秋',
 '皮里阳秋' => '皮裏陽秋',
 '皺著' => '皺着',
@@ -17266,6 +17309,7 @@ public static $zh2HK = [
 '記著述' => '記著述',
 '記著錄' => '記著錄',
 '記錄著' => '記錄着',
+'词里' => '詞裏',
 '試著' => '試着',
 '試著作' => '試著作',
 '試著名' => '試著名',
@@ -17634,6 +17678,7 @@ public static $zh2HK = [
 '聞著' => '闻着',
 '亞塞拜然' => '阿塞拜疆',
 '阿布達比' => '阿布扎比',
+'撒拉威阿拉伯' => '阿拉伯撒哈拉',
 '阿拉伯聯合大公國' => '阿拉伯聯合酋長國',
 '亞斯文' => '阿斯旺',
 '阿联酋' => '阿聯酋',
@@ -17917,6 +17962,7 @@ public static $zh2CN = [
 '下著稱' => '下著称',
 '下著者' => '下著者',
 '下著述' => '下著述',
+'卑詩省' => '不列颠哥伦比亚省',
 '不著' => '不着',
 '不著書' => '不著书',
 '不著名' => '不著名',
@@ -18632,6 +18678,7 @@ public static $zh2CN = [
 '守著者' => '守著者',
 '守著述' => '守著述',
 '安哈特' => '安哈尔特',
+'安地卡' => '安提瓜',
 '安地卡及巴布達' => '安提瓜和巴布达',
 '巨集' => '宏',
 '定著' => '定着',
@@ -18679,6 +18726,7 @@ public static $zh2CN = [
 '展著述' => '展著述',
 '瓦倫西亞' => '巴伦西亚',
 '華倫西亞' => '巴伦西亚',
+'峇里' => '巴厘',
 '巴塞隆拿' => '巴塞罗那',
 '巴塞隆納' => '巴塞罗那',
 '巴斯拉' => '巴士拉',
@@ -19169,6 +19217,7 @@ public static $zh2CN = [
 '史丹福大學' => '斯坦福大学',
 '斯堪地那維亞' => '斯堪的纳维亚',
 '史達林' => '斯大林',
+'史瓦帝尼' => '斯威士兰',
 '史瓦濟蘭' => '斯威士兰',
 '斯洛維尼亞' => '斯洛文尼亚',
 '史特勞斯' => '斯特劳斯',
@@ -19213,6 +19262,7 @@ public static $zh2CN = [
 '智慧型' => '智能',
 '智慧卡' => '智能卡',
 '智慧手機' => '智能手机',
+'智慧機器人' => '智能机器人',
 '暗著' => '暗着',
 '暗著書' => '暗著书',
 '暗著作' => '暗著作',
@@ -19323,7 +19373,6 @@ public static $zh2CN = [
 '欠帳' => '欠账',
 '死帳' => '死账',
 '帕運會' => '残奥会',
-'傷殘奧林匹克' => '残疾人奥林匹克',
 '帕拉林匹克' => '残疾人奥林匹克',
 '庇里牛斯' => '比利牛斯',
 '披索' => '比索',
@@ -19565,8 +19614,10 @@ public static $zh2CN = [
 '疑著述' => '疑著述',
 '狂牛症' => '疯牛病',
 '徵狀' => '症状',
+'丹帕沙' => '登巴萨',
 '百慕達' => '百慕大',
 '皮雅斯·布士南' => '皮尔斯·布鲁斯南',
+'皮特肯' => '皮特凯恩',
 '皺著' => '皱着',
 '皺著書' => '皱著书',
 '皺著作' => '皱著作',
@@ -19770,10 +19821,14 @@ public static $zh2CN = [
 '積極份子' => '积极分子',
 '流動作業系統' => '移动操作系统',
 '行動作業系統' => '移动操作系统',
+'流動支付' => '移动支付',
+'行動支付' => '移动支付',
 '流動電話' => '移动电话',
 '行動電話' => '移动电话',
 '流動網絡' => '移动网络',
 '行動網路' => '移动网络',
+'流動裝置' => '移动设备',
+'行動裝置' => '移动设备',
 '程式設計師' => '程序员',
 '程式控制' => '程控',
 '空中巴士' => '空中客车',
@@ -19987,6 +20042,7 @@ public static $zh2CN = [
 '獲著稱' => '获著称',
 '獲著者' => '获著者',
 '獲著述' => '获著述',
+'菁寮' => '菁寮',
 '塞拉耶佛' => '萨拉热窝',
 '落著' => '落着',
 '落著書' => '落著书',
@@ -20024,6 +20080,7 @@ public static $zh2CN = [
 '蘸著稱' => '蘸著称',
 '蘸著者' => '蘸著者',
 '蘸著述' => '蘸著述',
+'虛擬實境' => '虚拟现实',
 '行人路权' => '行人路权',
 '行人路權' => '行人路权',
 '行著' => '行着',
@@ -20230,6 +20287,7 @@ public static $zh2CN = [
 '踩著述' => '踩著述',
 '笨豬跳' => '蹦极跳',
 '绑紧跳' => '蹦极跳',
+'身份' => '身份',
 '身分' => '身份',
 '身著' => '身着',
 '身著書' => '身著书',
@@ -20417,6 +20475,7 @@ public static $zh2CN = [
 '聞著' => '闻着',
 '亞塞拜然' => '阿塞拜疆',
 '阿布達比' => '阿布扎比',
+'撒拉威阿拉伯' => '阿拉伯撒哈拉',
 '阿拉伯聯合大公國' => '阿拉伯联合酋长国',
 '亞斯文' => '阿斯旺',
 '附著' => '附着',
index 612667c..b1e604e 100644 (file)
        "returnto": "ارجع إلى $1.",
        "tagline": "من {{SITENAME}}",
        "help": "مساعدة",
+       "help-mediawiki": "مساعدة حول ميدياويكي",
        "search": "بحث",
        "search-ignored-headings": "# <!-- اترك هذا السطر كما هو --> <pre>\n# سيتم تجاهل الترويسات خلال عملية البحث\n#التغييرات ستأخذ مجراها ما أن يتم فهرسة الصفحة التي تحتوي على ترويسات\n# يمكنك فرض عملية فهرسة الصفحة من خلال تعديل فارغ\n# الصيغة هي كالأتي:\n# * كل ما يكتب بعد \"#\" إلى آخر السطر يعتبر تعليق\n# * كل سطر غير فارغ سيكون العنوان الذي سيتم تجاهله (سيأخذ العنوان كما هو بالضبط بالتشكيل وخلافه)\nالمراجع\nالوصلات الخارجية\nانظر أيضا\n#</pre><!--أترك هذا السطر كما هو -->",
        "searchbutton": "بحث",
        "viewsource": "اعرض المصدر",
        "viewsource-title": "عرض مصدر $1",
        "actionthrottled": "تم كبح الفعل",
-       "actionthrottledtext": "احترازا من السُّخام، يُحظر إجراء هذا الفعل مرات كثيرة في فترة زمنية قصيرة، ولقد تجاوزت هذا الحد.\nمن فضلك حاول مجددا بعد عدة دقائق.",
+       "actionthrottledtext": "احترازًا من الإساء، يُحظر إجراء هذا الفعل مرات كثيرة في فترةٍ زمنية قصيرة، ولقد تجاوزت هذا الحد.\nمن فضلك حاول مجددًا بعد عدة دقائق.",
        "protectedpagetext": "هذه الصفحة تمت حمايتها لمنع التعديل أو أية عمليات أخرى.",
        "viewsourcetext": "يمكنك مطالعة و نسخ مصدر هذه الصفحة.",
        "viewyourtext": "يمكنك رؤية و نسخ مصدر <strong>تعديلاتك</strong> لهذه الصفحة.",
        "editpage-invalidcontentmodel-text": "موديل المحتوى \"$1\" غير مدعوم.",
        "editpage-notsupportedcontentformat-title": "تنسيق المحتوى غير مدعوم",
        "editpage-notsupportedcontentformat-text": "تنسيق المحتوى $1 غير مدعوم بواسطة نموذج المحتوى $2.",
+       "slot-name-main": "رئيسي",
        "content-model-wikitext": "نص ويكي",
        "content-model-text": "نص عادي",
        "content-model-javascript": "جافاسكربت",
        "pageinfo-display-title": "عرض العنوان",
        "pageinfo-default-sort": "مفتاح الترتيب الافتراضي",
        "pageinfo-length": "حجم الصفحة (بالبايت)",
+       "pageinfo-namespace": "النطاق",
        "pageinfo-article-id": "معرف الصفحة (ID)",
        "pageinfo-language": "لغة محتوى الصفحة",
        "pageinfo-language-change": "غير",
index 6d21da7..ea021dd 100644 (file)
        "rcfilters-savedqueries-setdefault": "دفالت حالتده تنظیمله",
        "rcfilters-savedqueries-new-name-placeholder": "فیلتر هدفینی آچیقلا",
        "rcfilters-savedqueries-apply-label": "فیلتر یارات",
+       "rcfilters-restore-default-filters": "دِفالت فیلترلری قایتار",
        "rcfilters-clear-all-filters": "بۆتون فیلترلری سیل",
        "rcfilters-show-new-changes": "اَن سون دَییشیکلیکلره باخ",
        "rcfilters-search-placeholder": "سوْن دییشیکلیکلری فیلترله (منودان سئچین یوْخسا فیلتر آدینی آختارین)",
        "prefixindex-strip": "لیست‌ده، اؤن‌اَکی قوْپارت",
        "shortpages": "قیسا صفحه‌‌لر",
        "longpages": "اۇزون صفحه‌‌لر",
-       "deadendpages": "کئچید وئرمه‌ين صحیفه‌‌لر",
+       "deadendpages": "باغلانتیسیز صفحه‌لر",
        "deadendpagestext": "آشاغیداکی صحیفه‌‌لردن بو ویکیپئدیياداکی دیگر صحیفه‌‌لره هئچ بیر کئچید يوخدور.",
        "protectedpages": "قوْرونان صفحه‌‌لر",
-       "protectedpages-indef": "يالنیز مدتسیز محافظه‌‌لر",
-       "protectedpages-summary": "بۇ صحیفه، ایندیکی قوْرونان موْجود اوْلان صحیفه‌لری لیست ائدیر. یارانماق‌دان قوْرونان باشلیقلارین لیستینی گؤرمک اۆچون [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]-ه باخین.",
-       "protectedpages-cascade": "یالنیز کاسکاد محافظه‌لر",
+       "protectedpages-filters": "فیلترلر:",
+       "protectedpages-indef": "تکجه سوْن‌سۇز قوْرومالار",
+       "protectedpages-summary": "بۇ صفحه، ایندیکی قوْرونان موْجود اوْلان صفحه‌لری لیست ائدیر. یارانماق‌دان قوْرونان باشلیقلارین لیستینی گؤرمک اۆچون [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]]-ه باخین.",
+       "protectedpages-cascade": "تکجه پیلله‌لی قوْرومالار",
        "protectedpages-noredirect": "یوْل‌لاندیرمالاری گیزلت",
        "protectedpagesempty": "حال-حاضردا بو پارامئتره اویغون هئچ بیر محافظه‌لی صحیفه یوخ‌دور",
        "protectedpages-timestamp": "چاغ اتیکتی",
        "protectedpages-performer": "قوْرویان ایشلدن",
        "protectedpages-params": "قوْروماق پارامئترلری",
        "protectedpages-reason": "نَدَن‌لیگی",
+       "protectedpages-submit": "صفحه‌لری گؤستر",
        "protectedpages-unknown-timestamp": "بیلینمه‌ین",
        "protectedpages-unknown-performer": "بیلینمه‌ین ایستیفاده‌چی",
        "protectedtitles": "قوْرونان باشلیقلار",
-       "protectedtitles-summary": "بۇ صحیفه، ایندیکی یارانماق‌دان قوْرونان باشلیقلاری لیست ائدیر. ایندیکی قوْرونان موْجود اوْلان صحیفه‌لرین لیستینی گؤرمک اۆچون، [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]-ه باخین.",
+       "protectedtitles-summary": "بۇ صفحه، ایندیکی یارانماق‌دان قوْرونان باشلیقلاری لیست ائدیر. ایندیکی قوْرونان موْجود اوْلان صفحه‌لرین لیستینی گؤرمک اۆچون، [[{{#special:ProtectedPages}}|{{int:protectedpages}}]]-ه باخین.",
        "protectedtitlesempty": "حال-حاضردا، بو پارامئترلری قورونان هئچ بیر موضوع یوخ‌دور.",
+       "protectedtitles-submit": "باشلیقلاری گؤستر",
        "listusers": "ایشلدن لیستی",
        "listusers-editsonly": "تکجه دَییشدیرمه ائدن ایشلدنلری گؤستر",
        "listusers-creationsort": "يارانما تاریخینه گؤره سیرالا",
        "specialloguserlabel": "ائدن:",
        "speciallogtitlelabel": "مقصد(باشلیق یوْخسا {{ns:user}}:ایشلدن اۆچون ایشلدن آدی):",
        "log": "ژورناللار",
+       "logeventslist-tag-log": "اِتیکت ژورنالی",
        "all-logs-page": "بوتون عمومی ژورناللار",
        "alllogstext": "{{SITENAME}} اوچون بوتون مؤوجود ژورناللارین بیر یئرده گؤستریشی.\nژورنال نوعو، ایشلدن آدی یوخسا دییشدیریلمیش صفحه لری سئچمکله داها محدودلاشدیرا بیلرسینیز.",
        "logempty": "ژورنالدا بیر نتیجه تاپیلمادی.",
        "restriction-move": "آدینی دَییشدیر",
        "restriction-create": "یارات",
        "restriction-upload": "یوکله",
-       "restriction-level-sysop": "تاÙ\85 Ù\85حاÙ\81ظÙ\87",
-       "restriction-level-autoconfirmed": "(ياریم-محافظه‌‌)",
+       "restriction-level-sysop": "بÛ\86تؤÙ\88 Ù\82Ù\88Ù\92رÙ\88Ù\85ا",
+       "restriction-level-autoconfirmed": "یاریم قوْروما",
        "restriction-level-all": "ایستنیلن سویه",
        "undelete": "سیلینمیش صحیفه‌‌لری گؤستر",
        "undeletepage": "سیلینمیش صحیفه‌لری گؤستر و یا برپا ائت",
        "autosumm-blank": "صفحه‌‌نی بوْشالتدی",
        "autosumm-replace": "صفحه‌‌نین مضمونونو ' $1' يازیسی ایله ديَیشدیریلدی",
        "autoredircomment": "[[$1]] صفحه‌‌سینه یوْللاندیریلیر",
+       "autosumm-removed-redirect": "[[$1]] صفحه‌سینه یوْللاندیرما سیلیندی.",
        "autosumm-new": "صفحه‌‌نی ' $1' ایله ياراتدی",
        "autosumm-newblank": "بوش صفحه یاراندی",
        "lag-warn-normal": "$1 {{PLURAL:$1 | سانیيه‌دن | سانیيه‌ده}} يئنی ديَیشیکلیکلر بو سیياهیدا گؤرولمه‌يه.",
index 69fb336..b81cb58 100644 (file)
        "returnto": "Вярнуцца да старонкі «$1».",
        "tagline": "Зьвесткі з {{GRAMMAR:родны|{{SITENAME}}}}",
        "help": "Дапамога",
+       "help-mediawiki": "Дапамога пра MediaWiki",
        "search": "Пошук",
        "search-ignored-headings": " #<!-- не зьмяняйце гэты радок --> <pre>\n# Загалоўкі, якія мусіць ігнараваць пошукавы рухавік.\n# Зьмены будуць ужытыя па наступным індэксаваньні старонкі.\n# Вы можаце змусіць пераіндэксаваць старонку пустым рэдагаваньнем.\n# Сынтакс наступны:\n#   * Усё, што пачынаецца з «#» і да канца радку — камэнтар\n#   * Усякі непусты радок — загаловак, які трэба ігнараваць\nКрыніцы\nВонкавыя спасылкі\nГлядзіце таксама\n #</pre> <!-- не зьмяняйце гэты радок -->",
        "searchbutton": "Пошук",
        "edit-conflict": "Канфлікт рэдагаваньняў.",
        "edit-no-change": "Вашае рэдагаваньне было праігнараванае, таму што ў тэкст не былі ўнесеныя зьмены.",
        "edit-slots-cannot-add": "{{PLURAL:$1|1=Наступнае месца|Наступныя месцы}} тут не {{PLURAL:$1|1=падтрымліваецца|падтрымліваюцца}}: $2.",
+       "edit-slots-cannot-remove": "{{PLURAL:$1|1=Наступнае месца абавязковае і ня можа быць выдаленае|Наступныя месцы абавязковыя і ня могуць быць выдаленыя}}: $2.",
+       "edit-slots-missing": "{{PLURAL:$1|1=Наступнае месца адсутнічае|Наступныя месцы адсутнічаюць}}: $2.",
        "postedit-confirmation-created": "Старонка была створаная.",
        "postedit-confirmation-restored": "Старонка была адноўленая.",
        "postedit-confirmation-saved": "Вашая праўка была захаваная.",
        "editpage-invalidcontentmodel-text": "Мадэль зьместу «$1» не падтрымліваецца.",
        "editpage-notsupportedcontentformat-title": "Фармат зьмесьціва не падтрымліваецца",
        "editpage-notsupportedcontentformat-text": "Фармат зьмесьціва $1 не падтрымліваецца мадэльлю зьмесьціва $2.",
+       "slot-name-main": "Асноўнае",
        "content-model-wikitext": "вікітэкст",
        "content-model-text": "просты тэкст",
        "content-model-javascript": "JavaScript",
        "filerevert-identical": "Цяперашняя вэрсія файлу ўжо ідэнтычная абранай.",
        "filedelete": "Выдаліць $1",
        "filedelete-legend": "Выдаліць файл",
-       "filedelete-intro": "Вы выдаляеце файл '''[[Media:$1|$1]]''' з усёй яго гісторыяй.",
+       "filedelete-intro": "Вы выдаляеце файл <strong>[[Media:$1|$1]]</strong> з усёй яго гісторыяй.",
        "filedelete-intro-old": "Вы выдаляеце вэрсію '''[[Media:$1|$1]]''' ад [$4 $3, $2].",
        "filedelete-comment": "Прычына:",
        "filedelete-submit": "Выдаліць",
index 9805ba1..a815186 100644 (file)
        "returnto": "Обратно към $1.",
        "tagline": "От {{SITENAME}}",
        "help": "Помощ",
+       "help-mediawiki": "Помощ за МедияУики",
        "search": "Търсене",
        "searchbutton": "Търсене",
        "go": "Отваряне",
        "timezonelegend": "Часова зона:",
        "localtime": "Местно време:",
        "timezoneuseserverdefault": "По подразбиране от уикито ($1)",
-       "timezoneuseoffset": "Друга (посочете отместване)",
+       "timezoneuseoffset": "Друга (по-долу посочете отместване)",
+       "timezone-useoffset-placeholder": "Например: „-07:00“ или „01:00“",
        "servertime": "Сървърно време:",
        "guesstimezone": "Попълване чрез браузъра",
        "timezoneregion-africa": "Африка",
        "pageinfo-display-title": "Показвано заглавие",
        "pageinfo-default-sort": "Ключ за сортиране по подразбиране",
        "pageinfo-length": "Размер на страницата (в байтове)",
+       "pageinfo-namespace": "Именно пространство",
        "pageinfo-article-id": "Номер на страницата",
        "pageinfo-language": "Език на съдържанието на страницата",
        "pageinfo-language-change": "промяна",
index e2ed81e..de08b49 100644 (file)
        "userjspreview": "<strong>Zapamtite da je ovo samo pregled Vašeg JavaScripta.\nStranica još nije sačuvana!</strong>",
        "sitecsspreview": "'''Zapamtite ovo je samo izgled ovog CSS-a.'''\n'''Još uvijek nije sačuvan!'''",
        "sitejspreview": "'''Zapamtite ovo je samo izgled ovog koda JavaScripte.'''\n'''Još uvijek nije sačuvan!'''",
-       "userinvalidconfigtitle": "<strong>Upozorenje:</strong> Ne postoji tema \"$1\".\nNe zaboravite da imena stranica s .css i .js kodom počinju malim slovom, npr, {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.",
+       "userinvalidconfigtitle": "<strong>Upozorenje:</strong> Ne postoji tema \"$1\".\nNe zaboravite da imena stranica s .css, .json i .js kodom počinju malim slovom, npr, {{ns:user}}:Foo/vector.css, a ne {{ns:user}}:Foo/Vector.css.",
        "updated": "(Osvježeno)",
        "note": "'''Pažnja:'''",
        "previewnote": "<strong>Ne zaboravite da je ovo samo pregled.</strong>\nVaše izmjene još nisu sačuvane!",
index bdfe71b..1ee34b4 100644 (file)
        "badarticleerror": "Aquesta operació no es pot dur a terme en aquesta pàgina.",
        "cannotdelete": "No s'ha pogut suprimir la pàgina o fitxer «$1».\nPotser ja l'ha suprimit algú altre.",
        "cannotdelete-title": "No es pot suprimir la pàgina \" $1 \"",
+       "delete-scheduled": "S'ha programat la pàgina «$1» per ser eliminada.\nTingueu paciència.",
        "delete-hook-aborted": "Un «hook» ha interromput la supressió.\nNo ha donat cap explicació.",
        "no-null-revision": "No s'ha pogut crear una nova revisió nul·la de la pàgina «$1»",
        "badtitle": "El títol no és correcte",
        "passwordtooshort": "La contrasenya ha de tenir un mínim {{PLURAL:$1|d'un caràcter|de $1 caràcters}}.",
        "passwordtoolong": "La contrasenya ha de tenir un màxim {{PLURAL:$1|d'un caràcter|de $1 caràcters}}.",
        "passwordtoopopular": "No poden utilitzar-se contrasenyes d'ús habitual. Trieu una contrasenya que sigui més difícil d'endevinir.",
+       "passwordinlargeblacklist": "La contrasenya introduïda es troba en una llista de contrasenyes més freqüents. Trieu-ne una que sigui més única.",
        "password-name-match": "La contrasenya ha de ser diferent del vostre nom d'usuari.",
        "password-login-forbidden": "No és permès d'utilitzar aquest nom d'usuari i contrasenya.",
        "mailmypassword": "Restableix la contrasenya",
index 68d5b85..a071548 100644 (file)
        "returnto": "Návrat na stránku „$1“.",
        "tagline": "Z {{grammar:2sg|{{SITENAME}}}}",
        "help": "Nápověda",
+       "help-mediawiki": "Nápověda k MediaWiki",
        "search": "Hledat",
        "search-ignored-headings": " #<!-- tento řádek ponechte beze změny --> <pre>\n# Zde uvedené nadpisy budou ignorovány vyhledáváním.\n# Změny této stránky se projeví ve chvíli, kdy je stránka používající příslušný nadpis indexována.\n# Přeindexování stránky můžete vynutit prázdnou editací.\n# Syntaxe je taková:\n#   * Cokoli od znaku „#“ do konce řádky je komentář.\n#   * Každá neprázdná řádka je přesný nadpis, který se má ignorovat, včetně velikosti písmen a tak.\nReference\nExterní odkazy\nSouvisející články\nSouvisející stránky\n #</pre> <!-- tento řádek ponechte beze změny -->",
        "searchbutton": "Hledat",
        "editpage-invalidcontentmodel-text": "Model obsahu „$1“ není podporován.",
        "editpage-notsupportedcontentformat-title": "Nepodporovaný formát obsahu",
        "editpage-notsupportedcontentformat-text": "Model obsahu $2 nepodporuje formát obsahu $1.",
+       "slot-name-main": "Hlavní",
        "content-model-wikitext": "wikitext",
        "content-model-text": "čistý text",
        "content-model-javascript": "JavaScript",
        "pageinfo-display-title": "Zobrazovaný název",
        "pageinfo-default-sort": "Výchozí klíč řazení",
        "pageinfo-length": "Velikost stránky (v bajtech)",
+       "pageinfo-namespace": "Jmenný prostor",
        "pageinfo-article-id": "ID stránky",
        "pageinfo-language": "Jazyk obsahu stránky",
        "pageinfo-language-change": "změnit",
index 654f262..244d420 100644 (file)
        "returnto": "Tilbage til $1.",
        "tagline": "Fra {{SITENAME}}",
        "help": "Hjælp",
+       "help-mediawiki": "Hjælp til MediaWiki",
        "search": "Søg",
        "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Overskrifter, der vil blive ignoreret af søgning.\n# Ændringer til dette træder i kraft så snart siden med overskriften er indekseret.\n# Du gennemtvinge genindeksering af siden ved at lave en tom redigering.\n# Syntaksen er som følger:\n#   * Alt fra et \"#\"-tegn til slutningen af linjen er en kommentar.\n#   * Hver ikke-tom linje er den nøjagtige titel der skal ignoreres; der skelnes mellem store og små bogstaver.\nReferencer\nEksterne henvisninger\nSe også\nKilder og henvisninger\nEksterne kilder/henvisninger\nKilder\n #<!-- leave this line exactly as it is --> <pre>",
        "searchbutton": "Søg",
        "namespaceprotected": "Du har ikke rettigheder til at redigere sider i $1-navnerummet.",
        "customcssprotected": "Du har ikke tilladelse til at redigere denne CSS-side, da den indeholder en anden brugers personlige indstillinger.",
        "customjsprotected": "Du har ikke tilladelse til at redigere denne JavaScript-side, da den indeholder en anden brugers personlige indstillinger.",
-       "sitecssprotected": "Du har ikke tilladelse til at redigere denne CSS-side fordi det kan påvirke alle besøgende",
-       "sitejsonprotected": "Du har ikke tilladelse til at redigere denne JSON-side fordi det kan påvirke alle besøgende",
-       "sitejsprotected": "Du har ikke tilladelse til at redigere denne JavaScript-side fordi det kan påvirke alle besøgende",
+       "sitecssprotected": "Du har ikke tilladelse til at redigere denne CSS-side fordi det kan påvirke alle besøgende.",
+       "sitejsonprotected": "Du har ikke tilladelse til at redigere denne JSON-side fordi det kan påvirke alle besøgende.",
+       "sitejsprotected": "Du har ikke tilladelse til at redigere denne JavaScript-side fordi det kan påvirke alle besøgende.",
        "mycustomcssprotected": "Du har ikke rettigheder til at redigere denne CSS-side.",
        "mycustomjsonprotected": "Du har ikke rettigheder til at redigere denne JSON-side.",
        "mycustomjsprotected": "Du har ikke rettigheder til at redigere denne JavaScript-side.",
        "defaultmessagetext": "Standardtekst",
        "content-failed-to-parse": "Kunne ikke fortolke $2-indholdet af $1-modellen: $3",
        "invalid-content-data": "Ugyldig indholdsdata",
-       "content-not-allowed-here": "\"$1\" indhold er ikke tilladt på siden [[:$2]]",
+       "content-not-allowed-here": "Indholdet \"$1\" er ikke tilladt på siden [[:$2]] i sprækken \"$3\"",
        "editwarning-warning": "Hvis du forlader siden nu, risikerer du at miste alle ændringer, som du har lavet.\nDenne advarsel kan slås fra under \"{{int:prefs-editing}}\" i dine indstillinger.",
        "editpage-invalidcontentmodel-title": "Indholdsmodellen er ikke understøttet",
        "editpage-invalidcontentmodel-text": "Indholdsmodellen »$1« er ikke understøttet.",
        "editpage-notsupportedcontentformat-title": "Indholdsformatet understøttes ikke",
        "editpage-notsupportedcontentformat-text": "Indholdsformatet $1 understøttes ikke af indholdsmodellen $2",
+       "slot-name-main": "Hoved",
        "content-model-wikitext": "wikitekst",
        "content-model-text": "almindelig tekst",
        "content-model-javascript": "JavaScript",
        "default": "standard",
        "prefs-files": "Filer",
        "prefs-custom-css": "Personlig CSS",
+       "prefs-custom-json": "Tilpasset JSON",
        "prefs-custom-js": "Personlig JavaScript",
        "prefs-common-config": "Fælles CSS/JSON/JavaScript for alle udseender:",
        "prefs-reset-intro": "Du kan bruge denne side til at tilbagestille alle dine indstillinger til standardindstillingerne.\nDet kan ikke gøres om.",
        "rcfilters-restore-default-filters": "Gendan standardfiltre",
        "rcfilters-clear-all-filters": "Ryd alle filtre",
        "rcfilters-show-new-changes": "Vis seneste ændringer",
-       "rcfilters-search-placeholder": "Filtrer ændringer (brug menuen eller eller søg på filternavn)",
+       "rcfilters-search-placeholder": "Filtrer ændringer (brug menuen eller søg på filternavn)",
        "rcfilters-invalid-filter": "Ugyldigt filter",
        "rcfilters-empty-filter": "Ingen aktive filtre. All bidrag vises.",
        "rcfilters-filterlist-title": "Filtre",
        "pageinfo-display-title": "Vist sidetitel",
        "pageinfo-default-sort": "Standardsorteringsnøgle",
        "pageinfo-length": "Sidelængde (i bytes)",
+       "pageinfo-namespace": "Navnerum",
        "pageinfo-article-id": "Side-ID",
        "pageinfo-language": "Sprog for sideindholdet",
        "pageinfo-language-change": "ændr",
        "pageinfo-category-files": "Antal filer",
        "pageinfo-user-id": "Bruger-id",
        "pageinfo-file-hash": "Hash værdi",
+       "pageinfo-view-protect-log": "Vis beskyttelsesloggen for denne side.",
        "markaspatrolleddiff": "Markér som patruljeret",
        "markaspatrolledtext": "Markér denne side som patruljeret",
        "markaspatrolledtext-file": "Markér denne filversion som patruljeret",
        "previousdiff": "← Gå til forrige ændring",
        "nextdiff": "Gå til næste ændring →",
        "mediawarning": "'''Advarsel''': Denne filtype kan muligvis indeholde skadelig kode.\nDu kan beskadige dit system hvis du udfører den.",
-       "imagemaxsize": "Maksimal billedstørrelse<br />''(på filbeskrivelsessider)''",
+       "imagemaxsize": "Maksimal billedstørrelse på filbeskrivelsessider:",
        "thumbsize": "Thumbnailstørrelse:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|side|sider}}",
        "file-info": "Filstørrelse: $1, MIME-Type: $2",
        "confirm-unwatch-top": "Fjern denne side fra din overvågningsliste?",
        "confirm-rollback-button": "OK",
        "confirm-rollback-top": "Omgør redigering på denne side?",
+       "confirm-mcrrestore-title": "Gendan en version",
        "confirm-mcrundo-title": "Fortryd en ændring",
        "mcrundofailed": "Omgørelse mislykkedes",
        "quotation-marks": "\"$1\"",
        "autosumm-blank": "Tømmer siden for indhold",
        "autosumm-replace": "Erstatter sidens indhold med \"$1\"",
        "autoredircomment": "Omdirigering til [[$1]] oprettet",
+       "autosumm-removed-redirect": "Fjernede omdirigering til [[$1]]",
        "autosumm-new": "Oprettede siden med \"$1\"",
        "autosumm-newblank": "Oprettede tom side",
        "lag-warn-normal": "Ændringer som er nyere end {{PLURAL:$1|et sekund|$1 sekunder}}, vises muligvis ikke i denne liste.",
        "redirect-file": "Filnavn",
        "redirect-logid": "Log-id",
        "redirect-not-exists": "Værdi ej fundet",
+       "redirect-not-numeric": "Værdien er ikke numerisk",
        "fileduplicatesearch": "Find dubletfiler",
        "fileduplicatesearch-summary": "Find dublerede filer baseret på deres hash-værdi.",
        "fileduplicatesearch-filename": "Filnavn:",
        "logentry-newusers-byemail": "Brugerkontoen $3 blev {{GENDER:$2|oprettet}} af $1, og adgangskoden er sendt via e-mail",
        "logentry-newusers-autocreate": "Brugerkontoen $1 blev automatisk {{GENDER:$2|oprettet}}",
        "logentry-protect-move_prot": "$1 {{GENDER:$2|flyttede}} beskyttelsesindstillinger fra $4 til $3",
+       "logentry-protect-unprotect": "$1 {{GENDER:$2|fjernede}} beskyttelsen fra $3",
        "logentry-protect-protect": "$1 {{GENDER:$2|beskyttede}} $3 $4",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|beskyttede}} $3 $4 [kaskaderende]",
        "logentry-protect-modify": "$1 {{GENDER:$2|ændrede}} beskyttelsesniveau for $3 $4",
        "log-action-filter-delete-revision": "Revisionssletning",
        "log-action-filter-move-move": "Flytning uden overskrivelse af omdirigeringer",
        "log-action-filter-move-move_redir": "Flytning med overskrivelse af omdirigeringer",
+       "log-action-filter-newusers-create": "Oprettelse af anonym bruger",
+       "log-action-filter-newusers-create2": "Oprettelse af registreret bruger",
        "log-action-filter-newusers-autocreate": "Automatisk oprettelse",
        "log-action-filter-patrol-patrol": "Manuel patruljering",
        "log-action-filter-patrol-autopatrol": "Automatisk patruljering",
        "log-action-filter-protect-modify": "Ændring af beskyttelse",
        "log-action-filter-protect-unprotect": "Fjernede beskyttelse",
        "log-action-filter-protect-move_prot": "Flyttede beskyttelse",
+       "log-action-filter-rights-rights": "Manuel ændring",
+       "log-action-filter-rights-autopromote": "Automatisk ændring",
        "log-action-filter-upload-upload": "Ny overførsel",
+       "authmanager-create-disabled": "Kontooprettelse deaktiveret",
        "authmanager-create-from-login": "For at oprette din konto, så udfyld venligst felterne.",
        "authmanager-authplugin-setpass-failed-title": "Ændring af adgangskode mislykkedes",
        "authmanager-authplugin-setpass-bad-domain": "Ugyldig domæne.",
        "pagedata-bad-title": "Ugyldig titel: $1",
        "passwordpolicies": "Password politikker",
        "passwordpolicies-group": "Gruppe",
-       "passwordpolicies-policies": "Politikker"
+       "passwordpolicies-policies": "Politikker",
+       "passwordpolicies-policy-passwordcannotmatchusername": "Adgangskoden kan ikke være det samme som brugernavnet"
 }
index 5bd1fdc..5f1e48f 100644 (file)
        "missingcommenttext": "Ihr Abschnitt enthält keinen Text.",
        "missingcommentheader": "'''Achtung:''' Sie haben kein Betreff/Überschrift eingegeben. Wenn Sie erneut auf „$1“ klicken, wird Ihre Bearbeitung ohne Überschrift gespeichert.",
        "previewerrortext": "Beim Versuch, eine Vorschau Ihrer Änderungen anzuzeigen, ist ein Fehler aufgetreten.",
-       "blockedtext": "'''Ihr Benutzername oder Ihre IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde vom Administrator $1 durchgeführt.\nAls Grund wurde ''$2'' angegeben.\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nSie könnten $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nSie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\nIhre aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
+       "blockedtext": "'''Ihr Benutzername oder Ihre IP-Adresse wurde gesperrt.'''\n\nDie Sperrung wurde vom Administrator $1 durchgeführt.\nAls Grund wurde ''$2'' angegeben.\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nSie könnten $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\nSie können die „{{int:emailuser}}“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\nIhre aktuelle IP-Adresse ist $3 und die Sperrkennung lautet $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
        "autoblockedtext": "Ihre IP-Adresse wurde automatisch gesperrt, da sie von einem anderen Benutzer genutzt wurde, der von $1 gesperrt wurde.\nAls Grund wurde angegeben:\n\n:''$2''\n\n* Beginn der Sperre: $8\n* Ende der Sperre: $6\n* Sperre betrifft: $7\n\nSie können $1 oder einen der anderen [[{{MediaWiki:Grouppage-sysop}}|Administratoren]] kontaktieren, um über die Sperre zu diskutieren.\n\nSie können die „E-Mail an diesen Benutzer“-Funktion nicht nutzen, solange keine gültige E-Mail-Adresse in Ihren [[Special:Preferences|Benutzerkonto-Einstellungen]] eingetragen ist oder diese Funktion für Sie gesperrt wurde.\n\nIhre aktuelle IP-Adresse ist $3, und die Sperr-ID ist $5.\nBitte fügen Sie alle Informationen jeder Anfrage hinzu, die Sie stellen.",
        "whitelistedittext": "Sie müssen sich $1, um Seiten bearbeiten zu können.",
        "confirmedittext": "Sie müssen Ihre E-Mail-Adresse erst bestätigen, bevor Sie Bearbeitungen vornehmen können. Bitte ergänzen und bestätigen Sie Ihre E-Mail in den [[Special:Preferences|Einstellungen]].",
        "nosuchsectiontext": "Sie haben versucht, einen Abschnitt zu bearbeiten, der nicht existiert.\nVermutlich wurde er verschoben oder gelöscht, nachdem Sie die Seite aufgerufen haben.",
        "loginreqpagetext": "Sie müssen sich $1, um Seiten lesen zu können.",
        "newarticletext": "Sie sind einem Link zu einer Seite gefolgt, die nicht vorhanden ist.\nUm diese Seite anzulegen, tragen Sie Ihren Text in das untenstehende Bearbeitungsfeld ein (weitere Informationen auf der [$1 Hilfeseite]).\nSofern Sie fälschlicherweise hier sind, klicken Sie auf die Schaltfläche '''Zurück''' Ihres Browsers.",
-       "anontalkpagetext": "----''Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen. Es wird seine IP-Adresse zur Identifizierung verwendet. IP-Adressen können von mehreren Benutzern gemeinsam verwendet werden. Wenn Sie mit den Kommentaren auf dieser Seite nichts anfangen können, richten sie sich vermutlich an einen früheren Inhaber Ihrer IP-Adresse und Sie können sie ignorieren. Sie können sich auch ein [[Special:CreateAccount|Benutzerkonto erstellen]] oder sich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.''",
-       "noarticletext": "Diese Seite enthält momentan noch keinen Text.\nSie können diesen Titel auf den anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]],\n<span class=\"plainlinks\">in den zugehörigen [{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbüchern suchen] oder diese Seite [{{fullurl:{{FULLPAGENAME}}|action=edit}} bearbeiten]</span>.",
+       "anontalkpagetext": "----\n<em>Diese Seite dient dazu, einem nicht angemeldeten Benutzer Nachrichten zu hinterlassen.</em>\nEs wird seine IP-Adresse zur Identifizierung verwendet.\nIP-Adressen können von mehreren Benutzern gemeinsam verwendet werden.\nWenn Sie mit den Kommentaren auf dieser Seite nichts anfangen können, richten sie sich vermutlich an einen früheren Inhaber Ihrer IP-Adresse und Sie können sie ignorieren.\nSie können sich auch ein [[Special:CreateAccount|Benutzerkonto erstellen]] oder sich [[Special:UserLogin|anmelden]], um künftig Verwechslungen mit anderen anonymen Benutzern zu vermeiden.",
+       "noarticletext": "Diese Seite enthält momentan noch keinen Text.\nSie können sie <span class=\"plainlinks\">[{{fullurl:{{FULLPAGENAME}}|action=edit}} erstellen]</span>,\nihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]]\noder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten]</span>.",
        "noarticletext-nopermission": "Diese Seite enthält momentan noch keinen Text und Sie sind auch nicht berechtigt diese Seite zu erstellen.\nSie können ihren Titel auf anderen Seiten [[Special:Search/{{PAGENAME}}|suchen]] oder die zugehörigen <span class=\"plainlinks\">[{{fullurl:{{#special:Log}}|page={{FULLPAGENAMEE}}}} Logbücher betrachten].</span>",
        "userpage-userdoesnotexist": "Das Benutzerkonto „<nowiki>$1</nowiki>“ ist nicht vorhanden. Bitte prüfen Sie, ob Sie diese Seite wirklich erstellen/bearbeiten möchten.",
-       "clearyourcache": "'''Hinweis:''' Leeren Sie nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* '''Firefox/Safari:''' ''Umschalttaste'' drücken und gleichzeitig ''Aktualisieren'' anklicken oder entweder ''Strg+F5'' oder ''Strg+R'' (''⌘+R'' auf dem Mac) drücken\n* '''Google Chrome:''' ''Umschalttaste+Strg+R'' (''⌘+Umschalttaste+R'' auf dem Mac) drücken\n* '''Internet Explorer:''' ''Strg+F5'' drücken oder ''Strg'' drücken und gleichzeitig ''Aktualisieren'' anklicken\n* '''Opera:''' ''Extras → Internetspuren löschen … → Individuelle Auswahl → Den kompletten Cache löschen''",
+       "clearyourcache": "<strong>Hinweis:</strong> Leeren Sie nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.\n* <strong>Firefox/Safari:</strong> <em>Umschalttaste</em> drücken und gleichzeitig <em>Aktualisieren</em> anklicken oder entweder <em>Strg+F5</em> oder <em>Strg+R</em> (<em>⌘+R</em> auf dem Mac) drücken\n* <strong>Google Chrome:</strong> <em>Umschalttaste+Strg+R</em> (<em>⌘+Umschalttaste+R</em> auf dem Mac) drücken\n* <strong>Internet Explorer:</strong> <em>Strg+F5</em> drücken oder <em>Strg</em> drücken und gleichzeitig <em>Aktualisieren</em> anklicken\n* <strong>Opera:</strong> Gehen Sie zu <em>Menü → Einstellungen</em> (<em>Opera → Einstellungen</em> auf dem Mac) und dann auf <em>Datenschutz & Sicherheit → Browserdaten löschen → Gespeicherte Bilder und Dateien</em>.",
        "usercssyoucanpreview": "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues CSS vor dem Speichern zu testen.",
        "userjsyoucanpreview": "'''Tipp:''' Benutzen Sie den „{{int:showpreview}}“-Button, um Ihr neues JavaScript vor dem Speichern zu testen.",
        "usercsspreview": "'''Beachten Sie, dass Sie nur eine Vorschau Ihres Benutzer-CSS betrachten.'''\n'''Es wurde noch nicht gespeichert!'''",
        "userrights-unchangeable-col": "Gruppenzugehörigkeit, die Sie nicht ändern dürfen",
        "recentchanges-summary": "Auf dieser Seite können Sie die letzten Änderungen in diesem Wiki nachverfolgen.",
        "recentchanges-feed-description": "Verfolgen Sie mit diesem Feed die letzten Änderungen in {{SITENAME}}.",
-       "recentchangeslinked-summary": "Diese Spezialseite listet die letzten Änderungen an den verlinkten Seiten auf (bzw. an in dieser Kategorie enthaltenen Kategorien).\nSeiten auf Ihrer [[Special:Watchlist|Beobachtungsliste]] sind <strong>fett</strong> dargestellt.",
+       "recentchangeslinked-summary": "Geben Sie einen Seitennamen ein, um Änderungen auf Seiten zu sehen, die auf oder von dieser Seite verlinkt sind. Um Mitglieder einer Kategorie zu sehen, geben Sie „{{ns:category}}:''Name der Kategorie''“ ein. Änderungen an Seiten auf [[Special:Watchlist|deiner Beobachtungsliste]] sind <strong>fett</strong> hervorgehoben.",
        "uploadnologintext": "Sie müssen sich $1 um Dateien hochladen zu können.",
        "uploadtext": "Benutzen Sie dieses Formular, um neue Dateien hochzuladen.\n\nGehen Sie zu der [[Special:FileList|Liste hochgeladener Dateien]], um vorhandene Dateien zu suchen und anzuzeigen. Siehe auch das [[Special:Log/upload|Datei-]] und [[Special:Log/delete|Lösch-Logbuch]].\n\nUm ein '''Bild''' in einer Seite zu verwenden, nutzen Sie einen Link in der folgenden Form:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.jpg]]</nowiki></code>''' – für ein Vollbild\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Datei.png|200px|thumb|left|Alternativer Text]]</nowiki></code>''' – für ein 200px breites Bild innerhalb einer Box, mit „Alternativer Text“ als Bildbeschreibung\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Datei.ogg]]</nowiki></code>''' – für einen direkten Link auf die Datei, ohne Darstellung der Datei",
        "illegalfilename": "Der Dateiname „$1“ enthält mindestens ein nicht erlaubtes Zeichen. Bitte benennen Sie die Datei um und versuchen Sie, sie erneut hochzuladen.",
        "sharedupload-desc-edit": "Diese Datei stammt aus $1 und kann auf anderen Projekten verwendet werden.\nVielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.",
        "sharedupload-desc-create": "Diese Datei stammt aus $1 und kann von anderen Projekten verwendet werden.\nVielleicht möchten Sie die Beschreibung auf der dortigen [$2 Dateibeschreibungsseite] bearbeiten.",
        "filepage-nofile-link": "Es ist keine Datei dieses Namens vorhanden. Sie können jedoch [$1 diese Datei hochladen].",
+       "upload-disallowed-here": "Sie können diese Datei nicht überschreiben.",
        "filerevert-intro": "Sie setzen die Datei '''[[Media:$1|$1]]''' auf die [$4 Version vom $2, $3 Uhr] zurück.",
        "filedelete-intro": "Sie löschen die Datei '''„[[Media:$1|$1]]“''' inklusive ihrer Versionsgeschichte.",
        "filedelete-intro-old": "Sie löschen von der Datei '''„[[Media:$1|$1]]“''' die [$4 Version vom $2, $3 Uhr].",
        "watchnologin": "Sie sind nicht angemeldet",
        "addedwatchtext": "Die Seite „[[:$1]]“ wurde zu Ihrer [[Special:Watchlist|Beobachtungsliste]] hinzugefügt.\n\nSpätere Änderungen an dieser Seite und der dazugehörigen Diskussionsseite werden dort gelistet.",
        "removedwatchtext": "Die Seite „[[:$1]]“ wurde von Ihrer [[Special:Watchlist|Beobachtungsliste]] entfernt.",
-       "watchlist-details": "Sie beobachten {{PLURAL:$1|1 Seite|$1 Seiten}}.",
+       "watchlist-details": "{{PLURAL:$1|Eine Seite ist|$1 Seiten sind}} auf Ihrer Beobachtungsliste (sowie Diskussionsseiten).",
        "enotif_body": "Hallo $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nZusammenfassung des Bearbeiters: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt zum Bearbeiter:\nE-Mail: $PAGEEDITOR_EMAIL\nWiki: $PAGEEDITOR_WIKI\n\nBei weiterer Aktivität auf der Seite werden Ihnen so lange keine weiteren Benachrichtigungs-E-Mails gesendet, bis Sie die Seite wieder angemeldet besucht haben.\nAuf Ihrer Beobachtungsliste können Sie alle Benachrichtigungsmarkierungen zusammen zurücksetzen.\n\nIhr freundliches {{SITENAME}}-Benachrichtigungssystem\n\n--\nUm die Einstellungen der E-Mail-Benachrichtigung anzupassen, besuchen Sie {{canonicalurl:{{#special:Preferences}}}}.\n\nUm die Einstellungen Ihrer Beobachtungsliste anzupassen, besuchen Sie {{canonicalurl:{{#special:EditWatchlist}}}}.\n\nUm diese Seite von Ihrer Beobachtungsliste zu entfernen, besuchen Sie $UNWATCHURL.\n\nRückmeldungen und weitere Hilfe: $HELPPAGE",
        "historywarning": "'''Achtung:''' Die Seite, die Sie löschen möchten, hat eine Versionsgeschichte mit etwa $1 {{PLURAL:$1|Version|Versionen}}:",
        "confirmdeletetext": "Sie sind dabei, eine Seite mit allen zugehörigen älteren Versionen zu löschen. Bitte bestätigen Sie, dass Sie sich der Konsequenzen bewusst sind, und dass Sie in Übereinstimmung mit den [[{{MediaWiki:Policy-url}}|Richtlinien]] handeln.",
        "import-token-mismatch": "Verlust der Sessiondaten. Bitte versuchen Sie es erneut.",
        "import-error-edit": "Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu bearbeiten.",
        "import-error-create": "Die Seite „$1“ wurde nicht importiert, da Sie nicht berechtigt sind, sie zu erstellen.",
-       "tooltip-pt-userpage": "Ihre Benutzerseite",
+       "tooltip-pt-userpage": "{{GENDER:|Ihre}} Benutzerseite",
        "tooltip-pt-anonuserpage": "Benutzerseite der IP-Adresse, von der aus Sie Änderungen durchführen",
-       "tooltip-pt-mytalk": "Ihre Diskussionsseite",
-       "tooltip-pt-preferences": "Ihre Einstellungen",
+       "tooltip-pt-mytalk": "{{GENDER:|Ihre}} Diskussionsseite",
+       "tooltip-pt-preferences": "{{GENDER:|Ihre}} Einstellungen",
        "tooltip-pt-watchlist": "Liste der von Ihnen beobachteten Seiten",
-       "tooltip-pt-mycontris": "Liste Ihrer Beiträge",
+       "tooltip-pt-mycontris": "Liste {{GENDER:|Ihrer}} Beiträge",
        "tooltip-pt-createaccount": "Wir ermutigen Sie ein Benutzerkonto zu erstellen und sich anzumelden. Es ist jedoch nicht zwingend erforderlich.",
-       "tooltip-ca-edit": "Sie können diese Seite bearbeiten. Bitte nutzen Sie auch die Vorschaufunktion vor dem Speichern.",
+       "tooltip-ca-edit": "Diese Seite bearbeiten",
        "tooltip-ca-watch": "Diese Seite zu Ihrer Beobachtungsliste hinzufügen",
        "tooltip-n-mainpage": "Besuchen Sie die Hauptseite",
        "tooltip-n-mainpage-description": "Besuchen Sie die Hauptseite",
index 63a4f81..89e4544 100644 (file)
        "editpage-invalidcontentmodel-text": "Das Inhaltsmodell „$1“ wird nicht unterstützt.",
        "editpage-notsupportedcontentformat-title": "Das Inhaltsformat wird nicht unterstützt",
        "editpage-notsupportedcontentformat-text": "Das Inhaltsformat $1 wird vom Inhaltsmodell $2 nicht unterstützt.",
+       "slot-name-main": "Haupt",
        "content-model-wikitext": "Wikitext",
        "content-model-text": "Klartext",
        "content-model-javascript": "JavaScript",
        "move": "Verschieben",
        "movethispage": "Seite verschieben",
        "unusedimagestext": "Bitte beachte, dass andere Webseiten eine Datei mit einer direkten URL verlinken können. Sie könnte daher hier aufgelistet sein, obwohl sie in aktiver Verwendung ist.",
+       "unusedimagestext-categorizedimgisused": "Die folgenden Dateien sind vorhanden, jedoch auf keiner Seite eingebunden. Kategorisierte Bilder werden als verwendet betrachtet, trotzdem werden sie auf keiner Seite eingebunden.\nBitte beachte, dass andere Websites auf eine Datei mit einer direkten URL verlinken können und hier trotz aktiver Nutzung noch gelistet werden.",
        "unusedcategoriestext": "Diese Spezialseite zeigt alle Kategorien, die leer sind, also selbst keine Kategorien oder Seiten enthalten.",
        "notargettitle": "Keine Seite angegeben",
        "notargettext": "Du hast nicht angegeben, auf welche Seite diese Funktion angewendet werden soll.",
        "pageinfo-display-title": "Anzeigetitel",
        "pageinfo-default-sort": "Standardsortierschlüssel",
        "pageinfo-length": "Seitenlänge (in Bytes)",
+       "pageinfo-namespace": "Namensraum",
        "pageinfo-article-id": "Seitenkennnummer",
        "pageinfo-language": "Seiteninhaltssprache",
        "pageinfo-language-change": "ändern",
index 5304024..2fc4047 100644 (file)
        "subject-preview": "Verqaytê mewzu:",
        "previewerrortext": "Verasayışê vırnayışê şıma de yew xeta veciya miyan.",
        "blockedtitle": "Karber blokekerdeo",
-       "blockedtext": "<strong>No nameyê karberi ya zi na adresa IP blokekerdeya.</strong>\n\nVıraştoğê blokeyi: $1\nSebebê blokeyi: <em>$2</em>.\n\n* Başliya blokeyi: $8\n* Qediyayışê blokeyi: $6\n* Blokebiyaye: $7\n\nŞıma şenê  $1 de ya zi  yewna [[{{MediaWiki:Grouppage-sysop}}|administrator]]i de irtıbat kewê ke na mesela sero werênê, cemaet vırazê. \nŞıma nêşenê xısusiyetê \"karberi rê e-posta bırışe\" bıgureynê/bıxebetnê heta ke [[Special:Preferences|Tercihanê hesabi]] de yew e-posteyo ke vêreno, beli bi û şıma gureynayışê cı ra mehrum nêbiyê.\nIP adresa şımaya nıkayêne $3o û numreyê bloki #$5.\nŞıma rê zehmet, eke kewnê ra dıme, teferruatanê corênan not kerên.",
+       "blockedtext": "<strong>No nameyê karberi ya zi na adresa IP blokekerdeya.</strong>\n\nVıraştoğê blokeyi: $1\nSebebê blokeyi: <em>$2</em>.\n\n* Sıftekerdena blokeyi: $8\n* Qediyayışê blokeyi: $6\n* Blokebiyaye: $7\n\nŞıma şenê  $1 de ya zi  yewna [[{{MediaWiki:Grouppage-sysop}}|administrator]]i de irtıbat kewê ke na mesela sero werênê, cemaet vırazê. \nŞıma nêşenê xısusiyetê \"karberi rê e-posta bırışe\" bıgureynê/bıxebetnê heta ke [[Special:Preferences|Tercihanê hesabi]] de yew e-posteyo ke vêreno, beli bi û şıma gureynayışê cı ra mehrum nêbiyê.\nIP adresa şımaya nıkayêne $3o û numreyê bloki #$5.\nŞıma rê zehmet, eke kewnê ra dıme, teferruatanê corênan not kerên.",
        "autoblockedtext": "IP adresê şıma otomotikmen kerda kılit, çıkı $1 verniya nê hesabi grota.\nSebebê cı zi:\n\n:''$2''\n\n* Dest pê kerdışê verni grotışi: $8\n* Qedyayişê verni grotışi: $6\n* Qayile ke bloqe bıbo: $7\n\nŞıma qayile qey weri kewtışê na mesela,  $1 ya na [[{{MediaWiki:Grouppage-sysop}}|serkaran ra]] yewi ra şenê irtibat kewê.\n\nNot, [[Special:Preferences|Tercihê karberi]] eke şıma yew e-postayo raşt nênuşt se şıma nêşenê na xususiyet ra \"karber rê e-posta bırışê\" istifade bıkeri.\n\nIP adresiya şıma yo nıkayên $3 u ID şıma yo ke musade nêdaye #$5. Eke şıma yew tehqiqat vırazeni malumatê corênan xo vira mekerê.",
        "blockednoreason": "sebeb nidaniyo",
        "whitelistedittext": "Qandê vurnayış kerdışi rê $1.",
        "recentchangeslinked-feed": "Vırnayışê bestiyaey",
        "recentchangeslinked-toolbox": "Vırnayışê bestiyaey",
        "recentchangeslinked-title": "Heqa \"$1\" de vurnayışi",
-       "recentchangeslinked-summary": "Ena liste, perra spesifike rê (ya zi karberanê {{ns:category}} spesifike rê) perranê gırêdayoğan de lista de vırnayışê peyênana.\n[[Special:Watchlist|Lista şımaya seyrkedışi de]] perri be nuşteyo <strong>qalın</strong> de bêli kerdê.",
+       "recentchangeslinked-summary": "Yew nameyê pele cıkewe ke vurnayışanê ke pele de ya zi naye ra gıre biyê, inan bıvênê. Seba ke ezayanê yew kategoriye bıvênê, „{{ns:category}}:''nameyê kategoriye''“ cıkewe. Vurnayışê pelanê ke [[Special:Watchlist|lista şımaya seyrkedışi]] derê, <strong>qalınd</strong> bêli kerdê.",
        "recentchangeslinked-page": "Namey perrer:",
        "recentchangeslinked-to": "Heruna perra kı yena dayene, vurnayışanê perranê ke daye ra gırêdayiyê inan bımotne",
        "recentchanges-page-added-to-category": "[[:$1]] kerd kategoriye miyan",
        "filehist-filesize": "Ebadê dosya",
        "filehist-comment": "Mışewre",
        "imagelinks": "Gurenayışê dosya",
-       "linkstoimage": "Ena {{PLURAL:$1|pela kariya |$1 pelê kariyê}} gıreye ena dosya:",
-       "linkstoimage-more": "$1 ra ziyed {{PLURAL:$1|pel karneno |peli karnenê}} na dosya .\nlisteya ke ha ver a têna na {{PLURAL:$1|dosyaya ewwili|dosyaya $1 ewwili}} mocnena.\n[[Special:WhatLinksHere/$2| liste pêro ]] mevcud o.",
-       "nolinkstoimage": "Qet yew pele ena dosya nikarneno.",
+       "linkstoimage": "{{PLURAL:$1|Ena pele na dosya gurenena|$1 enê peli na dosya gurenenê}}:",
+       "linkstoimage-more": "$1 ra zêde {{PLURAL:$1|pele na dosya gurenena|peli na dosya gurenenê}}.\nEna lista cêrêne {{PLURAL:$1|dosyaya sıfteyına ke tenya na dosya gurenena|dosyeyanê $1 sıfteyınanê ke tenya na dosya gurenenê}}, inan mocnena.\nYew [[Special:WhatLinksHere/$2|lista pêro]] mevcuda.",
+       "nolinkstoimage": "Qet yew pele ena dosya nêgurenena.",
        "morelinkstoimage": "[[Special:WhatLinksHere/$1|Linkanê zafyerî]] ena pele ra link biyo bivîne.",
        "linkstoimage-redirect": "$1 (Dosya raçarnayış) $2",
        "duplicatesoffile": "a {{PLURAL:$1|dosya|$1 dosya}}, kopyayê na dosyayi ([[Special:FileDuplicateSearch/$2|teferruati]]):",
        "usermessage-summary": "Mesacê sistemi caverde.",
        "usermessage-editor": "Xeberdarê sistemi",
        "usermessage-template": "MediaWiki:UserMessage",
-       "watchlist": "Listey pawıteyan",
+       "watchlist": "Lista seyrkerdışi",
        "mywatchlist": "Lista seyrkerdışi",
        "watchlistfor2": "Qandê $1 ($2)",
        "nowatchlist": "listeya temaşa kerdıişê şıma de yew madde zi çina.",
index 8af8b16..27e1861 100644 (file)
        "editpage-invalidcontentmodel-text": "Το μοντέλο ''$1'' δεν υποστηρίχτηκε.",
        "editpage-notsupportedcontentformat-title": "Μορφή περιεχομένου που δεν υποστηρίζεται",
        "editpage-notsupportedcontentformat-text": "Η μορφή του περιεχομένου $1 δεν υποστηρίζεται από το μοντέλο περιεχομένου $2.",
+       "slot-name-main": "Κεντρική σελίδα",
        "content-model-wikitext": "κείμενο wiki",
        "content-model-text": "απλό κείμενο",
        "content-model-javascript": "JavaScript",
        "pageinfo-display-title": "Εμφανιζόμενος τίτλος",
        "pageinfo-default-sort": "Προεπιλεγμένο κλειδί ταξινόμησης",
        "pageinfo-length": "Μήκος σελίδας (σε bytes)",
+       "pageinfo-namespace": "Ονοματοχώρος",
        "pageinfo-article-id": "Αναγνωριστικό σελίδας",
        "pageinfo-language": "Γλώσσα περιεχομένου σελίδας",
        "pageinfo-language-change": "αλλαγή",
        "tag-list-wrapper": "[[Special:Tags|{{PLURAL:$1|Ετικέτα|Ετικέτες}}]]: $2",
        "tag-mw-contentmodelchange": "αλλαγή μοντέλου περιεχομένου",
        "tag-mw-new-redirect": "Νέα ανακατεύθυνση",
+       "tag-mw-new-redirect-description": "Επεξεργασίες που δημιουργούν μια νέα ανακατεύθυνση ή αλλάζουν μια σελίδα σε ανακατεύθυνση",
        "tag-mw-removed-redirect": "Αφαιρέθηκε ανακατεύθυνση",
+       "tag-mw-removed-redirect-description": "Επεξεργασίες που αλλάζουν μια υπάρχουσα ανακατεύθυνση σε μια μη-ανακατεύθυνση",
        "tag-mw-changed-redirect-target": "Στόχος ανακατεύθυνσης άλλαξε",
+       "tag-mw-changed-redirect-target-description": "Επεξεργασίες που αλλάζουν το στόχο μιας ανακατεύθυνσης",
        "tag-mw-blank": "Άδειασμα περιεχομένου σελίδας",
        "tag-mw-blank-description": "Επεξεργασίες που σβήνουν όλο το περιεχόμενο σελίδας",
        "tag-mw-replace": "Αντικαταστάθηκε",
        "tag-mw-replace-description": "Επεξεργασίες που αφαιρούν πάνω από 90% του περιεχομένου της σελίδας",
        "tag-mw-rollback": "Επαναφορά",
+       "tag-mw-rollback-description": "Επεξεργασίες που επαναφέρουν προηγούμενες επεξεργασίες χρησιμοποιώντας τον σύνδεσμο επαναφοράς",
        "tag-mw-undo": "Αναιρέθηκε",
+       "tag-mw-undo-description": "Επεξεργασίες που αναιρούν προηγούμενες επεξεργασίες χρησιμοποιώντας τον σύνδεσμο αναίρεσης",
        "tags-title": "Ετικέτες",
        "tags-intro": "Η σελίδα καταγράφει τις ετικέτες, καθώς και το τι σημαίνει η κάθε μία, με τις οποίες το λογισμικό μπορεί να μαρκάρει μία επεξεργασία.",
        "tags-tag": "Όνομα ετικέτας",
index 8564d61..b3a0e9b 100644 (file)
        "rcfilters-watchlist-edit-watchlist-button": "Edit your list of watched pages",
        "rcfilters-watchlist-showupdated": "Changes to pages you haven't visited since the changes occurred are in <strong>bold</strong>, with solid markers.",
        "rcfilters-preference-label": "Use non-JavaScript interface",
-       "rcfilters-preference-help": "Loads RecentChanges without filters or highlighting functionality.",
+       "rcfilters-preference-help": "Loads RecentChanges without filters search or highlighting functionality.",
        "rcfilters-watchlist-preference-label": "Use non-JavaScript interface",
-       "rcfilters-watchlist-preference-help": "Loads Watchlist without filters or highlighting functionality.",
+       "rcfilters-watchlist-preference-help": "Loads Watchlist without filters search or highlighting functionality.",
        "rcfilters-filter-showlinkedfrom-label": "Show changes on pages linked from",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>Pages linked from</strong> the selected page",
        "rcfilters-filter-showlinkedto-label": "Show changes on pages linking to",
        "move": "Move",
        "movethispage": "Move this page",
        "unusedimagestext": "The following files exist but are not embedded in any page.\nPlease note that other web sites may link to a file with a direct URL, and so may still be listed here despite being in active use.",
+       "unusedimagestext-categorizedimgisused": "The following files exist but are not embedded in any page. Categorized images are considered as used despite that they are not embedded in any page.\nPlease note that other web sites may link to a file with a direct URL, and so may still be listed here despite being in active use.",
        "unusedcategoriestext": "The following category pages exist, although no other page or category makes use of them.",
        "notargettitle": "No target",
        "notargettext": "You have not specified a target page or user to perform this function on.",
index 529aa1b..f53b037 100644 (file)
        "tog-shownumberswatching": "Montri la nombron da priatentaj uzantoj",
        "tog-oldsig": "Via ekzistanta subskribo:",
        "tog-fancysig": "Trakti subskribon kiel vikitekston (sen aŭtomata ligo)",
-       "tog-uselivepreview": "Montri antaŭrigardojn sen reŝarĝi la paĝon",
+       "tog-uselivepreview": "Montri antaŭrigardojn sen reŝargi la paĝon",
        "tog-forceeditsummary": "Averti min kiam mi konservas malplenan redaktoresumon",
        "tog-watchlisthideown": "Kaŝi miajn redaktojn de la atentaro",
        "tog-watchlisthidebots": "Kaŝi robotajn redaktojn de la atentaro",
        "tog-watchlisthideminor": "Kaŝi malgrandajn redaktojn de la atentaro",
        "tog-watchlisthideliu": "Kaŝi redaktojn de ensalutitaj uzantoj de la atentaro",
        "tog-watchlistreloadautomatically": "Reŝargi la atentaron aŭtomate ĉiam, kiam filtrilo estas ŝanĝita (bezonas Ĝavoskripton)",
-       "tog-watchlistunwatchlinks": "Aldoni rektajn markilojn por malatenti/malatenti ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) al atentaro (bezonas Javascripton por komuti la funkciecon)",
+       "tog-watchlistunwatchlinks": "Aldoni rektajn markilojn por malatenti/atenti ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) al atentaro (bezonas Javascripton por komuti la funkciecon)",
        "tog-watchlisthideanons": "Kaŝi redaktojn de anonimuloj de la atentaro",
        "tog-watchlisthidepatrolled": "Kaŝi patrolitajn redaktojn de la atentaro",
        "tog-watchlisthidecategorization": "Kaŝi enkategoriigon de paĝoj",
        "category_header": "Paĝoj en kategorio “$1”",
        "subcategories": "Subkategorioj",
        "category-media-header": "Dosieroj en kategorio “$1”",
-       "category-empty": "<em>Tiu ĉi kategorio nuntempe enhavas neniun paĝon aŭ plurmedian dosieron.</em>",
+       "category-empty": "<em>Tiu ĉi kategorio nuntempe enhavas neniun paĝon aŭ aŭdovidaĵon.</em>",
        "hidden-categories": "{{PLURAL:$1|Kaŝita kategorio|Kaŝitaj kategorioj}}",
        "hidden-category-category": "Kaŝitaj kategorioj",
        "category-subcat-count": "{{PLURAL:$2|Ĉi tiu kategorio havas nur la jenan subkategorion.|Ĉi tiu kategorio havas la {{PLURAL:$1|jenan subkategorion|$1 jenajn subkategoriojn}}, el $2 entute.}}",
        "broken-file-category": "Paĝoj kun rompita ligilo al dosiero",
        "about": "Pri",
        "article": "Enhava paĝo",
-       "newwindow": "(en nova fenestro)",
+       "newwindow": "(malfermiĝas en nova fenestro)",
        "cancel": "Nuligi",
        "moredotdotdot": "Pli...",
        "morenotlisted": "Ĉi tiu listo povas esti nekompleta.",
        "actions": "Agoj",
        "namespaces": "Nomspacoj",
        "variants": "Variantoj",
-       "navigation-heading": "Navigacia menuo",
+       "navigation-heading": "Navigada menuo",
        "errorpagetitle": "Eraro",
        "returnto": "Reiri al $1.",
        "tagline": "El {{SITENAME}}",
        "help": "Helpo",
+       "help-mediawiki": "Helpo pri MediaWiki",
        "search": "Serĉi",
        "search-ignored-headings": " #<!-- lasu ĉi tiun linion ekzakte kiel ĝi estas --> <pre>\n# Titoloj kiuj estos ignoritaj en serĉado.\n# Ŝanĝoj al ĉi tio efikas tuj kiam la paĝo kun la titolo estas indeksita.\n# Vi povas igi reindeksadon de paĝo, farinte nulan redakton.\n# La sintakso estas jena:\n#   * Io ajn ekde signo \"#\" ĝis la fino de la linio estas komento.\n#   * Ĉiu nemalplena linio estas la ekzakta titolo por ignori usklecon kaj kion ajn.\nReferencoj\nEksteraj ligiloj\nVidu Ankaŭ\n #</pre> <!-- lasu ĉi tiun linion ekzakte kiel ĝi estas -->",
        "searchbutton": "Serĉi",
        "go": "Ek",
        "searcharticle": "Ek",
-       "history": "Historio de paĝo",
+       "history": "Paĝa historio",
        "history_short": "Historio",
        "history_small": "historio",
        "updatedmarker": "ĝisdatigita de post mia lasta vizito",
        "permalink": "Konstanta ligilo",
        "print": "Presi",
        "view": "Vidi",
-       "view-foreign": "Rigardi en $1",
+       "view-foreign": "Vidi sur $1",
        "edit": "Redakti",
        "edit-local": "Redakti lokan priskribon",
        "create": "Krei",
        "viewdeleted_short": "Vidi {{PLURAL:$1|unu forigitan redakton|$1 forigitajn redaktojn}}",
        "protect": "Protekti",
        "protect_change": "ŝanĝi",
-       "unprotect": "Ŝanĝi protekton",
+       "unprotect": "Ŝanĝi la protektadon",
        "newpage": "Nova paĝo",
        "talkpagelinktext": "diskuto",
        "specialpage": "Speciala paĝo",
        "showtoc": "montri",
        "hidetoc": "kaŝi",
        "collapsible-collapse": "kaŝi",
-       "collapsible-expand": "Montri",
+       "collapsible-expand": "Etendi",
        "confirmable-confirm": "Ĉu {{GENDER:$1|vi}} certas?",
        "confirmable-yes": "Jes",
        "confirmable-no": "Ne",
        "error": "Eraro",
        "databaseerror": "Datumbaza eraro",
        "databaseerror-text": "Datumbaza eraro de la serĉmendo okazis.\nĈi tiu eble indikas cimon de la programaro.",
-       "databaseerror-textcl": "Datumbaza eraro de la mendo okazis.",
+       "databaseerror-textcl": "Datumbaza eraro de la informpeto okazis.",
        "databaseerror-query": "Serĉmendo: $1",
        "databaseerror-function": "Funkcio: $1",
        "databaseerror-error": "Eraro: $1",
-       "transaction-duration-limit-exceeded": "Por eviti krei egan atendotempon de replikado, tiu transakcio estis ĉesigita pro la skribdaŭro ($1) superigis la limon da $2 {{plural:$2|sekondo|sekondoj}}.",
-       "laggedslavemode": "Avertu: la paĝo eble ne enhavas lastatempajn ĝisdatigojn.",
-       "readonly": "Datumbazo ŝlosita, nurlega",
-       "enterlockreason": "Bonvolu klarigi, kial oni ŝlosas la datumbazon, kaj\nla estimatan tempon de malŝlosado.",
-       "readonlytext": "La datumbazo estas nuntempe ŝlosita kontraŭ novaj aldonaj kaj aliaj ŝanĝoj, verŝajne pro kutima bontenado de la datumbazo, post kiu ĝi denove normale funkcios.\n\nLa sistema administranto, kiu ŝlosis ĝin, oferis tiun klarigon: $1",
-       "missing-article": "La datumbazo ne trovis la tekston de paĝo kiun ĝi devas trovi, nomita \"$1\" $2.\n\nĈi tio ofte estas kaŭzita de sekvado de malfreŝa ''diff'' aŭ historia ligilo al paĝo kiu estis forigita.\n\nSe ĉi tio ne okazis, verŝajne vi trovis cimon en la softvaro.\nBonvolu raporti ĉi tiun al [[Special:ListUsers/sysop|administranto]], notante la TTT-adreson.",
+       "transaction-duration-limit-exceeded": "Por eviti la kreadon de ege longzn atendotempon de replikado, ĉi tiu transakcio estis ĉesigita, ĉar la skribdaŭro ($1) superis la limon de $2 {{plural:$2|sekundo|sekundoj}}.",
+       "laggedslavemode": "Averto: la paĝo eble ne enhavas lastatempajn ĝisdatigojn.",
+       "readonly": "Datumbazo ŝlosita",
+       "enterlockreason": "Bonvolu klarigi, kial oni ŝlosos la datumbazon, kaj\nla antaŭviditan momenton de malŝlosado.",
+       "readonlytext": "La datumbazo estas nuntempe ŝlosita kontraŭ novaj aldonaj kaj aliaj ŝanĝoj, verŝajne pro kutima bontenado de la datumbazo, post kio ĝi denove normale funkcios.\n\nLa sistema administranto, kiu ŝlosis ĝin, donis ĉi tiun klarigon: $1",
+       "missing-article": "La datumbazo ne trovis la tekston de paĝo kiun ĝi devis trovi, nome \"$1\" $2.\n\nĈi tio ofte estas kaŭzita de sekvado de malfreŝa ''diff'' aŭ historia ligilo al paĝo kiu estis forigita.\n\nSe ĉi tio ne okazis, verŝajne vi trovis cimon en la programaro.\nBonvolu raporti ĝin al [[Special:ListUsers/sysop|administranto]], notante la URL-on.",
        "missingarticle-rev": "(versio#: $1)",
        "missingarticle-diff": "(Diferenco inter versioj: $1, $2)",
        "readonly_lag": "La datumbazo estis aŭtomate ŝlosita dum la subdatumbazo atingas la ĉefan datumbazon.",
        "internalerror_info": "Interna eraro: $1",
        "internalerror-fatal-exception": "Neriparebla escepto de la tipo \"$1\"",
        "filecopyerror": "Ne povis kopii dosieron  \"$1\" al \"$2\".",
-       "filerenameerror": "Ne eblis alinomigi dosieron \"$1\" al \"$2\".",
-       "filedeleteerror": "Neeblis forigi dosieron \"$1\".",
-       "directorycreateerror": "Ne povis krei dosierujon \"$1\".",
+       "filerenameerror": "Ne eblis alinomi la dosieron \"$1\" al \"$2\".",
+       "filedeleteerror": "Ne eblis forigi la dosieron \"$1\".",
+       "directorycreateerror": "Ne eblis krei la dosierujon \"$1\".",
        "directoryreadonlyerror": "Dosierujo \"$1\" estas nurlega.",
        "directorynotreadableerror": "Dosierujo \"$1\" estas nelegebla.",
        "filenotfound": "Ne eblis trovi dosieron \"$1\".",
        "unexpected": "Neatendita valoro: \"$1\"=\"$2\".",
-       "formerror": "Eraro: ne eblis liveri formulon",
-       "badarticleerror": "Tiun ĉi agon oni ne povas apliki al tiu ĉi artikolo.",
-       "cannotdelete": "Ne eblis forigi la elektitan paĝon aŭ dosieron \"$1\".\nEble ĝi estis jam forigita de iu alia.",
-       "cannotdelete-title": "Ne eblas forigi paĝon \"$1\"",
+       "formerror": "Eraro: ne eblis sendi la formularon.",
+       "badarticleerror": "Tiun ĉi agon oni ne povas apliki sur ĉi tiu paĝo.",
+       "cannotdelete": "Ne eblis forigi la elektitan paĝon aŭ dosieron \"$1\".\nEble ĝi estas jam forigita de iu alia.",
+       "cannotdelete-title": "Ne eblas forigi la paĝon \"$1\"",
        "delete-scheduled": "La paĝo ''$1'' estas planita por forigo.\nBonvolu pacienci.",
        "delete-hook-aborted": "Forigo estis ĉesigita per programa etendaĵo de MediaWiki.\nĜi ne donis eksplikon.",
        "no-null-revision": "Ne eblis krei novan nulan revizion por paĝo \"$1\"",
        "badtitle": "Fuŝa titolo",
        "badtitletext": "La petita paĝotitolo estis malvalida, malplena, aŭ malĝuste ligita interlingva aŭ intervikia titolo.\nĜi eble enhavas unu aŭ pliaj signoj, kiuj ne povas esti uzataj en titoloj.",
-       "title-invalid-empty": "La postulata paĝotitolo estas malplena aŭ enhavas nur nomon de nomspace.",
+       "title-invalid-empty": "La postulata paĝotitolo estas malplena aŭ enhavas nur nomon de nomspaco.",
        "title-invalid-utf8": "La postulata paĝotitolo enhavas malvalidan sekvencon de UTF-8.",
        "title-invalid-interwiki": "La postulata paĝotitolo enhavas intervikian ligilon, kiu ne povas esti uzita en titoloj.",
-       "title-invalid-talk-namespace": "La postulata paĝotitolo ligas al al diskutpaĝo, kiu ne ekzistas.",
+       "title-invalid-talk-namespace": "La postulata paĝotitolo ligas al diskutpaĝo kiu ne ekzistas.",
        "title-invalid-characters": "La postulata paĝotitolo enhavas malvalidajn signojn: \"$1\".",
-       "title-invalid-relative": "La titolo enhavas relativan vojon. Relativaj paĝotitoloj (./, ../) estas malvalidaj ĉar ili ofte estus malatingeblaj kiam ilin traktos foliumilo de uzanto.",
+       "title-invalid-relative": "La titolo enhavas relativan vojon. Relativaj paĝotitoloj (./, ../) estas malvalidaj ĉar ili ofte estus malatingeblaj kiam ilin traktos foliumilon de uzanto.",
        "title-invalid-magic-tilde": "La postulata paĝotitolo enhavas malvalidan magian tildan sekvencon (<nowiki>~~~</nowiki>).",
        "title-invalid-too-long": "La postulata paĝotitolo estas tro longa. Ĝi devas esti malpli longa ol $1 {{PLURAL:$1|bitoko|bitokoj}} en la enkodado UTF-8.",
-       "title-invalid-leading-colon": "La postulata paĝotitolo enhavas malvalidan dupunkton en komenco.",
-       "perfcached": "La sekvantaj informoj venas el kaŝmemoro kaj eble ne estas ĝisdataj. Maksimumo de {{PLURAL:$1|unu rezulto estas disponebla|$1 rezultoj estas disponeblaj}} en la kaŝmemoro.",
-       "perfcachedts": "La jenaj datumoj estas el kaŝmemoro kaj estis laste ĝisdatigitaj $1. Maksimumo de {{PLURAL:$4|unu rezulto estas disponebla|$4 rezultoj estas disponeblaj}} en la kaŝmemoro.",
+       "title-invalid-leading-colon": "La postulata paĝotitolo enhavas malvalidan dupunkton en la komenco.",
+       "perfcached": "La jenaj datumoj venas el kaŝmemoro kaj eble ne estas ĝisdataj. Maksimumo de {{PLURAL:$1|unu rezulto estas disponebla|$1 rezultoj estas disponeblaj}} en la kaŝmemoro.",
+       "perfcachedts": "La jenaj datumoj venas el kaŝmemoro kaj estis laste ĝisdatigitaj $1. Maksimumo de {{PLURAL:$4|unu rezulto estas disponebla|$4 rezultoj estas disponeblaj}} en la kaŝmemoro.",
        "querypage-no-updates": "Ĝisdatigoj por ĉi tiu paĝo estas nune neebligitaj.\nDatumoj ĉi tie ne estos nune refreŝigitaj.",
        "viewsource": "Vidi vikitekston",
        "viewsource-title": "Vidi fonton por $1",
        "actionthrottled": "Agado limigita",
-       "actionthrottledtext": "Por kontraŭi misuzon, vi estas limigita farante ĉi tiun agon tro pluroble en mallonga tempdaŭro, kaj vi transpasis ĉi tiun limon. Bonvolu refaru post kelkaj minutoj.",
+       "actionthrottledtext": "Por kontraŭi misuzon, vi estas limigita farante ĉi tiun agon tro pluroble en mallonga tempdaŭro, kaj vi transpasis ĉi tiun limon. Bonvolu provi denove post kelkaj minutoj.",
        "protectedpagetext": "Tiu ĉi paĝo estas ŝlosita por malebligi redaktadon.",
        "viewsourcetext": "Vi povas vidi kaj kopii la fonton de la paĝo.",
        "viewyourtext": "Vi povas vidi kaj kopii la fonton de <strong>viaj redaktoj</strong> al ĉi tiu paĝo.",
        "editinginterface": "<strong>Atentu:</strong> Vi redaktas paĝon, kiu provizas interfacan tekston por la programaro.\nŜanĝoj de ĉi tiu teksto ŝanĝos aspekton de la interfaco por aliaj uzantoj de ĉi tiu vikio.\nPor aldoni aŭ ŝanĝi tradukojn por ĉiuj vikioj, bonvolu uzi [https://translatewiki.net/ translatewiki.net], la projekton por provizi tradukojn por MediaWiki.",
        "translateinterface": "Por ŝanĝi tradukaĵojn por ĉiuj vikioj bonvolu uzi [https://translatewiki.net/ translatewiki.net], la komunan tradukan projekton de MediaWiki.",
        "cascadeprotected": "Ĉi tiu paĝo estas protektita kontraŭ redaktado, ĉar ĝi estas enplektita en la {{PLURAL:$1|sekvan paĝon, kiu|sekvajn paĝojn, kiuj}} estas {{PLURAL:$1|protektata|protektataj}} kun la \"kaskada\" opcio ŝaltita sur:\n$2",
-       "namespaceprotected": "Vi ne rajtas redakti paĝojn en la '''$1''' nomspaco.",
-       "customcssprotected": "Vi ne rajtas redakti ĉi tiun CSS-paĝon, ĉar ĝi enhavas personajn alĝustigojn de alia uzanto.",
-       "customjsonprotected": "Vi ne havas rajton redakti tiun ĉi JSON-paĝon ĉar ĝi enhavas agordojn de alia uzanto.",
-       "customjsprotected": "Vi ne rajtas redakti ĉi tiun Ĝavaskriptan paĝon, ĉar ĝi enhavas personajn alĝustigojn de alia uzanto.",
-       "sitecssprotected": "Vi ne havas rajton redakti tiun ĉi CSS-paĝon ĉar ĝi povas influi ĉiujn vizitantojn.",
-       "sitejsonprotected": "Vi ne havas rajton redakti tiun ĉi JSON-paĝon ĉar ĝi povas influi ĉiujn vizitantojn.",
-       "sitejsprotected": "Vi ne havas rajton redakti tiun ĉi Ĝavoskriptan paĝon ĉar ĝi povas influi ĉiujn vizitantojn.",
-       "mycustomcssprotected": "Vi ne havas la rajton redakti tiun ĉi CSS-paĝon.",
-       "mycustomjsonprotected": "Vi ne havas rajton redakti tiun ĉi JSON-paĝon.",
-       "mycustomjsprotected": "Vi ne havas la rajton redakti tiun ĉi JavaScript-paĝon.",
-       "myprivateinfoprotected": "Vi ne havas permeson por redakti vian privatan informon.",
-       "mypreferencesprotected": "Vi ne havas permeson por redakti viajn preferojn.",
-       "ns-specialprotected": "Paĝoj en la {{ns:special}} nomspaco ne povas esti redaktataj.",
+       "namespaceprotected": "Vi ne rajtas redakti paĝojn en la nomspaco <strong>'''$1'''</strong>.",
+       "customcssprotected": "Vi ne rajtas redakti ĉi tiun CSS-paĝon, ĉar ĝi enhavas personajn agordojn de alia uzanto.",
+       "customjsonprotected": "Vi ne rajtas redakti tiun ĉi JSON-paĝon ĉar ĝi enhavas personajn agordojn de alia uzanto.",
+       "customjsprotected": "Vi ne rajtas redakti ĉi tiun Ĝavaskriptan paĝon, ĉar ĝi enhavas personajn agordojn de alia uzanto.",
+       "sitecssprotected": "Vi ne rajtas redakti tiun ĉi CSS-paĝon ĉar ĝi povas influi ĉiujn vizitantojn.",
+       "sitejsonprotected": "Vi ne rajtas redakti tiun ĉi JSON-paĝon ĉar ĝi povas influi ĉiujn vizitantojn.",
+       "sitejsprotected": "Vi ne rajtas redakti tiun ĉi Ĝavoskriptan paĝon ĉar ĝi povas influi ĉiujn vizitantojn.",
+       "mycustomcssprotected": "Vi ne rajtas redakti tiun ĉi CSS-paĝon.",
+       "mycustomjsonprotected": "Vi ne rajtas redakti tiun ĉi JSON-paĝon.",
+       "mycustomjsprotected": "Vi ne rajtas redakti tiun ĉi Ĝavoskriptan paĝon.",
+       "myprivateinfoprotected": "Vi ne rajtas redakti viajn privatajn informojn.",
+       "mypreferencesprotected": "Vi ne rajtas redakti viajn preferojn.",
+       "ns-specialprotected": "Specialaj paĝoj ne povas esti redaktataj.",
        "titleprotected": "Ĉi tiu titolo estas protektita de kreado de [[User:$1|$1]].\nLa kialo donata estis <em>$2</em>.",
-       "filereadonlyerror": "La dosiero \"$1\" ne estas modifebla, ĉar la dosiera deponejo \"$2\" estas en nurlegebla reĝimo.\n\nLa sistema administranto, kiu ŝlosis ĝin, oferis tiun klarigon: \"$3\".",
-       "invalidtitle": "Malvalida titolo",
+       "filereadonlyerror": "La dosiero \"$1\" ne estas modifebla, ĉar la dosiera deponejo \"$2\" estas en nurlegebla reĝimo.\n\nLa sistema administranto, kiu ŝlosis ĝin, donis ĉi tiun klarigon: \"$3\".",
+       "invalidtitle": "Nevalida titolo",
        "invalidtitle-knownnamespace": "Nevalida titolo kun nomspaco \"$2\" kaj teksto \"$3\"",
        "invalidtitle-unknownnamespace": "Nevalida titolo kun nekonata nomspaca numero $1 kaj teksto \"$2\"",
        "exception-nologin": "Ne ensalutinta",
        "exception-nologin-text": "Bonvolu ensaluti por atingi ĉi tiun paĝon aŭ agon.",
-       "exception-nologin-text-manual": "Vi devas $1, por povi aliri al ĉi tiu paĝo aŭ ago.",
-       "virus-badscanner": "Malbona konfiguro: nekonata virusa skanilo: ''$1''",
-       "virus-scanfailed": "skano malsukcesis (kun kodo $1)",
+       "exception-nologin-text-manual": "Vi devas $1 por povi aliri al ĉi tiu paĝo aŭ ago.",
+       "virus-badscanner": "Malbonaj agordoj: nekonata virusa skanilo: ''$1''",
+       "virus-scanfailed": "skanado malsukcesis (kun kodo $1)",
        "virus-unknownscanner": "nekonata kontraŭvirusilo:",
-       "logouttext": "'''Vi nun estas elsalutinta.'''\n\nNotu ke iuj paĝoj daŭre ŝajnos kvazaŭ vi ankoraŭ estus ensalutinta, ĝis vi refreŝigos kaŝmemoron de via retumilo.",
+       "logouttext": "<strong>Vi nun estas elsalutinta.</strong>\n\nNotu ke por iuj paĝoj eble ŝajnos kvazaŭ vi ankoraŭ estus ensalutinta, ĝis kiam vi vakigos la kaŝmemoron de via retumilo.",
        "cannotlogoutnow-title": "Nuntempe ne eblas elsaluti",
        "cannotlogoutnow-text": "Ne eblas elsaluti dum uzado de $1.",
        "welcomeuser": "Bonvenon, $1!",
-       "welcomecreation-msg": "Via konto estas kreita.\nNe forgesu ŝanĝi viajn [[Special:Preferences|{{SITENAME}}-preferojn]]",
+       "welcomecreation-msg": "Via konto estas kreita.\nVi povas ŝanĝi viajn [[Special:Preferences|{{SITENAME}}-preferojn]] se vi volas.",
        "yourname": "Uzantnomo:",
        "userlogin-yourname": "Uzantnomo",
-       "userlogin-yourname-ph": "Enigu vian uzantonomon",
-       "createacct-another-username-ph": "Enigu la salutnomon:",
+       "userlogin-yourname-ph": "Enigu vian uzantnomon",
+       "createacct-another-username-ph": "Enigu la uzantnomon",
        "yourpassword": "Pasvorto:",
        "userlogin-yourpassword": "Pasvorto",
        "userlogin-yourpassword-ph": "Enigu vian pasvorton",
-       "createacct-yourpassword-ph": "Tajpu pasvorton",
-       "yourpasswordagain": "Retajpu pasvorton",
-       "createacct-yourpasswordagain": "Konfirmu pasvorton",
-       "createacct-yourpasswordagain-ph": "Retajpu pasvorton",
+       "createacct-yourpassword-ph": "Enigu pasvorton",
+       "yourpasswordagain": "Retajpu la pasvorton:",
+       "createacct-yourpasswordagain": "Konfirmu la pasvorton",
+       "createacct-yourpasswordagain-ph": "Retajpu la pasvorton",
        "userlogin-remembermypassword": "Memori mian ensaluton",
-       "userlogin-signwithsecure": "Uzu sekurigitan konekton",
+       "userlogin-signwithsecure": "Uzi sekurigitan konekton",
        "cannotlogin-title": "Ne eblas ensaluti",
-       "cannotlogin-text": "Ensaluto estas neebla.",
+       "cannotlogin-text": "Ne eblas ensaluti.",
        "cannotloginnow-title": "Nuntempe ne eblas ensaluti",
        "cannotloginnow-text": "Ne eblas ensaluti dum uzado de $1.",
-       "cannotcreateaccount-title": "Ne eblas krei konton",
-       "cannotcreateaccount-text": "Senpera kreo de uzantokonto ne estas enŝaltita en ĉi tiu vikio.",
-       "yourdomainname": "Via domajno",
-       "password-change-forbidden": "Ve ne povas ŝanĝi pasvortojn en ĉi tiu vikio.",
+       "cannotcreateaccount-title": "Ne eblas krei kontojn",
+       "cannotcreateaccount-text": "La senpera kreado de uzantokontoj ne estas ŝaltita en ĉi tiu vikio.",
+       "yourdomainname": "Via domajno:",
+       "password-change-forbidden": "Ve ne povas ŝanĝi la pasvortojn en ĉi tiu vikio.",
        "externaldberror": "Aŭ estis datenbaza eraro rilate al ekstera aŭtentikigado, aŭ vi ne rajtas ĝisdatigi vian eksteran konton.",
        "login": "Ensaluti",
        "login-security": "Kontrolu vian identecon",
        "createacct-emailoptional": "Retpoŝta adreso (nedeviga)",
        "createacct-email-ph": "Enigu vian retpoŝtan adreson",
        "createacct-another-email-ph": "Enigu la retpoŝtan adreson",
-       "createaccountmail": "Uzi provizoran hazardsignan pasvorton kaj sendi ĝin al la retpoŝta adreso ĉi-suba",
-       "createaccountmail-help": "Uzebla por krei konton de alia persono sen lerni la pasvorton.",
+       "createaccountmail": "Uzi provizoran hazardan pasvorton kaj sendi ĝin al la retpoŝta adreso ĉi-suba",
+       "createaccountmail-help": "Uzebla por krei konton de alia persono sen ekscii la pasvorton.",
        "createacct-realname": "Vera nomo (nedeviga)",
        "createacct-reason": "Kialo",
        "createacct-reason-ph": "Kial vi kreas plian konton",
-       "createacct-reason-help": "Mesaĝo vidigita en la protokolo pri kreado de konto",
-       "createacct-submit": "Kreu vian konton",
+       "createacct-reason-help": "Mesaĝo montrita en la protokolo pri kreado de konto",
+       "createacct-submit": "Krei vian konton",
        "createacct-another-submit": "Krei konton",
-       "createacct-continue-submit": "Daŭri kreadon de konto",
-       "createacct-another-continue-submit": "Daŭri kreadon de konto",
+       "createacct-continue-submit": "Daŭrigi la kreadon de konto",
+       "createacct-another-continue-submit": "Daŭrigi la kreadon de konto",
        "createacct-benefit-heading": "{{SITENAME}} estas kreata de homoj kiel vi.",
        "createacct-benefit-body1": "{{PLURAL:$1|redakto|redaktoj}}",
        "createacct-benefit-body2": "{{PLURAL:$1|paĝo|paĝoj}}",
        "createacct-benefit-body3": "{{PLURAL:$1|lasta kontribuanto|lastaj kontribuantoj}}",
-       "badretype": "La pasvortoj, kiujn vi tajpis, ne egalas.",
+       "badretype": "La pasvortoj kiujn vi entajpis, ne kongruas.",
        "usernameinprogress": "Kontokreado por ĉi tiu uzantnomo jam estas prilaborata. Bonvolu atendi.",
-       "userexists": "Salutnomo enigita jam estas uzata.\nBonvolu elekti alian nomon.",
+       "userexists": "La enigita uzantnomo jam estas uzata.\nBonvolu elekti alian nomon.",
        "loginerror": "Ensaluta eraro",
        "createacct-error": "Eraro pri kreado de konto",
        "createaccounterror": "Ne eblis krei konton: $1",
-       "nocookiesnew": "La uzantokonto estis kreita sed vi ne estas ensalutinta. {{SITENAME}} uzas kuketojn por akcepti uzantojn. Kuketoj esta malaktivigitaj ĉe vi. Bonvolu aktivigi ilin kaj ensalutu per viaj novaj salutnomo kaj pasvorto.",
-       "nocookieslogin": "{{SITENAME}} uzas kuketojn por akcepti uzantojn. Kuketoj esta malaktivigitaj ĉe vi. Bonvolu aktivigi ilin kaj provu denove.",
-       "nocookiesfornew": "La uzantokonto ne estis kreita, ĉar ne konfirmeblas ĝia fonto. Certiginte ke kuketoj estas ebligitaj, reŝargu tiun ĉi paĝon kaj reprovu.",
-       "createacct-loginerror": "La konto estis sukcese kreita sed vi ne povus esti ensalutita aŭtomate. Bonvolu procedi [[Special:UserLogin|malaŭtomatan ensaluton]].",
-       "noname": "Vi ne tajpis validan salutnomon.",
-       "loginsuccesstitle": "Ensalutis",
-       "loginsuccess": "Vi ensalutis ĉe {{SITENAME}} kiel uzanto \"$1\".",
-       "nosuchuser": "Neniu uzanto havas nomon \"$1\".\nNomoj por uzantoj estas usklecodistingaj.\nKontrolu vian literumadon, aŭ [[Special:CreateAccount|kreu novan konton]].",
-       "nosuchusershort": "Ne ekzistas uzanto kun la nomo \"$1\". Bonvolu kontroli vian ortografion.",
-       "nouserspecified": "Vi devas entajpi salutnomon.",
+       "nocookiesnew": "La uzantokonto estis kreita, sed vi ne estas ensalutinta. {{SITENAME}} uzas kuketojn por akcepti uzantojn. Kuketoj estas malaktivigitaj ĉe vi. Bonvolu aktivigi ilin kaj ensaluti per viaj novaj uzantnomo kaj pasvorto.",
+       "nocookieslogin": "{{SITENAME}} uzas kuketojn por akcepti uzantojn. Kuketoj estas malaktivigitaj ĉe vi. Bonvolu aktivigi ilin kaj provi denove.",
+       "nocookiesfornew": "La uzantokonto ne estis kreita, ĉar ne konfirmeblas ĝia fonto. Certiginte ke kuketoj estas ebligitaj, aktualigu tiun ĉi paĝon kaj reprovu.",
+       "createacct-loginerror": "La konto estis sukcese kreita, sed vi ne povis esti ensalutita aŭtomate. Bonvolu procedi [[Special:UserLogin|malaŭtomatan ensaluton]].",
+       "noname": "Vi ne entajpis validan uzantnomon.",
+       "loginsuccesstitle": "Ensalutinta",
+       "loginsuccess": "<strong>Vi ensalutis en {{SITENAME}} kiel uzanto \"$1\".\n</strong>",
+       "nosuchuser": "Neniu uzanto havas la nomon \"$1\".\nNomoj por uzantoj estas usklecodistingaj.\nKontrolu vian literumadon, aŭ [[Special:CreateAccount|kreu novan konton]].",
+       "nosuchusershort": "Ne ekzistas uzanto kun la nomo \"$1\". Bonvolu kontroli vian literumadon.",
+       "nouserspecified": "Vi devas entajpi uzantnomon.",
        "login-userblocked": "Ĉi tiu uzanto estas forbarita. Ensalutado ne estas permesita.",
        "wrongpassword": "Vi tajpis malĝustan uzantnomon aŭ pasvorton.\nBonvolu provi denove.",
        "wrongpasswordempty": "Vi tajpis malplenan pasvorton. Bonvolu provi denove.",
        "passwordtooshort": "Pasvortoj devas esti longaj almenaŭ  $1 {{PLURAL:$1|1 signon|$1 signojn}}.",
-       "passwordtoolong": "Pasvorto ne povas esti pli longa ol {{PLURAL:$1|1 signo|$1 signoj}}.",
+       "passwordtoolong": "Pasvortoj ne povas esti pli longaj ol {{PLURAL:$1|1 signo|$1 signoj}}.",
        "passwordtoopopular": "Ne eblas uzi kutimajn pasvortojn. Bonvolu uzi pasvorton, kiu estas malpli facile divenebla.",
        "passwordinlargeblacklist": "La enigita pasvorto estas en listo de tre ofte uzita pasvortojn. Bonvolu elekti pli unikan pasvorton.",
-       "password-name-match": "Via pasvorto devas nepre malsami vian salutnomon.",
-       "password-login-forbidden": "Estas malpermesite uzi tiun ĉi salutnomon kaj pasvorton.",
-       "mailmypassword": "Refari pasvorton",
+       "password-name-match": "Via pasvorto devas nepre malsami vian uzantnomon.",
+       "password-login-forbidden": "Estas malpermesite uzi ĉi tiun uzantnomon kaj pasvorton.",
+       "mailmypassword": "Restarigi la pasvorton",
        "passwordremindertitle": "Nova provizora pasvorto por {{SITENAME}}",
-       "passwordremindertext": "Iu (probable vi, el IP-adreso $1) petis novan\npasvorton por {{SITENAME}} ($4). Provizora pasvorto por uzanto\n\"$2\" estis kreita kaj estis farita al \"$3\". Se ĉi tiu estis via\nintenco, vi devos ensaluti kaj elekti novan pasvorton nun. Via provizora pasvorto malvalidiĝos post  {{PLURAL:$5|unu tago|$5 tagoj}}.\n\nSe iu alia faris ĉi tiun peton, aŭ se vi estas rememorinta vian pasvorton,\nkaj ne plu volas ŝanĝi ĝin, vi povas ignori ĉi tiun mesaĝon kaj\nkontinui uzante vian malnovan pasvorton.",
-       "noemail": "Retpoŝtadreso ne estas registrita por uzanto \"$1\".",
-       "noemailcreate": "Vi devas provizi validan retadreson",
-       "passwordsent": "Oni sendis novan pasvorton al la retpoŝtadreso\nregistrita por \"$1\".\nBonvolu ensaluti denove ricevinte ĝin.",
-       "blocked-mailpassword": "Via IP-adreso estas forbarita de redaktado. Por preventi fiuzojn, la pasvorto-restaŭro per tiu IP-adreso estas malpermesita.",
-       "eauthentsent": "Konfirma retmesaĝo estis sendita al la nomita retadreso. Antaŭ ol iu ajn alia mesaĝo estos sendita al la konto, vi devos sekvi la instrukciojn en la mesaĝo por konfirmi ke la konto ja estas via.",
-       "throttled-mailpassword": "Retpoŝto kun reŝargita pasvorto estis jam sendita ene de la {{PLURAL:$1|lasta horo|lastaj $1 horoj}}.\nPor preventi misuzon, nur unu reŝargita pasvorto estos sendita dum {{PLURAL:$1|horo|$1 horoj}}.",
-       "mailerror": "Okazis eraro sendante retpoŝtaĵon: $1",
+       "passwordremindertext": "Iu (probable vi, el IP-adreso $1) petis novan\npasvorton por {{SITENAME}} ($4). Provizora pasvorto por uzanto\n\"$2\" estas kreita kaj estas \"$3\". Se ĉi tio estis via\nintenco, vi ensalutu kaj elektu novan pasvorton nun. Via provizora pasvorto malvalidiĝos post  {{PLURAL:$5|unu tago|$5 tagoj}}.\n\nSe iu alia faris ĉi tiun peton, aŭ se vi intertempe rememoras vian pasvorton, kaj ne plu volas ŝanĝi ĝin, vi povas ignori ĉi tiun mesaĝon kaj daŭre uzi vian malnovan pasvorton.",
+       "noemail": "Neniu retpoŝta adreso estas registrita por uzanto \"$1\".",
+       "noemailcreate": "Vi devas provizi validan retpoŝtan adreson.",
+       "passwordsent": "Nova pasvorto estas sendita al la retpoŝta adreso registrita por \"$1\".\nBonvolu ensaluti denove post kiam vi ricevas ĝin.",
+       "blocked-mailpassword": "Via IP-adreso estas forbarita de redaktado. Por preventi fiuzojn, la pasvorto-restaŭro per ĉi tiu IP-adreso estas malpermesita.",
+       "eauthentsent": "Konfirma retmesaĝo estas sendita al la indikita retpoŝta adreso. Antaŭ ol iu ajn alia mesaĝo estos sendita al la konto, vi devos sekvi la instrukciojn en la mesaĝo por konfirmi ke la konto ja estas via.",
+       "throttled-mailpassword": "Retmesaĝo kun instrukcioj pri restarigo de pasvorto jam estas sendita ene de la {{PLURAL:$1|lasta horo|lastaj $1 horoj}}.\nPor preventi misuzon, nur unu tia retmep estos sendita dum {{PLURAL:$1|horo|$1 horoj}}.",
+       "mailerror": "Okazis eraro sendante retmesaĝon: $1",
        "acct_creation_throttle_hit": "Vizitintoj al ĉi tiu vikio uzintaj vian IP-adreson kreis {{PLURAL:$1|1 konton|$1 kontojn}} dum la lasta $2, kio estas la maksimumo permesita en ĉi tiu tempoperiodo.\nTial, vizitantoj kun ĉi tiu IP-adreso ne povas krei pliajn kontojn ĉi-momente.",
-       "emailauthenticated": "Via retadreso estis konfirmita ekde $2 je $3.",
-       "emailnotauthenticated": "Via retadreso ne jam estas aŭtentigata.\nNeniu retpoŝto estos sendita por iu el la jenaj funkcioj.",
-       "noemailprefs": "Donu retpoŝtan adreson en viaj preferoj, por ke ĉi tiuj funkcioj estu je dispono.",
+       "emailauthenticated": "Via retpoŝta adreso estas konfirmita ekde $2 je $3.",
+       "emailnotauthenticated": "Via retpoŝta adreso ne jam estas konfirmita.\nNeniu retpoŝto estos sendita por iu el la jenaj ebloj.",
+       "noemailprefs": "Indiku retpoŝtan adreson ĉe viaj agordoj, por ke ĉi tiuj ebloj estu je dispono.",
        "emailconfirmlink": "Konfirmu vian retpoŝtan adreson",
-       "invalidemailaddress": "La retadreso ne povas esti akceptita, ĉar ĝi verŝajne havas malvalidan formaton.\nBonvolu enigi bone formatitan adreson aŭ malplenigi tiun kampon.",
+       "invalidemailaddress": "La retadreso ne povas esti akceptita, ĉar ĝi verŝajne havas malvalidan aranĝon.\nBonvolu enigi bone aranĝitan adreson aŭ malplenigi tiun kampon.",
        "cannotchangeemail": "Kontaj retpoŝtadresoj ne povas esti ŝanĝitaj en ĉi tiu vikio.",
-       "emaildisabled": "Ĉi tiu paĝaro ne povas sendi retpoŝtojn.",
+       "emaildisabled": "Ĉi tiu paĝaro ne povas sendi retmesaĝojn.",
        "accountcreated": "Konto kreita",
        "accountcreatedtext": "La uzanto-konto por [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|diskuto]])  estas kreita.",
        "createaccount-title": "Konto-kreado por {{SITENAME}}",
-       "createaccount-text": "Iu kreis konton por via retadreso en {{SITENAME}} ($4) nomata \"$2\", kun pasvorto \"$3\". Vi ensalutu kaj ŝanĝu vian pasvorton nun.\n\nVi povas ignori ĉi tiun mesaĝon, se ĉi tiu konto estis kreita erare.",
+       "createaccount-text": "Iu kreis konton por via retpoŝta adreso en {{SITENAME}} ($4) nomata \"$2\", kun pasvorto \"$3\". Vi ensalutu kaj ŝanĝu vian pasvorton nun.\n\nVi povas ignori ĉi tiun mesaĝon, se ĉi tiu konto estis kreita erare.",
        "login-throttled": "Vi ĵus tro ofte provis ensaluti.\nBonvolu ĝisatendi $1 antaŭ reprovi.",
-       "login-abort-generic": "Via ensaluto malsukcesis - Ĉesigita",
+       "login-abort-generic": "Via ensalutado malsukcesis - Ĉesigita",
        "login-migrated-generic": "Via konto estis migrita kaj via uzantonomo ne plu ekzistas en tiu ĉi vikio.",
        "loginlanguagelabel": "Lingvo: $1",
        "suspicious-userlogout": "Via peto por elsaluti estis malpermesita, ĉar verŝajne ĝi estis sendita de trompita retumilo aŭ kaŝiĝanta prokura servilo.",
-       "createacct-another-realname-tip": "La vera nomo estas nenecesa.\nSe vi decidas indiki ĝin, ĝi estos uzata por montri atribuadon de viaj kontribuoj.",
+       "createacct-another-realname-tip": "La vera nomo estas nedeviga.\nSe vi decidas indiki ĝin, ĝi estos uzata por montri atribuadon de viaj kontribuoj.",
        "pt-login": "Ensaluti",
        "pt-login-button": "Ensaluti",
-       "pt-login-continue-button": "Daŭri ensaluton",
+       "pt-login-continue-button": "Daŭrigi la ensalutadon",
        "pt-createaccount": "Krei konton",
        "pt-userlogout": "Elsaluti",
        "php-mail-error-unknown": "Nekonata eraro en la funkcio mail() de PHP",
-       "user-mail-no-addy": "Provis sendi retpoŝton sen retpoŝtadreso.",
-       "user-mail-no-body": "Provo sendi malplenan aŭ sensence mallongan retpošton.",
+       "user-mail-no-addy": "Provis sendi retmesaĝon sen retpoŝta adreso..",
+       "user-mail-no-body": "Provo sendi malplenan aŭ sensence mallongan retmesaĝon.",
        "changepassword": "Ŝanĝi pasvorton",
-       "resetpass_announce": "Por kompleti ensaluton vi devas agordi novan pasvorton.",
+       "resetpass_announce": "Por kompleti la ensalutadon, vi devas starigi novan pasvorton.",
        "resetpass_text": "<!-- Aldonu tekston ĉi tien -->",
        "resetpass_header": "Ŝanĝi kontan pasvorton",
-       "oldpassword": "Malnova pasvorto",
-       "newpassword": "Nova pasvorto",
-       "retypenew": "Retajpi novan pasvorton",
-       "resetpass_submit": "Fari pasvorton kaj ensaluti",
-       "changepassword-success": "Via pasvorto estis ŝanĝita!",
-       "changepassword-throttled": "Vi tro ofte provis ensaluti al ĉi tiu konto.\nBonvolu atendi $1 antaŭ ol reprovi.",
+       "oldpassword": "Malnova pasvorto:",
+       "newpassword": "Nova pasvorto:",
+       "retypenew": "Retajpi novan pasvorton:",
+       "resetpass_submit": "Starigi pasvorton kaj ensaluti",
+       "changepassword-success": "Via pasvorto estas ŝanĝita!",
+       "changepassword-throttled": "Vi tro ofte provis ensaluti en ĉi tiun konton.\nBonvolu atendi $1 antaŭ ol reprovi.",
        "botpasswords": "Robotaj pasvortoj",
-       "botpasswords-summary": "<em>Robotaj pasvortoj</em> ebligas aliron al uzanto-konto per API sen uzado de ĉefaj ensalutaj datumoj de la konto. La uzantorajtoj disponeblaj dum ensaluto per robota pasvorto povas esti limigitaj.\n\nSe vi ne scias, kial vi devus fari tion, vi probable ne devus fari tion. Neniu devus peti vin generi pasvorton ĉi tie por transdoni.",
+       "botpasswords-summary": "<em>Robotaj pasvortoj</em> ebligas aliron al uzantokonto per API sen uzado de ĉefaj ensalutaj datumoj de la konto. La uzantorajtoj disponeblaj dum ensalutado per robota pasvorto povas esti limigitaj.\n\nSe vi ne scias, kial vi devus fari ĉi tion, vi verŝajne ne devus fari tion. Neniu devus peti vin generi pasvorton ĉi tie por transdoni.",
        "botpasswords-disabled": "Robotaj pasvortoj estas malŝaltitaj.",
        "botpasswords-no-central-id": "Por uzi robotajn pasvortojn vi devas esti ensalutita al centra konto.",
        "botpasswords-existing": "Ekzistantaj robotaj pasvortoj",
        "botpasswords-createnew": "Krei novan robotan pasvorton",
        "botpasswords-editexisting": "Redakti ekzistantan robotan pasvorton",
-       "botpasswords-label-needsreset": "(oni devas rekomencigi la pasvorton)",
+       "botpasswords-label-needsreset": "(la pasvorton devas esti restarigita)",
        "botpasswords-label-appid": "Robota nomo:",
        "botpasswords-label-create": "Krei",
        "botpasswords-label-update": "Ĝisdatigi",
        "botpasswords-label-cancel": "Nuligi",
        "botpasswords-label-delete": "Forigi",
-       "botpasswords-label-resetpassword": "Rekomencigi la pasvorton",
+       "botpasswords-label-resetpassword": "Restarigi la pasvorton",
        "botpasswords-label-grants": "Uzeblaj permesdonoj:",
        "botpasswords-help-grants": "Rajtigiloj permesas aliron al rajtoj jam provizita al via uzantkonto. Ebligi rajtigilojn ĉi tie ne provizas aliron al ajnaj rajtoj ke via uzantkonto ne alie havus. Vidu la [[Special:ListGrants|tablo de rajtigiloj]] por pli da informo.",
        "botpasswords-label-grants-column": "Permeso donita",
        "botpasswords-insert-failed": "Aldono de la robota nomo \"$1\" ne sukcesis. Ĉu ĝi jam estis aldonita?",
        "botpasswords-update-failed": "Ĝisdatigo de la robota nomo \"$1\" ne sukcesis. Ĉu ĝi estis forigita?",
        "botpasswords-created-title": "Robota pasvorto kreita",
-       "botpasswords-created-body": "La pasvorto de roboto por nomo de roboto \"$1\" de la uzanto \"$2\" estis kreita.",
+       "botpasswords-created-body": "La robota pasvorto de por nomo de roboto \"$1\" de la uzanto \"$2\" estas kreita.",
        "botpasswords-updated-title": "Robota pasvorto ĝisdatigita",
-       "botpasswords-updated-body": "La pasvorto de roboto por nomo de roboto \"$1\" de la uzanto \"$2\" estis ĝisdatigita.",
+       "botpasswords-updated-body": "La robota pasvorto por nomo de roboto \"$1\" de la uzanto \"$2\" estas ĝisdatigita.",
        "botpasswords-deleted-title": "Robota pasvorto forigita",
-       "botpasswords-deleted-body": "La robota pasvorto por robota nomo \"$1\" de la {{GENDER:$2|uzanto|uzantino}} \"$2\" estis forigita.",
+       "botpasswords-deleted-body": "La robota pasvorto por robota nomo \"$1\" de la {{GENDER:$2|uzanto|uzantino}} \"$2\" estas forigita.",
        "botpasswords-newpassword": "La nova pasvorto por ensaluti per <strong>$1</strong> estas <strong>$2</strong>. <em>Bonvolu noti ĝin por estonta konsultado.</em> <br> (Por malnovaj robotoj, kiuj postulas, ke la ensaluta nomo estu sama kiel la eventuala uzantonomo, vi povas uzi <strong>$3</strong> kiel uzantonomon kaj <strong>$4</strong> kiel pasvorton.)",
        "botpasswords-no-provider": "Robotopasvortensalutoprovizilo (''BotPasswordsSessionProvider'') maldisponeblas.",
-       "botpasswords-restriction-failed": "Limigoj pri robota pasvorto malebligas tiun ensalutadon.",
-       "botpasswords-invalid-name": "La difinita uzantnomo malenhavas la robotopasvortan disigilon (\"$1\").",
+       "botpasswords-restriction-failed": "Limigoj pri robota pasvorto malebligas ĉi tiun ensalutadon.",
+       "botpasswords-invalid-name": "La difinita uzantnomo ne enhavas la robotopasvortan disigilon (\"$1\").",
        "botpasswords-not-exist": "Uzanto \"$1\" ne havas robotopasvorton, kiu nomiĝas \"$2\".",
        "botpasswords-needs-reset": "La robotpasvorto de la robotnomo \"$2\" de {{GENDER:$1|uzanto}} \"$1\" estu restarigita.",
        "botpasswords-locked": "Vi ne povas ensaluti robotpasvorte, ĉar via konto estas ŝlosita.",
        "resetpass_forbidden": "Pasvortoj ne estas ŝanĝeblaj",
-       "resetpass_forbidden-reason": "Pasvortoj ne povas esti ŝanĝita: $1",
-       "resetpass-no-info": "Vi devas ensaluti por atingi ĉi tiun paĝon rekte.",
+       "resetpass_forbidden-reason": "Pasvortoj ne estas ŝanĝeblaj: $1",
+       "resetpass-no-info": "Vi devas ensaluti por senpere atingi ĉi tiun paĝon.",
        "resetpass-submit-loggedin": "Ŝanĝi pasvorton",
        "resetpass-submit-cancel": "Nuligi",
        "resetpass-wrong-oldpass": "Malvalida provizora aŭ nuna pasvorto.\nVi eble jam ŝanĝis vian pasvorton aŭ petis novan provizoran pasvorton.",
-       "resetpass-recycled": "Bonvolu agordi vian novan pasvorton, kiu estu alia ol via nuntempa pasvorto.",
-       "resetpass-temp-emailed": "Vi alsalutis kun portempa retpoŝta kodo. Por fini la alsalutadon, vi ĉi tie devas difini novan pasvorton.",
+       "resetpass-recycled": "Bonvolu ŝanĝi vian novan pasvorton al io kio estu alia ol via nuntempa pasvorto.",
+       "resetpass-temp-emailed": "Vi ensalutis per portempa retpoŝta kodo. Por fini la ensalutadon, vi ĉi tie devas starigi novan pasvorton.",
        "resetpass-temp-password": "Provizora pasvorto:",
-       "resetpass-abort-generic": "Ŝanĝo de pasvorto estis nuligita per kromprogramo.",
-       "resetpass-expired": "Via pasvorto eksvalidiĝis. Bonvolu difini novan pasvorton por la alsalutado.",
-       "resetpass-expired-soft": "Via pasvorto eksvalidiĝis kaj devas esti ŝanĝata. Bonvolu nun elekti novan pasvorton, aŭ klaki \"{{int:authprovider-resetpass-skip-label}}\" por ŝanĝi ĝin pli malfrue.",
-       "resetpass-validity-soft": "Via pasvorto ne estas valida: $1\n\nBonvolu elekti novan pasvorton nun, aŭ klaku \"{{int:authprovider-resetpass-skip-label}}\", por ŝanĝi ĝin poste.",
-       "passwordreset": "Restarigo de pasvorto",
-       "passwordreset-text-one": "Plenigu ĉi tiun formularon por renovigi vian pasvorton.",
-       "passwordreset-text-many": "{{PLURAL:$1|Plenumu unu el la kampoj por restarigi vian pasvorton.}}",
+       "resetpass-abort-generic": "La ŝanĝo de pasvorto estas nuligita de kromprogramo.",
+       "resetpass-expired": "Via pasvorto eksvalidiĝis. Bonvolu starigi novan pasvorton por ensaluti.",
+       "resetpass-expired-soft": "Via pasvorto eksvalidiĝis kaj devas esti ŝanĝata. Bonvolu nun elekti novan pasvorton, aŭ alklaki \"{{int:authprovider-resetpass-skip-label}}\" por ŝanĝi ĝin poste.",
+       "resetpass-validity-soft": "Via pasvorto ne estas valida: $1\n\nBonvolu elekti novan pasvorton nun, aŭ alklaku \"{{int:authprovider-resetpass-skip-label}}\" por ŝanĝi ĝin poste.",
+       "passwordreset": "Restarigo de la pasvorto",
+       "passwordreset-text-one": "Plenigu ĉi tiun formularon por ricevi provizoran pasvorton per retpoŝto.",
+       "passwordreset-text-many": "{{PLURAL:$1|Plenigu unu el la kampoj por ricevi provizoran pasvorton per retpoŝto.}}",
        "passwordreset-disabled": "Pasvortaj restarigoj estis malŝaltitaj en ĉi tiu vikio.",
-       "passwordreset-emaildisabled": "Retpoŝtaj funkcioj estas malfunkciigitaj en tiu ĉi vikio.",
+       "passwordreset-emaildisabled": "Retpoŝtaj ebloj estas malfunkciigitaj en tiu ĉi vikio.",
        "passwordreset-username": "Uzantnomo:",
        "passwordreset-domain": "Domajno:",
-       "passwordreset-email": "Retpoŝtadreso:",
-       "passwordreset-emailtitle": "Kontaj detaloj en {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Iu (verŝajne vi, de IP-adreso $1) petis restarigon de via pasvorto por {{SITENAME}} ($4). La {{PLURAL:$3|jena uzanto-konto estas asociita|jenaj uzanto-kontoj estas asociitaj}} kun ĉi tiu retpoŝtadreso:\n\n$2\n\nĈi {{PLURAL:$3|tiu provizora pasvorto|tiuj provizoraj pasvortoj}} findatiĝos {{PLURAL:$5|unu tagon|$5 tagojn}}.\nVi ensalutu kaj elektu novan pasvorton nun. Se iu alia petis ĉi tion,\naŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas\nŝanĝi ĝin, vi povas ignori ĉi tiun mesaĝon kaj plu uzi vian \nmalnovan pasvorton.",
-       "passwordreset-emailtext-user": "Uzanto $1 de {{SITENAME}} petis restarigo de via pasvorto por {{SITENAME}}\n($4). La {{PLURAL:$3|jena uzanto-konto estas asociita|jenaj uzanto-kontoj estas asociitaj}} kun ĉi tiu retpoŝtadreso:\n\n$2\n\nĈi {{PLURAL:$3|tiu provizora pasvorto|tiuj provizoraj pasvortoj}} findatiĝos {{PLURAL:$5|unu tagon|$5 tagojn}}.\nVi devas ensaluti kaj elekti novan pasvorton nun. Se iu alia petis ĉi tion,\naŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas ŝanĝi\nĝin, vi povas ignori ĉi tiun mesaĝon kaj uzi vian malnovan pasvorton.",
-       "passwordreset-emailelement": "Salutnomo: \n$1\n\nProvizora pasvorto: \n$2",
-       "passwordreset-emailsentemail": "Se tiu ĉu retpoŝta adreso estas kunligita kun via konto, tiam al ĉi tiu adreso estos sendita retpoŝto por renovigi pasvorton.",
+       "passwordreset-email": "Retpoŝta adreso:",
+       "passwordreset-emailtitle": "Kontaj detaloj sur {{SITENAME}}",
+       "passwordreset-emailtext-ip": "Iu (verŝajne vi, de IP-adreso $1) petis restarigon de via pasvorto por {{SITENAME}} ($4). La {{PLURAL:$3|jena uzanto-konto estas ligita|jenaj uzanto-kontoj estas ligitaj}} kun ĉi tiu retpoŝtadreso:\n\n$2\n\nĈi {{PLURAL:$3|tiu provizora pasvorto|tiuj provizoraj pasvortoj}} malvalidiĝis post {{PLURAL:$5|unu tagon|$5 tagojn}}.\nVi ensalutu kaj elektu novan pasvorton nun. Se iu alia petis ĉi tion,\naŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas\nŝanĝi ĝin, vi povas ignori ĉi tiun mesaĝon kaj plu uzi vian \nmalnovan pasvorton.",
+       "passwordreset-emailtext-user": "Uzanto $1 de {{SITENAME}} petis restarigo de via pasvorto por {{SITENAME}}\n($4). La {{PLURAL:$3|jena uzanto-konto estas ligita|jenaj uzanto-kontoj estas logitaj}} kun ĉi tiu retpoŝtadreso:\n\n$2\n\nĈi {{PLURAL:$3|tiu provizora pasvorto|tiuj provizoraj pasvortoj}} malvalidiĝos post {{PLURAL:$5|unu tagon|$5 tagojn}}.\nVi ensalutu kaj elektu novan pasvorton nun. Se iu alia petis ĉi tion,\naŭ se vi memoris vian originalan pasvorton, kaj vi ne plu volas ŝanĝi\nĝin, vi povas ignori ĉi tiun mesaĝon kaj uzi vian malnovan pasvorton.",
+       "passwordreset-emailelement": "Uzantnomo: \n$1\n\nProvizora pasvorto: \n$2",
+       "passwordreset-emailsentemail": "Se ĉi tiu retpoŝta adreso estas ligita al via konto, tiam al ĉi tiu adreso estos sendita retpoŝto por restarigi la pasvorton.",
        "passwordreset-emailsentusername": "Se estas retpoŝta adreso, kiu estas asociita kun tiu uzantnomo, tiam ni sendos retpoŝtan mesaĝon pri reagordado de la pasvorto.",
        "passwordreset-nocaller": "Vokanto devas esti provizita",
        "passwordreset-nosuchcaller": "Vokanto ne ekzistas: $1",
        "changeemail-none": "(nenio)",
        "changeemail-password": "Via pasvorto por {{SITENAME}}:",
        "changeemail-submit": "Ŝanĝi retpoŝtadreson",
-       "changeemail-throttled": "Vi tro ofte provis alsaluti.\nBonvolu atendi $1, antaŭ ol vi provos denove.",
-       "changeemail-nochange": "Bonvolu tajpi alian novan retpoŝtadreson.",
-       "resettokens": "Renovigi ŝlosilojn",
-       "resettokens-text": "Vi povas rekomencigi ĵetonojn, kiuj ebligas aliron al certaj privataj datumoj, kiuj estas ligataj kun via konto de uzanto ĉi tie.\n\nVi faru tion, se vi akcidente kunhavigis ilin kun iu aŭ se via konto estis malkonfidencigita.",
-       "resettokens-no-tokens": "Ne estas ŝlosiloj renovigeblaj.",
-       "resettokens-tokens": "Ŝlosiloj:",
+       "changeemail-throttled": "Vi tro ofte provis ensaluti.\nBonvolu atendi $1, antaŭ ol provi denove.",
+       "changeemail-nochange": "Bonvolu entajpi alian novan retpoŝtan adreson.",
+       "resettokens": "Restarigi la ĵetonojn",
+       "resettokens-text": "Vi povzs restarigi la ĵetonojn kiuj ebligas aliron al certaj privataj datumoj, kiuj estas ligataj kun via konto ĉi tie.\n\nVi faru tion, se vi akcidente konigis ilin kun iu aŭ se via konto estis malkonfidencigita.",
+       "resettokens-no-tokens": "Ne estas restarigeblaj ĵetonoj.",
+       "resettokens-tokens": "Ĵetonoj:",
        "resettokens-token-label": "$1 (nuna valoro: $2)",
        "resettokens-watchlist-token": "Ĵetono por la retfluo (Atom/RSS) de [[Special:Watchlist|ŝanĝoj je paĝoj sur via atentaro]]",
-       "resettokens-done": "Ŝlosiloj renovigitaj.",
-       "resettokens-resetbutton": "Renovigi elektitajn ŝlosilojn",
+       "resettokens-done": "Ĵetonoj restarigitaj.",
+       "resettokens-resetbutton": "Restarigi elektitajn ĵetonojn",
        "bold_sample": "Grasa teksto",
        "bold_tip": "Grasa teksto",
        "italic_sample": "Kursiva teksto",
        "link_sample": "Titolo de la ligilo",
        "link_tip": "Interna ligilo",
        "extlink_sample": "http://www.example.com ligtitolo",
-       "extlink_tip": "Ekstera ligilo (memoru http:// prefikson)",
+       "extlink_tip": "Ekstera ligilo (ne forgesu la prefikson http://)",
        "headline_sample": "Titola teksto",
        "headline_tip": "Titololinio je dua nivelo",
        "nowiki_sample": "Enigi ne formatitan tekston ĉi tie",
        "minoredit": "Ĉi tiu ŝanĝo estas redakteto",
        "watchthis": "Atenti ĉi tiun paĝon",
        "savearticle": "Konservi paĝon",
-       "savechanges": "Konservi ŝanĝojn",
-       "publishpage": "Eldoni paĝon",
-       "publishchanges": "Publikigi ŝanĝojn",
-       "savearticle-start": "Konservi paĝon…",
-       "savechanges-start": "Konservi ŝanĝojn…",
-       "publishpage-start": "Publikigi paĝon…",
-       "publishchanges-start": "Publikigi ŝanĝojn…",
+       "savechanges": "Konservi la ŝanĝojn",
+       "publishpage": "Publikigi la paĝon",
+       "publishchanges": "Publikigi la ŝanĝojn",
+       "savearticle-start": "Konservi la paĝon…",
+       "savechanges-start": "Konservi la ŝanĝojn…",
+       "publishpage-start": "Publikigi la paĝon…",
+       "publishchanges-start": "Publikigi la ŝanĝojn…",
        "preview": "Antaŭrigardo",
        "showpreview": "Antaŭrigardo",
-       "showdiff": "Montri ŝanĝojn",
-       "blankarticle": "<strong>Atentigo:</strong>La paĝo kiun vi kreas estas malplena.\nSe vi denove klakos al \"$1\" la paĝo estos konservita sen enhavo.",
-       "anoneditwarning": "<strong>Averto:</strong> Vi ne estas ensalutinta.\nVia IP-adreso enregistriĝos en la redakta historio de tiu ĉi paĝo. Se vi <strong>[$1 ensalutas]</strong> aŭ <strong>[$2 kreas konton]</strong>, viaj redaktoj estos atribuitaj al via salutnomo, kune kun aliaj bonaĵoj.",
-       "anonpreviewwarning": "''Vi ne estas ensalutita. La konservo de la paĝo registros vian IP-adreson en redakta historio de ĉi tiu paĝo.''",
-       "missingsummary": "'''Rememorigilo:''' Vi ne provizis redaktan resumon. Se vi alklakos denove la konservan butonon, via redaktaĵo estos konservita sen resumo.",
-       "selfredirect": "<strong>Atentigo:</strong> Ve alidirektas tiun ĉi paĝon al ĝi mem. Vi eble volas difini alian celan paĝon aŭ vi volas redakti alian paĝon.\nSe vi denove klakos al \"$1\", la alidirektilo estos ĉiuokaze kreita.",
-       "missingcommenttext": "Bonvolu entajpi komenton malsupre.",
-       "missingcommentheader": "<strong>Atenton:</strong> Vi ne provizis temon aŭ subtitolon por ĉi tiu komento.\nSe vi klakos \"Konservi\" denove, via redakto estos konservita sen ĝi.",
+       "showdiff": "Montri la ŝanĝojn",
+       "blankarticle": "<strong>Atentigo:</strong> la paĝo kiun vi kreas estas malplena.\nSe vi denove alklakos \"$1\", la paĝo estos konservita sen enhavo.",
+       "anoneditwarning": "<strong>Averto:</strong> vi ne estas ensalutinta.\nVia IP-adreso enregistriĝos en la redakta historio de tiu ĉi paĝo. Se vi <strong>[$1 ensalutas]</strong> aŭ <strong>[$2 kreas konton]</strong>, viaj redaktoj estos atribuitaj al via uzantnomo, kune kun aliaj bonaĵoj.",
+       "anonpreviewwarning": "''Vi ne estas ensalutita. La konservo de la paĝo registros vian IP-adreson en la redakta historio de ĉi tiu paĝo.''",
+       "missingsummary": "<strong>Memorigo:</strong> vi ne provizis redaktan resumon. Se vi alklakos denove \"$1\", via redakto estos konservita sen resumo.",
+       "selfredirect": "<strong>Averto:</strong> vi alidirektas tiun ĉi paĝon al ĝi mem. Vi eble volas difini alian celan paĝon aŭ vi volas redakti alian paĝon.\nSe vi denove alklakos \"$1\", la alidirektilo estos ĉiuokaze kreita.",
+       "missingcommenttext": "Bonvolu entajpi komenton.",
+       "missingcommentheader": "<strong>Memorigo:</strong> vi ne provizis temon aŭ subtitolon por ĉi tiu komento.\nSe vi alklakos \"$1\" denove, via redakto estos konservita sen ĝi.",
        "summary-preview": "Resuma antaŭrigardo:",
        "subject-preview": "Antaŭrigardo de temo:",
        "previewerrortext": "Dum provo antaŭrigardi viajn ŝanĝojn okazis eraro.",
        "blockedtitle": "La uzanto estas forbarita.",
        "blocked-email-user": "<strong>Retpoŝtado de via salutnomo estis blokita. Vi povas ankoraŭ redakti aliajn paĝojn en ĉi tiu vikio.</strong> Ĉiujn detalojn pri la blokado vi povas vidi ĉe [[Special:MyContributions|viaj kontribuoj]].\n\nVin blokis $1.\n\nIndikita kialo: <em>$2</em>.\n\n* Blokita ekde: $8\n* Malblokota je: $6\n* Koncernato: $7\n* Blokado numero #$5",
        "blockedtext-partial": "<strong>Al via salutnomo aŭ IP-adreso estas blokita ŝanĝado de ĉi tiu paĝo. Vi povas ankoraŭ redakti aliajn paĝojn en ĉi tiu vikio.</strong> Ĉiujn detalojn pri la blokado vi povas vidi ĉe [[Special:MyContributions|viaj kontribuoj]].\n \nVin blokis $1.\n\nIndikita kialo: <em>$2</em>.\n\n* Blokita ekde: $8\n* Malblokota je: $6\n* Koncernato: $7\n* Blokado numero #$5",
-       "blockedtext": "'''Via konto aŭ IP-adreso estis blokita'''\n\nLa bloko estis farita de $1.\nLa skribita kialo estas ''$2''.\n\n* Komenco de forbaro: $8\n* Findato de forbarado: $6\n* Intencita forbarito: $7\n\nVi rajtas kontakti $1 aŭ alian [[{{MediaWiki:Grouppage-sysop}}|administranton]] por pridiskuti la forbaradon.\nVi ne povas uzi la funkcion “{{int:emailuser}}”, escepte se vi indikis validan retpoŝtan adreson en viaj [[Special:Preferences|kontaj agordoj]] kaj vi ne estas blokita uzi ĝin.\nVia IP-adreso estas $3 kaj la ID de la forbarado estas $5.\nBonvolu mencii jenajn indikojn en viaj ĉi-temaj kontaktoj.",
+       "blockedtext": "'''Via konto aŭ IP-adreso estis blokita'''\n\nLa bloko estis farita de $1.\nLa donita kialo estas ''$2''.\n\n* Komenco de forbaro: $8\n* Findato de forbarado: $6\n* Intencita forbarito: $7\n\nVi rajtas kontakti $1 aŭ alian [[{{MediaWiki:Grouppage-sysop}}|administranton]] por pridiskuti la forbaradon.\nVi ne povas uzi la funkcion “{{int:emailuser}}”, escepte se vi indikis validan retpoŝtan adreson en viaj [[Special:Preferences|kontaj agordoj]] kaj vi ne estas blokita uzi ĝin.\nVia IP-adreso estas $3 kaj la identigilo de la forbarado estas $5.\nBonvolu mencii jenajn indikojn en viaj ĉi-temaj kontaktoj.",
        "autoblockedtext": "Via IP-adreso estas aŭtomate forbarita, ĉar uzis ĝin alia uzanto, kiun baris $1.\nLa donita kialo estas jena:\n\n:<em>$2</em>\n\n*Komenco de forbaro: $8\n*Limdato de la blokado: $6\n*Intencis forbari uzanton: $7\n\nVi povas kontakti $1 aŭ iun ajn el la aliaj [[{{MediaWiki:Grouppage-sysop}}|administrantojn]] por diskuti la blokon.\n\nNotu, ke vi ne povas uzi la servon \"{{int:emailuser}}\" krom se vi havas validan retpoŝt-adreson registritan en viaj [[Special:Preferences|preferojn]], kaj vi estas ne blokita kontraŭ ĝia uzado.\n\nVia nuna IP-adreso estas $3, kaj la forbaro-identigo estas $5.\nBonvolu inkluzivi tiujn detalojn en iuj ajn demandoj kiun vi farus.",
-       "systemblockedtext": "Via salutnomo aŭ IPa adreso estis aŭtomate forbarita de MediaWiki.\nLa kialo donita estas:\n\n:<em>$2</em>\n\n* Komenco de forbaro: $8\n* Eksvalidiĝo de forbaro: $6\n* Intenca forbarulo: $7\n\nVia nuna IPa adreso estas $3.\nBonvolu inkluzivi ĉiuj supraj detaloj en ajnaj demandoj vi faras.",
+       "systemblockedtext": "Via salutnomo aŭ IPa adreso estis aŭtomate forbarita de MediaWiki.\nLa kialo donita estas:\n\n:<em>$2</em>\n\n* Komenco de forbaro: $8\n* Eksvalidiĝo de forbaro: $6\n* Intenca forbarulo: $7\n\nVia nuna IP-adreso estas $3.\nBonvolu inkluzivi ĉiujn suprajn detalojn en ajnaj demandoj kiujn vi faras.",
        "blockednoreason": "neniu kialo estis donita",
        "whitelistedittext": "Vi devas $1 por redakti paĝojn.",
        "confirmedittext": "Vi devas konfirmi vian retpoŝtan adreson antaŭ ol redakti paĝojn. Bonvolu agordi kaj validigi vian retadreson per viaj [[Special:Preferences|preferoj]].",
        "nosuchsectiontitle": "Ne povas trovi sekcion",
-       "nosuchsectiontext": "Vi provis redakti sekcion, kiu ne ekzistas.\nĜi eble estis movita aŭ forigita dum vi rigardis la paĝon.",
-       "loginreqtitle": "Nepre ensaluti",
+       "nosuchsectiontext": "Vi provis redakti sekcion kiu ne ekzistas.\nĜi eble estis movita aŭ forigita dum vi rigardis la paĝon.",
+       "loginreqtitle": "Ensalutado estas deviga",
        "loginreqlink": "ensaluti",
        "loginreqpagetext": "Bonvolu $1 por vidi aliajn paĝojn.",
-       "accmailtitle": "La pasvorto estas sendita.",
-       "accmailtext": "Hazarde generita pasvorto por [[User talk:$1|$1]] estis sendita al $2.\n\nLa pasvorto por ĉi tiu nova konto povas esti ŝanĝita en la paĝo ''[[Special:ChangePassword|ŝanĝi pasvorton]]'' dum ensalutado.",
+       "accmailtitle": "La pasvorto estas sendita",
+       "accmailtext": "Hazarde generita pasvorto por [[User talk:$1|$1]] estas sendita al $2.\n\nLa pasvorto por ĉi tiu nova konto povas esti ŝanĝita en la paĝo ''[[Special:ChangePassword|ŝanĝi pasvorton]]'' dum ensalutado.",
        "newarticle": "(Nova)",
-       "newarticletext": "Vi sekvis ligilon al paĝo ankoraŭ ne ekzistanta. Se vi volas krei ĝin, ektajpu malsupre (vidu la [$1 helpopaĝon] por klarigoj.) Se vi malintence alvenis ĉi tien, simple alklaku la retrobutonon de via retumilo.",
+       "newarticletext": "Vi sekvis ligilon al paĝo ankoraŭ ne ekzistanta. Se vi volas krei ĝin, ektajpu malsupre (vidu la [$1 helpopaĝon] por klarigoj.) Se vi malintence alvenis ĉi tien, simple alklaku <strong>Reen</strong>-butonon de via retumilo.",
        "anontalkpagetext": "<em>Jen diskutopaĝo por anonima kontribuanto kiu ankoraŭ ne kreis konton aŭ ne uzas ĝin.</em>\nNi tial devas uzi la cifran IP-adreson por identigi tiun kontribuanton.\nĈi tia IP-adreso povas esti uzata de pluraj uzantoj.\nSe vi estas anonimulo kaj preferus eviti tiajn mistrafajn komentojn al vi, bonvolu [[Special:CreateAccount|krei konton]] aŭ [[Special:UserLogin|ensaluti]] por eviti estontan konfuzon pro aliaj anonimaj uzantoj.''",
        "noarticletext": "Mankas teksto en ĉi tiu paĝo.\nVi povas [[Special:Search/{{PAGENAME}}|serĉi ĉi tiun paĝtitolon]] en aliaj paĝoj,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serĉi la rilatajn protokolojn],\naŭ [{{fullurl:{{FULLPAGENAME}}|action=edit}} krei ĉi tiun paĝon]</span>.",
        "noarticletext-nopermission": "Estas neniom da teksto en ĉi tiu paĝo.\nVi povas [[Special:Search/{{PAGENAME}}|serĉi ĉi tiun paĝan titolon]] en aliaj paĝoj,\naŭ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} serĉi la rilatajn protokolojn]</span>, sed vi ne rajtas krei ĉi tiun paĝon.",
        "edit-no-change": "Via redakto estis ignorita, ĉar neniu ŝanĝo estis farita al la teksto.",
        "postedit-confirmation-created": "La paĝo estis kreita.",
        "postedit-confirmation-restored": "La paĝo estis restarigita.",
-       "postedit-confirmation-saved": "Via redakto estis konservita.",
-       "postedit-confirmation-published": "Via redakto estis publikigita.",
+       "postedit-confirmation-saved": "Via redakto estas konservita.",
+       "postedit-confirmation-published": "Via redakto estas publikigita.",
        "edit-already-exists": "Ne eblis krei novan paĝon.\nĜi jam ekzistas.",
-       "defaultmessagetext": "Defaŭlta teksto",
+       "defaultmessagetext": "Defaŭlta mesaĝa teksto",
        "content-failed-to-parse": "Oni malsukcesis analizi $2-entenon laŭ la $1-modelo: $3",
        "invalid-content-data": "Enhavo estas malvalida",
        "content-not-allowed-here": "Enhavo de $1 ne estas permesita en paĝo [[:$2]]",
        "editpage-invalidcontentmodel-text": "La enhava modelo \"$1\" ne estas subtenata.",
        "editpage-notsupportedcontentformat-title": "Nesubtenata enhavoformo",
        "editpage-notsupportedcontentformat-text": "La enhava aranĝo $1 ne estas subtenata de la enhava modelo $2.",
+       "slot-name-main": "Ĉefa",
        "content-model-wikitext": "vikiteksto",
-       "content-model-text": "ordinara teksto",
+       "content-model-text": "plata teksto",
        "content-model-javascript": "JavaScript",
        "content-model-css": "CSS",
-       "content-json-empty-object": "Malplena objeto",
+       "content-json-empty-object": "Malplena objekto",
        "content-json-empty-array": "Malplena tabelo",
        "deprecated-self-close-category": "Paĝoj kun nevalida memferma HTML‑etikedo",
        "deprecated-self-close-category-desc": "La paĝo enhavas malvalidajn memfermajn HTML-markojn, tiajn kiel <code>&lt;b/></code> aŭ <code>&lt;span/></code>. Ilia konduto baldaŭ estos ŝanĝita por esti kongrua kun la specifiko de HTML5, tial ilia uzo en vikia teksto estas malrekomendata.",
        "post-expand-template-argument-category": "Paĝoj enhavantaj forlasitajn argumentojn de ŝablonoj",
        "parser-template-loop-warning": "Rekursiva ŝablono estis trovita: [[$1]]",
        "template-loop-category": "Paĝoj kun ŝablonaj iteracioj",
-       "template-loop-category-desc": "Ĉi tiu paĝo enhavas ŝablonan ciklon, t. e. ŝablono kiu rikure vokas sin mem.",
-       "template-loop-warning": "<strong>Averto:</strong> Ĉi tiu paĝo vokas [[:$1]], kaŭzante ŝablonan ciklon (senfinan rikuran vokadon).",
+       "template-loop-category-desc": "Ĉi tiu paĝo enhavas ŝablonan iteracion, t. e. ŝablono kiu rikure vokas sin mem.",
+       "template-loop-warning": "<strong>Averto:</strong> Ĉi tiu paĝo vokas [[:$1]], kaŭzante ŝablonan iteracion (senfinan rikuran vokadon).",
        "parser-template-recursion-depth-warning": "Ŝablona profundeco transpasis limon ($1)",
        "language-converter-depth-warning": "Profundo de lingvo-konvertilo preterpasis limon ($1)",
        "node-count-exceeded-category": "Paĝoj kie la nombro da nodoj estas preterpasita",
-       "node-count-exceeded-category-desc": "La paĝo superis maksimuman nombron de nodoj.",
-       "node-count-exceeded-warning": "Paĝo preterpasis la nombron da nodoj.",
+       "node-count-exceeded-category-desc": "La paĝo superis la maksimuman nombron de nodoj.",
+       "node-count-exceeded-warning": "Paĝo preterpasis la nombron de nodoj.",
        "expansion-depth-exceeded-category": "Paĝoj en kiuj la ekpansiprofundo estas preterpasita",
-       "expansion-depth-exceeded-category-desc": "La paĝo superis maksimuman profundecon de ekspando.",
+       "expansion-depth-exceeded-category-desc": "La paĝo superis la maksimuman profundecon de ekspando.",
        "expansion-depth-exceeded-warning": "Paĝo preterpasis la ekpansiprofundon.",
        "parser-unstrip-loop-warning": "Cirkloreferencon detektis",
        "unstrip-depth-warning": "Rikurlimiton de analizopoj ($1) superis",
        "revdelete-text-others": "Aliaj administrantoj ankoraŭ havas aliron al la kaŝita enhavo kaj povas malforigi ĝin, tiel longe kiel aldonaj restriktoj ne estas difinitaj.",
        "revdelete-confirm": "Bonvolu konfirmi ke vi intencias fari ĉi tion, ke vi komprenas la konsekvencojn kaj ke vi faras ĉi tion laŭ [[{{MediaWiki:Policy-url}}|la regularo]].",
        "revdelete-suppress-text": "Subpremo '''nur''' estu uzata por la jenaj kazoj:\n* Ebla kalumnia informo\n* Netaŭga persona informo\n*: ''hejmaj adresoj kaj telefonnumeroj, ŝtataj identnumeroj, ktp.''",
-       "revdelete-legend": "Fari videblecajn limigojn",
+       "revdelete-legend": "Agordi videblecajn limigojn",
        "revdelete-hide-text": "Teksto de revizio",
-       "revdelete-hide-image": "Kaŝi enhavon de dosieroj",
+       "revdelete-hide-image": "Kaŝi la enhavon de dosieroj",
        "revdelete-hide-name": "Kaŝi celon kaj parametrojn",
-       "revdelete-hide-comment": "Resumo de redakto",
-       "revdelete-hide-user": "Salutnomo de redaktanto/IP-adreso",
-       "revdelete-hide-restricted": "Subpremi ĉi tiujn datenojn de administrantoj kaj ankaŭ aliaj",
+       "revdelete-hide-comment": "Resumo de redaktoj",
+       "revdelete-hide-user": "Uzantnomo de redaktanto/IP-adreso",
+       "revdelete-hide-restricted": "Subpremi ĉi tiujn datumojn de administrantoj kaj ankaŭ aliaj",
        "revdelete-radio-same": "(ne ŝanĝi)",
        "revdelete-radio-set": "Kaŝita",
        "revdelete-radio-unset": "Videbla",
-       "revdelete-suppress": "Subpremi datenojn de kaj administrantoj kaj aliaj",
-       "revdelete-unsuppress": "Forigi limigojn al restarigitaj versioj",
+       "revdelete-suppress": "Subpremi datumojn de kaj administrantoj kaj aliaj",
+       "revdelete-unsuppress": "Forigi limigojn sur restarigitaj versioj",
        "revdelete-log": "Kialo:",
        "revdelete-submit": "Apliki al {{PLURAL:$1|elektita revizio|elektitaj revizioj}}",
        "revdelete-success": "'''Revizivideblecon ĝisdatigis.'''",
        "revdelete-otherreason": "Alia/aldona kialo:",
        "revdelete-reasonotherlist": "Alia kialo",
        "revdelete-edit-reasonlist": "Redakti kialojn por forigo",
-       "revdelete-offender": "Aŭtoro de revizio:",
+       "revdelete-offender": "Aŭtoro de la revizio:",
        "suppressionlog": "Protokolo pri subigado",
-       "suppressionlogtext": "Jen listo de forigoj kaj forbaroj pri enhavo kaŝita per administrantoj.\nVidi la [[Special:BlockList|forbarliston]] por la listo de forigoj kaj forbaroj aktuale operaciaj.",
+       "suppressionlogtext": "Jen listo de forigoj kaj forbaroj pri enhavo kaŝita per administrantoj.\nVidi la [[Special:BlockList|forbarliston]] por la aktuala listo de forigoj kaj forbaroj.",
        "mergehistory": "Kunigi historiojn de paĝoj",
        "mergehistory-header": "Ĉi tiu paĝo permesas al vi kunigi versiojn de la historio de unu fonta paĝo en pli novan paĝon.\nCertigu ke ĉi tiu ŝanĝo tenos kontinuecon de la historia paĝo.",
        "mergehistory-box": "Kunigi versiojn de du paĝoj:",
        "right-editusercss": "Redaktu CSS-dosierojn de aliaj uzantoj",
        "right-edituserjson": "Redakti JSON-dosierojn de aliaj uzantoj",
        "right-edituserjs": "Redaktu JS-dosierojn de aliaj uzantoj",
+       "right-editsitecss": "Redakti tutretejan CSS",
+       "right-editsitejson": "Redakti tutretejan JSON",
        "right-editmyusercss": "Redakti viajn proprajn CSS-dosierojn",
        "right-editmyuserjson": "Redakti viajn proprajn JSON-dosierojn",
        "right-editmyuserjs": "Redakti viajn proprajn JavaScript-dosierojn",
        "rcfilters-filter-previousrevision-label": "Ne la lasta revizio",
        "rcfilters-filter-previousrevision-description": "Ĉiuj ŝanĝoj kiu ne estas la \"lasta revizio\".",
        "rcfilters-filter-excluded": "Ekskludita",
+       "rcfilters-exclude-button-off": "Ekskludi la elektitajn",
+       "rcfilters-exclude-button-on": "Ekskludante la elektitajn",
        "rcfilters-liveupdates-button": "Aŭtomata ĝisdatigo",
        "rcfilters-liveupdates-button-title-on": "Malŝalti aŭtomatajn ĝisdatigojn",
        "rcfilters-liveupdates-button-title-off": "Montri novajn ŝanĝojn dum ili okazas",
        "rcfilters-watchlist-markseen-button": "Marku ĉiujn ŝanĝojn viditaj",
        "rcfilters-watchlist-edit-watchlist-button": "Redakti vian atentaron",
-       "rcfilters-watchlist-showupdated": "Ŝanĝoj en paĝo, kiun vi ne vizitis post la ŝanĝo, aperas <strong>graslitere</strong>, kun nigra disketo.",
+       "rcfilters-watchlist-showupdated": "Ŝanĝoj en paĝoj, kiujn vi ne vizitis post la ŝanĝo, aperas <strong>grase</strong>, kun plenigitaj buletoj.",
+       "rcfilters-target-page-placeholder": "Enigu nomon de paĝo (aŭ kategorio)",
        "rcnotefrom": "Malsupre estas la {{PLURAL:$5|ŝanĝo|ŝanĝoj}} ekde <strong>$3, $4</strong> (montrante ĝis <strong>$1</strong>).",
        "rclistfrom": "Montri novajn ŝanĝojn ekde \"$3 $2\"",
        "rcshowhideminor": "$1 etajn redaktojn",
        "uploaded-hostile-svg": "Trovis malsekuran CSS-kodon en la stila elemento de alŝutita SVG-a dosiero.",
        "uploaded-event-handler-on-svg": "Ensigni eventotraktilajn atributojn <code>$1=\"$2\"</code> estas malpermisita en SVGaj dosieroj.",
        "uploaded-href-attribute-svg": "Atributoj je \"href\" en SVGaj dosieroj nur povas ligi al \"http://\" aŭ \"https://\" celoj, trovis  <code>&lt;$1 $2=\"$3\"&gt;</code>.",
-       "uploaded-href-unsafe-target-svg": "Trovis je \"href\" ligita al malsekuraj datenoj: URIa celo <code>&lt;$1 $2=\"$3\"&gt;</code> en la alŝuta SVGa dosiero.",
+       "uploaded-href-unsafe-target-svg": "Trovis href ligita al malsekuraj datumoj: URI-celo <code>&lt;$1 $2=\"$3\"&gt;</code> en la alŝutita SVG-dosiero.",
        "uploaded-animate-svg": "Trovis markon je \"animate\", kiu povus ŝanĝi la atributon je \"href\", per uzi la atributon je \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> en la alŝuta SVGa dosiero.",
        "uploaded-setting-event-handler-svg": "Ensigni eventotraktilajn atributojn estas blokita, trovis <code>&lt;$1 $2=\"$3\"&gt;</code> en la alŝuta SVGa dosiero.",
        "uploaded-setting-href-svg": "Uzi la markon je \"set\" por aldoni atributon je \"href\" al ujero estas blokita.",
        "import-mapping-namespace": "Importi en nomspacon:",
        "import-mapping-subpage": "Importi kiel subpaĝojn de la jena paĝo:",
        "import-upload-filename": "Dosiernomo:",
+       "import-upload-username-prefix": "Intervikia prefikso:",
        "import-comment": "Komento:",
        "importtext": "Bonvolu elporti la dosieron el la fonta vikio per la [[Special:Export|elportilo]]. Konservu ĝin sur via persona komputilo kaj poste alŝutu ĝin ĉi tien.",
        "importstart": "Importante paĝojn...",
        "import-noarticle": "Neniu paĝo por importi!",
        "import-nonewrevisions": "Neniuj versioj estis antaŭe importitaj. Aŭ ili ĉiuj jam ekzistis aŭ estis ellasitaj pro eraroj.",
        "xml-error-string": "$1 ĉe linio $2, kolumno $3 (bitiko $4): $5",
-       "import-upload": "Alŝuti XML-datenojn",
-       "import-token-mismatch": "Seancaj datenoj perdiĝis.\n\nVi eble estis elsalutita. <strong>Bonvolu kontroli ke vi ankaŭ estas ensalutita kaj pravu denove</strong>.\nSe tiu ankoraŭ ne funkcios, pravu [[Special:UserLogout|elsaluti]] \nkaj ensaluti denove, kaj kontrolu ke via retumilo permesas kuketon de tiu paĝaro.",
+       "import-upload": "Alŝuti XML-datumojn",
+       "import-token-mismatch": "Seancaj datumoj perdiĝis.\n\nVi eble estis elsalutita. <strong>Bonvolu kontroli ke vi daŭre estas ensalutita kaj provi denove</strong>.\nSe tio ankoraŭ ne funkcios, provu [[Special:UserLogout|elsaluti]] \nkaj ensaluti denove, kaj kontrolu ke via retumilo permesas kuketojn de ĉi tiu paĝaro.",
        "import-invalid-interwiki": "Ne povas importi de la specifita vikio.",
        "import-error-edit": "Paĝo \"$1\" ne estis importita ĉar vi ne rajtas radakti ĝin.",
        "import-error-create": "Paĝo \"$1\" ne estis importita ĉar vi ne rajtas krei ĝin.",
        "exif-gpstrack": "Direkto de movado",
        "exif-gpsimgdirectionref": "Referenco por direkto de bildo",
        "exif-gpsimgdirection": "Direkto de bildo",
-       "exif-gpsmapdatum": "Datenoj uzatoj de geodezia esploro",
+       "exif-gpsmapdatum": "Datumoj uzatoj de geodezia esploro",
        "exif-gpsdestlatituderef": "Referenco por latitudo de destino",
        "exif-gpsdestlatitude": "Latituda destino",
        "exif-gpsdestlongituderef": "Referenco por longitudo de destino",
        "specialpages-group-highuse": "Plej uzitaj paĝoj",
        "specialpages-group-pages": "Listoj de paĝoj",
        "specialpages-group-pagetools": "Paĝaj iloj",
-       "specialpages-group-wiki": "Datenoj kaj iloj",
+       "specialpages-group-wiki": "Datumoj kaj iloj",
        "specialpages-group-redirects": "Alidirektantaj specialaj paĝoj",
        "specialpages-group-spam": "Kontraŭspamiloj",
        "specialpages-group-developer": "Disvolvistaj iloj",
        "mw-widgets-titleinput-description-new-page": "paĝo ankoraŭ ne ekzistas",
        "mw-widgets-titleinput-description-redirect": "alidirekti al $1",
        "mw-widgets-categoryselector-add-category-placeholder": "Aldoni kategorion",
+       "mw-widgets-usersmultiselect-placeholder": "Aldoni pliajn...",
+       "mw-widgets-titlesmultiselect-placeholder": "Aldoni pliajn...",
        "sessionmanager-tie": "Kombini diversajn tipojn de ensaluta peto ne estas permisita: $1.",
        "sessionprovider-generic": "$1 seancoj",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "kuketaj seancoj",
        "log-action-filter-suppress-reblock": "Forigi uzanton per reforbari",
        "log-action-filter-upload-upload": "Novalŝuta",
        "log-action-filter-upload-overwrite": "Realŝuta",
-       "authmanager-authn-not-in-progress": "Aŭtentikigado ne estas progresanta aŭ seanca dateno estis perdita. Bonvolu pravi denove ekde la komenco.",
+       "authmanager-authn-not-in-progress": "Aŭtentigado ne estas progresanta aŭ la seancaj datumoj perdiĝis. Bonvolu provi denove ekde la komenco.",
        "authmanager-authn-no-primary": "La provizita legitimaĵo ne povus esti aŭtentikigita.",
        "authmanager-authn-no-local-user": "La provizitaj legitimaĵoj ne estas asociitaj kun ajna uzanto de ĉi tiu vikio.",
        "authmanager-authn-no-local-user-link": "La provizitaj legitimaĵoj estas validaj sed ne estas asociita kun ajna uzanto de ĉi tiu vikio. Ensalutu per malsama metodo aŭ kreu novan uzanton kaj vi havos elekton por ligi vian antaŭan legitimaĵon kun tiu konto.",
        "authmanager-change-not-supported": "La provizitaj legitimaĵoj ne povas esti ŝanĝita, kiel nenio uzus ilin.",
        "authmanager-create-disabled": "kreado de kontoj estas malebligita",
        "authmanager-create-from-login": "Por krei vian konton, bonvolu plenigi la kampojn.",
-       "authmanager-create-not-in-progress": "Konta kreo ne estas progresanta aŭ seanca dateno estis perdita. Bonvolu pravi denove ekde la komenco.",
+       "authmanager-create-not-in-progress": "La konto kreado ne estas progresanta aŭ la sencaj datumoj perdiĝis. Bonvolu provi denove ekde la komenco.",
        "authmanager-create-no-primary": "La provizitaj legitimaĵoj ne povus esti uzita por konta kreo.",
        "authmanager-link-no-primary": "La provizitaj legitimaĵoj ne povus esti uzita por konta ligado.",
-       "authmanager-link-not-in-progress": "Ligo de konto ne estas progresanta aŭ dateno de seanco estis perdita. Bonvolu pravi denove ekde la komenco.",
+       "authmanager-link-not-in-progress": "La kontokreado ne estas progresanta aŭ la sencaj datumoj perdiĝis. Bonvolu provi denove ekde la komenco.",
        "authmanager-authplugin-setpass-failed-title": "Pasvorta ŝanĝo malsukcesis",
        "authmanager-authplugin-setpass-failed-message": "La aŭtentikigado kromprogramo neis la pasvortan ŝanĝon.",
        "authmanager-authplugin-create-fail": "La kromprogramo de aŭtentikigado neis la keon de konto.",
        "linkaccounts-submit": "Ligi kontojn",
        "unlinkaccounts": "Malligi kontojn",
        "unlinkaccounts-success": "La konto estis malligita.",
-       "authenticationdatachange-ignored": "La ŝanĝo de dateno pri aŭtentikigado ne estis traktita. Eble neniu provizanto estis agorda?",
+       "authenticationdatachange-ignored": "La ŝanĝo de datumoj pri aŭtentigado ne estis traktita. Eble neniu provizanto estis agordita?",
        "userjsispublic": "Bonvolu noti: subpaĝoj en JavaScript ne enhavu konfidenciajn datumojn ĉar ili estas videblaj por aliaj uzantoj.",
        "usercssispublic": "Bonvolu noti: subpaĝoj en CSS ne enhavu konfidenciajn datumojn ĉar ili estas videblaj por aliaj uzantoj.",
        "restrictionsfield-badip": "Malvalida IP-adreso de la intervalo: $1",
        "edit-error-short": "Eraro: $1",
        "edit-error-long": "Eraroj:\n\n$1",
        "revid": "revizio $1",
-       "pageid": "Identigilo de paĝo $1"
+       "pageid": "Identigilo de paĝo $1",
+       "pagedata-title": "Paĝaj datumoj",
+       "passwordpolicies-group": "Grupo",
+       "passwordpolicies-policies": "Politiko",
+       "passwordpolicies-policy-minimalpasswordlength": "Pasvortoj devas esti longaj almenaŭ  $1 {{PLURAL:$1|1 signon|$1 signojn}}.",
+       "passwordpolicies-policy-passwordcannotmatchusername": "La pasvorto ne povas esti la sama kiel la uzantnomo"
 }
index 8bb3b1d..45a1521 100644 (file)
        "ipbcreateaccount": "Estä tunnusten luonti",
        "ipbemailban": "Estä käyttäjää lähettämästä sähköpostia",
        "ipbenableautoblock": "Estä automaattisesti viimeisin IP-osoite, josta käyttäjä on muokannut, sekä ne osoitteet, joista hän jatkossa yrittää muokata.",
-       "ipbsubmit": "Estä",
+       "ipbsubmit": "Estä tämä käyttäjä",
        "ipbother": "Muu aikamääre:",
        "ipboptions": "2 tuntia:2 hours,1 päivä:1 day,3 päivää:3 days,1 viikko:1 week,2 viikkoa:2 weeks,1 kuukausi:1 month,3 kuukautta:3 months,6 kuukautta:6 months,1 vuosi:1 year,ikuinen:infinite",
        "ipbhidename": "Piilota tunnus muokkauksista ja listauksista",
        "pageinfo-display-title": "Sivun otsikko",
        "pageinfo-default-sort": "Oletuslajitteluavain",
        "pageinfo-length": "Sivun pituus (tavuina)",
+       "pageinfo-namespace": "Nimiavaruus",
        "pageinfo-article-id": "Sivun tunnistenumero",
        "pageinfo-language": "Sivun sisällön kieli",
        "pageinfo-language-change": "vaihda",
        "tags-delete-submit": "Tuhoa tämä merkkaus peruuttamattomasti ja pysyvästi",
        "tags-delete-not-allowed": "Sellaisia merkkauksia, jotka tulevat erityisestä ohjelmistolaajennuksesta, ei voi poistaa ennen kuin tämä laajennus erityisesti sallii sen.",
        "tags-delete-not-found": "Merkkausta ”$1” ei ole olemassa.",
-       "tags-delete-too-many-uses": "Tämä merkkaus ”$1” on käytössä useammassa kuin $2 sivuversiossa, joten sitä ei voi poistaa.",
+       "tags-delete-too-many-uses": "Tämä merkkaus ”$1” on käytössä useammassa kuin $2 {{PLURAL:$2|sivuversiossa}}, joten sitä ei voi poistaa.",
        "tags-delete-warnings-after-delete": "Merkkaus ”$1” poistettiin, mutta toimi sai aikaan {{PLURAL:$2|seuraavan varoituksen|seuraavat varoitukset}}:",
        "tags-delete-no-permission": "Sinulla ei ole oikeutta poistaa muutoksien yhteydessä olevia merkkauksia.",
        "tags-activate-title": "Aktivoi merkkaus",
        "logentry-block-unblock": "$1 {{GENDER:$2|poisti muokkauseston}} käyttäjältä {{GENDER:$4|$3}}",
        "logentry-block-reblock": "$1 {{GENDER:$2|muutti}} eston asetuksia kohteessa {{GENDER:$4|$3}}. Eston kesto on $5 $6",
        "logentry-partialblock-block": "$1 {{GENDER:$2|esti}} käyttäjää {{GENDER:$4|$3}} muokkaamasta {{PLURAL:$8||sivuja}} $7. Eston kesto on $5 $6",
-       "logentry-non-editing-block-block": "$1 {{GENDER:$2|esti}} käyttäjää {{GENDER:$4|$3}} suorittamasta muita toimenpiteitä kuin muokkaamista. Eston kesto on $5 $6",
+       "logentry-partialblock-reblock": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$4|$3}} muokkauseston asetuksia estäen muokkausten tekemisen {{PLURAL:$8||sivuihin}} $7. Eston kesto on $5 $6",
+       "logentry-non-editing-block-block": "$1 {{GENDER:$2|esti}} käyttäjää {{GENDER:$4|$3}} suorittamasta määrättyjä toimenpiteitä (lukuun ottamatta muokkaamista). Eston kesto on $5 $6",
+       "logentry-non-editing-block-reblock": "$1 {{GENDER:$2|muutti}} käyttäjän {{GENDER:$4|$3}} toimintaeston asetuksia, jotka koskevat määrättyjä toimenpiteitä. Eston kesto on $5 $6",
        "logentry-suppress-block": "$1 {{GENDER:$2|esti}} käyttäjän {{GENDER:$4|$3}}. Eston kesto on $5 $6",
        "logentry-suppress-reblock": "$1 {{GENDER:$2|muutti}} eston asetuksia kohteessa {{GENDER:$4|$3}}. Eston kesto on $5 $6",
        "logentry-import-upload": "$1 {{GENDER:$2|on tuonut}} kohteen $3 tiedostotallennuksella",
index 288efaf..7641c2a 100644 (file)
                        "Friday83260",
                        "Niridya",
                        "Pamputt",
-                       "Ash Crow"
+                       "Ash Crow",
+                       "Alacabe"
                ]
        },
        "tog-underline": "Soulignement des liens :",
        "returnto": "Revenir à la page $1.",
        "tagline": "De {{SITENAME}}",
        "help": "Aide",
+       "help-mediawiki": "Aide concernant MediaWiki",
        "search": "Rechercher",
        "search-ignored-headings": " #<!-- ne pas modifier cette ligne --><pre>\n# Titres des sections qui seront ignorés par la recherche.\n# Les changements effectués ici prennent effet dès lors que la page avec le titre est indexée.\n# Vous pouvez forcer la réindexation de la page en effectuant une modification vide.\n# La syntaxe est la suivante :\n#   * Toute ce qui suit un « # » jusqu’à la fin de la ligne est un commentaire.\n#   * Toute ligne non-vide est le titre exact à ignorer, casse comprise.\nRéférences\nLiens externes\nVoir aussi\n #</pre><!-- ne pas modifier cette ligne -->",
        "searchbutton": "Rechercher",
        "editpage-invalidcontentmodel-text": "Le modèle de contenu \"$1\" n'est pas pris en charge.",
        "editpage-notsupportedcontentformat-title": "Format de contenu non pris en charge",
        "editpage-notsupportedcontentformat-text": "Le format de contenu $1 n'est pas pris en charge par le modèle de contenu $2 .",
+       "slot-name-main": "Principal",
        "content-model-wikitext": "wikitexte",
        "content-model-text": "texte brut",
        "content-model-javascript": "JavaScript",
        "move": "Renommer",
        "movethispage": "Renommer cette page",
        "unusedimagestext": "Les fichiers suivants existent, mais ne sont inclus dans aucune page.\nVeuillez noter que d’autres sites peuvent accéder à ces fichiers à l’aide de liens directs (URLs), et donc qu’un fichier peut être listé ici alors qu’il est utilisé par ces sites.",
+       "unusedimagestext-categorizedimgisused": "Les fichiers suivants existent mais ne sont inclus dans aucune page. Les images catégorisées sont considérées comme utilisées malgré qu'elles ne soient pas incluses dans aucune page.\nVeuillez noter que les autres sites web peuvent créer un lien vers un fichier à l'aide d'une URL directe, et donc peuvent encore être listés ici malgré qu'ils soient encore utilisés.",
        "unusedcategoriestext": "Les pages de catégories suivantes existent, mais aucune page ou catégorie ne les utilise.",
        "notargettitle": "Pas de cible",
        "notargettext": "Vous n'avez pas indiqué une page ou un utilisateur sur lequel vous souhaitez effectuer cette action.",
        "pageinfo-display-title": "Titre affiché",
        "pageinfo-default-sort": "Clé de tri par défaut",
        "pageinfo-length": "Taille de la page (en octets)",
+       "pageinfo-namespace": "Espace de noms",
        "pageinfo-article-id": "ID de la page",
        "pageinfo-language": "Langue du contenu de la page",
        "pageinfo-language-change": "modifier",
index 86d354b..fa1cece 100644 (file)
        "defaultmessagetext": "Standard tekst",
        "content-failed-to-parse": "Parsing faan $2 för't model $1 ging skiaf: $3",
        "invalid-content-data": "Diar stäänt wat uun, wat diar ei hen hiart",
-       "content-not-allowed-here": "„$1“ mut ei skrewen wurd üüb sidj [[:$2]]",
+       "content-not-allowed-here": "„$1“ mut ei skrewen wurd üüb sidj [[:$2]] uun di spled „$3“",
        "editwarning-warning": "Wan dü detheer sidj slotst, kön feranrangen ferleesen gung.\nÜs uunmeldet brüker könst dü detheer wäärnang bi din iinstelangen oner „{{int:prefs-editing}}“ ufstel.",
        "editpage-notsupportedcontentformat-title": "Detdiar formoot gongt ei.",
        "editpage-notsupportedcontentformat-text": "Det formoot $1 gongt ei mä det model $2.",
        "timezonelegend": "Tidjsoon:",
        "localtime": "Lokaal tidj:",
        "timezoneuseserverdefault": "Wiki standard tidj brük ($1)",
-       "timezoneuseoffset": "Öödern (ferskeel uundu)",
+       "timezoneuseoffset": "Öödern (ferskeel oner uundu)",
        "servertime": "Server klooktidj:",
        "guesstimezone": "Faan a browser auernem",
        "timezoneregion-africa": "Afrikaa",
        "recentchanges-legend-heading": "<strong>Ferklaarang:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (luke uk bi't [[Special:NewPages|list mä nei sidjen]])",
        "recentchanges-legend-plusminus": "(''±123'')",
-       "rcfilters-preference-label": "Det nei werjuun faan a Leetst Feranrangen versteeg",
+       "recentchanges-submit": "Wise",
+       "rcfilters-activefilters-show": "Wise",
+       "rcfilters-preference-label": "Brük di skak saner JavaScript.",
        "rcnotefrom": "Diar {{PLURAL:$5|woort det feranrang|wurd a feranrangen}} sant <strong>$3,$4</strong>uunwiset (ei muar üs <strong>$1</strong> feranrangen).",
        "rclistfrom": "Bluas feranrangen sant $3 $2 wise",
        "rcshowhideminor": "$1 letj feranrangen",
        "mostrevisions": "Sidjen mä miast feranrangen",
        "prefixindex": "Aal a sidjen (mä prefix)",
        "prefixindex-namespace": "Aal a sidjen mä prefix (nöömrüm $1)",
-       "prefixindex-strip": "Prefix uun det list ei uunwise",
+       "prefixindex-submit": "Wise",
+       "prefixindex-strip": "Prefix uun det list fersteeg",
        "shortpages": "Kurt sidjen",
        "longpages": "Lung sidjen",
        "deadendpages": "Sidjen saner ferwisangen",
        "usereditcount": "{{PLURAL:$1|feranrang|$1 feranrangen}}",
        "usercreated": "{{GENDER:$3|Maaget}} di $1 am a klook $2",
        "newpages": "Nei sidjen",
+       "newpages-submit": "Wise",
        "newpages-username": "Brükernööm:",
        "ancientpages": "Al loong ei muar bewerket sidjen",
        "move": "Fersküüw",
        "specialloguserlabel": "Brüker:",
        "speciallogtitlelabel": "Mual (Tiitel of {{ns:user}}:brükernööm för di brüker):",
        "log": "Logbuken",
+       "logeventslist-submit": "Wise",
        "all-logs-page": "Aal a öfentelk logbuken",
        "alllogstext": "Diar wurd aal a logbuken faan {{SITENAME}} uunwiset.\nDet woort efter logbukslach, brüker of sidjennööm uunwiset. Grat- an letjskriiwang skel beaachtet wurd.",
        "logempty": "Diar as niks uun.",
        "cachedspecial-viewing-cached-ts": "Dü lukest en werjuun uun a cache uun. Det as ferlicht ei üüb a leetst stant.",
        "cachedspecial-refresh-now": "Neist werjuun uunluke.",
        "categories": "Kategoriin",
+       "categories-submit": "Wise",
        "categoriespagetext": "{{PLURAL:$1|Detdiar kategorii häält|Jodiar kategoriin hual}} sidjen of datein an koon brükt wurd of uk ei.\nLuke uk bi det list faan [[Special:WantedCategories|nuadag kategoriin]].",
        "categoriesfrom": "Wise kategoriin mä began üüb:",
        "deletedcontributions": "Stregen bidracher",
        "wlheader-showupdated": "Nei feranert sidjen wurd '''fäät''' uunwiset.",
        "wlnote": "Diar {{PLURAL:$1|stäänt det leetst feranrang|stun a leetst <strong>$1</strong> feranrangen}} faan a leetst {{PLURAL:$2|stünj|<strong>$2</strong> stünjen}}. Stant: $3, klook $4.",
        "wlshowlast": "Wise a feranrangen faan a leetst $1 stünjen, $2 daar.",
+       "watchlist-submit": "Wise",
        "watchlist-options": "Iinstelangen för't uunwisin",
        "watching": "Uun't uug behual ...",
        "unwatching": "Ei uun't uug behual ...",
        "delete-confirm": "Strik \"$1\"",
        "delete-legend": "Strik",
        "historywarning": "<strong>Paase üüb:</strong> Det sidj, wat dü strik wel, hää $1 {{PLURAL:$1|werjuun|werjuunen}}:",
+       "historyaction-submit": "Wise",
        "confirmdeletetext": "Dü wel en sidj mä aal sin werjuunen strik. Dü skel gudkään, dat dü witjst, wat dü dääst an dat din dun mä a [[{{MediaWiki:Policy-url}}|brükerreegeln]] auerian stemet.",
        "actioncomplete": "Klaar",
        "actionfailed": "Diar ging wat skiaf",
        "previousdiff": "← Leetst feranrang",
        "nextdiff": "Naist werjuunsferskeel →",
        "mediawarning": "'''Paase üüb:''' Son datei koon fülk programcode haa. Bi't deelloosin an eeben maagin koon dan reegner komer fu.",
-       "imagemaxsize": "Bil mut ei grater wees üs:<br />''(för datei-beskriiwangen)''",
+       "imagemaxsize": "Bil för dateibeskriiwangen mut ei grater wees üs:",
        "thumbsize": "Grate faan sümnaielbilen:",
        "widthheightpage": "$1 × $2, {{PLURAL:$3|1 sidj|$3 sidjen}}",
        "file-info": "Dateigrate: $1, MIME-typ: $2",
        "special-characters-title-endash": "seenkstreg",
        "special-characters-title-emdash": "speegelstreg",
        "special-characters-title-minus": "minus tiaken",
-       "mw-widgets-abandonedit": "Wel dü würelk turag tu't uunlukin-muude, saner tu seekrin?",
+       "mw-widgets-abandonedit": "Wel dü würelk det bewerkin-muude ferläät, saner tu seekrin?",
        "mw-widgets-dateinput-no-date": "Nian dootem ütjsoocht",
        "mw-widgets-titleinput-description-new-page": "sidj jaft at noch ei",
        "mw-widgets-titleinput-description-redirect": "widjerfeerang tu $1",
index 150504e..b35877f 100644 (file)
@@ -38,7 +38,7 @@
        "tog-watchlisthideminor": "Maské modifikasyon-yan minò annan lis di swivi",
        "tog-watchlisthideliu": "Maské modifikasyon-yan ki fè pa dé itilizatò annan lis di swivi",
        "tog-watchlistreloadautomatically": "Roucharjé otomatikman lis di swivi-a lò lòpsyon di filtraj sa modifyé (JavaScript réki)",
-       "tog-watchlistunwatchlinks": "Ajouté dé markèr dirèk ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) pou paj-ya swivi ké dé chanjman (JavaScript sa nésésèr pou itilizé fonksyonalité-a)",
+       "tog-watchlistunwatchlinks": "Ajouté dé markò dirèk ({{int:Watchlist-unwatch}}/{{int:Watchlist-unwatch-undo}}) pou paj-ya ki swivi ké dé chanjman (JavaScript sa nésésèr pou itilizé fongsyonnalité-a)",
        "tog-watchlisthideanons": "Maské modifikasyon-yan di itilizatò annonnim annan lis di swivi-a",
        "tog-watchlisthidepatrolled": "Maské modifikasyon-yan ki rouli annan lis di swivi",
        "tog-watchlisthidecategorization": "Maské katégorizasyon dé paj",
        "databaseerror-text": "Oun lérò di rékèt di baz di data prodjwi so kò.\nSala pouvé provini di roun annomali annan lojisyèl-a.",
        "databaseerror-textcl": "Oun lérò di rékèt di baz di data prodjwi so kò.",
        "databaseerror-query": "Rékèt : $1",
-       "databaseerror-function": "Fonksyon : $1",
+       "databaseerror-function": "Fongsyon : $1",
        "databaseerror-error": "Lérò : $1",
        "transaction-duration-limit-exceeded": "Pou évité roun tròp fò logmantasyon di délè di réplikasyon, sa tranzagsyon té fika annilé pas douré-a di lékritir ($1) dépasé limit-a di $2 ségonn. Si zòt ka sasé à modifyé oun gran nonm di éléman similtannéman, éséyé plito di éfègtchwé lopérasyon-an an plizyò létap pli piti.",
        "laggedslavemode": "Panga, sa paj pa pouvé kontni tout dannyé modifikasyon-yan ki éfègtchwé",
        "noemailcreate": "Zòt divèt fourni roun adrès di kouryé valid",
        "passwordsent": "Roun nouvèl mo di pas té voyé kot adrès-a di kouryé di itilizat{{GENDER:$1|ò|ris}} « $1 ».\nSouplé, roukonèkté zòt kò aprè ki zòt rousouvri li.",
        "blocked-mailpassword": "Zòt adrès IP bloké an modifikasyon. Pou évité abi-ya, i pa otorizé di itilizé rékipérasyon-an di mo à partir di sa adrès IP.",
-       "eauthentsent": "Roun kouryé di konfirmasyon té voyé à adrès-a ki endiké.\nAnvan ki rounòt kouryé ka fika voyé à sa kont, zòt divèt swiv enstriksyon di kouryé é konfirmé ki kont-a byen di zòt.",
+       "eauthentsent": "Roun kouryé di konfirmasyon té voyé à adrès-a ki endiké.\nAnvan ki rounòt kouryé fika voyé à sa kont, zòt ké divèt swiv lenstrigsyon di kouryé é konfirmen ki kont-a sa byen zòtpa.",
        "throttled-mailpassword": "Roun kouryé di réynisyalizasyon di zòt modipas té ja fika voyé douran {{PLURAL:$1|dannyé lò}}. \nAfen di évité abi-ya, roun sèl kouryé di réynisyalizasyon di zòt modipas ké fika voyé pa {{PLURAL:$1|lò|entèrval di $1 lò}}.",
        "mailerror": "Lérò lò di voyé-a di kouryé : $1",
        "acct_creation_throttle_hit": "Vizitò-ya di sa wiki ki ka itilizé zòt adrès IP kréyé {{PLURAL:$1|roun kont|$1 kont}} douran dannyé $2, sa ki fika limit magsimal ki otorizé annan sa entèrval di tan.\nPa konsékan, kréyasyon-an di kont pou vizitò-ya ki ka itilizé sa adrès IP sa tanporèrman sispann.",
-       "emailauthenticated": "Zòt adrès di kouryé té konfirmé $2 à $3.",
-       "emailnotauthenticated": "Zòt adrès di kouryé pa òkò konfirmé.\nPyès kouryé ké fika voyé pou chaken dé fonksyon swivant.",
-       "noemailprefs": "Endiké roun adrès di kouryé annan zòt préférans pou itilizé sa fonksyon.",
-       "emailconfirmlink": "Konfirmé zòt adrès di kouryé",
+       "emailauthenticated": "Zòt adrès di kouryé té konfirmen $2 à $3.",
+       "emailnotauthenticated": "Zòt adrès di kouryé pòkò konfirmen.\nPyès kouryé ké fika voyé pou chaken dé fongsyon ki ka swiv.",
+       "noemailprefs": "Endiké roun adrès di kouryé annan zòt préférans pou itilizé sa fongsyon-yan.",
+       "emailconfirmlink": "Konfirmen zòt adrès di kouryé",
        "invalidemailaddress": "Sa adrès kouryé pa pouvé fika asèpté pas so fòrma ka parèt enkorèk.\nRantré roun adrès korèkman fòrmaté oben lésé sa chan vid.",
        "cannotchangeemail": "Adrès di kouryé dé kont pa pouvé fika modifyé asou sa wiki.",
        "emaildisabled": "Sa sit pa pouvé voyé di kouryé.",
        "resetpass_header": "Chanjé mo di pas di kont",
        "oldpassword": "Ansyen modipas :",
        "newpassword": "Nouvèl modipas :",
-       "retypenew": "Konfirmé mo di pas nòv :",
+       "retypenew": "Konfirmen modipas nòv-a :",
        "resetpass_submit": "Chanjé modipas-a é konnègté so kò.",
        "changepassword-success": "Zòt modipas modifyé !",
        "changepassword-throttled": "Zòt fè tròp di tantativ di konnègsyon résaman. \nSouplé, antann $1 anvan di réyéséyé.",
index edf4780..7ca67b0 100644 (file)
        "returnto": "חזרה לדף $1.",
        "tagline": "מתוך {{SITENAME}}",
        "help": "עזרה",
+       "help-mediawiki": "עזרה על מדיה־ויקי",
        "search": "חיפוש",
        "search-ignored-headings": " #<!-- יש להשאיר את השורה הזאת ללא שינוי --> <pre>\n# בשורות ההסבר בעברית בהערה הזאת יש תווי כיווניות לשם סידור סימני פיסוק.‏\n# כותרות של פסקאות שהחיפוש יתעלם מהן.‏\n# שינויים כאן ייכנסו לתוקף כשדף עם הכותרת הזאת ייכנס לאינדקס החיפוש.‏\n# אפשר לכפות מפתוח חוזר של דפים על־ידי עשיית עריכה אפסית.‏\n# התחביר הוא:‏\n# * כל דבר מהתו \"#\" עד סוף השורה הוא הערה.‏\n# * כל שורה שאינה ריקה היא כותרת שיש להתעלם ממנה, רגישות לאותיות רישיות וקטנות וכו'.‏\nהערות שוליים\nקישורים חיצוניים\nלקריאה נוספת\n #</pre> <!-- יש להשאיר את השורה הזאת ללא שינוי -->",
        "searchbutton": "חיפוש",
        "edit-gone-missing": "לא ניתן לעדכן את הדף.\nנראה שהוא נמחק.",
        "edit-conflict": "התנגשות עריכה.",
        "edit-no-change": "המערכת התעלמה מעריכתך כיוון שלא נעשה שינוי בטקסט.",
-       "edit-slots-cannot-add": "{{PLURAL:$1|×\94×\97ר×\99×¥ ×\94×\91×\90 ×\90×\99× ×\95 × ×ª×\9e×\9a\94×\97ר×\99צ×\99×\9d ×\94×\91×\90×\99×\9d ×\90×\99× ×\9d × ×ª×\9e×\9b×\99×\9d}} כאן: $2.",
-       "edit-slots-cannot-remove": "{{PLURAL:$1|×\94×\97ר×\99×¥ ×\94×\91×\90 × ×\93רש ×\95×\9c×\90 × ×\99ת×\9f ×\9c×\94ס×\99ר ×\90×\95ת×\95\94×\97ר×\99צ×\99×\9d ×\94×\91×\90×\99×\9d × ×\93רש×\99×\9d ×\95×\9c×\90 × ×\99ת×\9f ×\9c×\94ס×\99ר ×\90×\95ת×\9d}}: $2.",
-       "edit-slots-missing": "{{PLURAL:$1|×\94×\97ר×\99×¥ ×\94×\91×\90 ×\97סר|×\94×\97ר×\99צ×\99×\9d ×\94×\91×\90×\99×\9d ×\97סר×\99×\9d}}: $2.",
+       "edit-slots-cannot-add": "{{PLURAL:$1|×\94×\9eש×\91צת ×\94×\91×\90×\94 ×\90×\99× ×\94 × ×ª×\9e×\9bת|×\94×\9eש×\91צ×\95ת ×\94×\91×\90×\95ת ×\90×\99× ×\9f × ×ª×\9e×\9b×\95ת}} כאן: $2.",
+       "edit-slots-cannot-remove": "{{PLURAL:$1|×\94×\9eש×\91צת ×\94×\91×\90×\94 × ×\93רשת ×\95×\9c×\90 × ×\99ת×\9f ×\9c×\94ס×\99ר ×\90×\95ת×\94\94×\9eש×\91צ×\95ת ×\94×\91×\90×\95ת × ×\93רש×\95ת ×\95×\9c×\90 × ×\99ת×\9f ×\9c×\94ס×\99ר ×\90×\95ת×\9f}}: $2.",
+       "edit-slots-missing": "{{PLURAL:$1|×\94×\9eש×\91צת ×\94×\91×\90×\94 ×\97סר×\94\94×\9eש×\91צ×\95ת ×\94×\91×\90×\95ת ×\97סר×\95ת}}: $2.",
        "postedit-confirmation-created": "הדף נוצר.",
        "postedit-confirmation-restored": "הדף שוחזר.",
        "postedit-confirmation-saved": "העריכה שלך נשמרה.",
        "defaultmessagetext": "טקסט ההודעה המקורי",
        "content-failed-to-parse": "פענוח $2 כתוכן מסוג $1 נכשל: $3",
        "invalid-content-data": "מידע שגוי על התוכן",
-       "content-not-allowed-here": "ת×\95×\9b×\9f ×\9eס×\95×\92 \"$1\" ×\90×\99× ×\95 ×\9e×\95תר ×\91×\93×£ [[:$2]] ×\91×\97ר×\99×¥ \"$3\"",
+       "content-not-allowed-here": "ת×\95×\9b×\9f ×\9eס×\95×\92 \"$1\" ×\90×\99× ×\95 ×\9e×\95תר ×\91×\93×£ [[:$2]] ×\91×\9eש×\91צת \"$3\"",
        "editwarning-warning": "עזיבת הדף הזה עלולה לגרום לך לאבד את כל השינויים שביצעת.\nאם יש לך חשבון באתר, באפשרותך לבטל את האזהרה הזאת בחלק \"{{int:prefs-editing}}\" שבהעדפות שלך.",
        "editpage-invalidcontentmodel-title": "מודל התוכן אינו נתמך",
        "editpage-invalidcontentmodel-text": "מודל התוכן \"$1\" אינו נתמך.",
        "editpage-notsupportedcontentformat-title": "סוג התוכן אינו נתמך",
        "editpage-notsupportedcontentformat-text": "תוכן מסוג $1 אינו נתמך על־ידי מודל התוכן $2.",
+       "slot-name-main": "ראשי",
        "content-model-wikitext": "קוד ויקי",
        "content-model-text": "טקסט רגיל",
        "content-model-javascript": "JavaScript",
        "converter-manual-rule-error": "התגלתה שגיאה בכלל המרת שפה ידני",
        "undo-success": "ניתן לבטל את העריכה.\nאנא {{GENDER:|בדוק|בדקי|בדקו}} את השוואת הגרסאות שלהלן כדי לוודא שזה אכן מה {{GENDER:|שאתה רוצה|שאת רוצה|שאתם רוצים}} לעשות, ולאחר מכן {{GENDER:|שמור|שמרי|שמרו}} את השינויים למטה כדי לסיים את ביטול העריכה.",
        "undo-failure": "לא ניתן היה לבטל את העריכה עקב התנגשות עם עריכות מאוחרות יותר.",
-       "undo-main-slot-only": "×\9c×\90 × ×\99ת×\9f ×\94×\99×\94 ×\9c×\91×\98×\9c ×\90ת ×\94ער×\99×\9b×\94 ×\9b×\99×\95×\95×\9f ×©×\94×\99×\90 ×\9b×\95×\9c×\9cת ×ª×\95×\9b×\9f ×\9e×\97×\95×¥ ×\9c×\97ר×\99×¥ ×\94ר×\90ש×\99.",
+       "undo-main-slot-only": "×\9c×\90 × ×\99ת×\9f ×\9c×\91×\98×\9c ×\90ת ×\94ער×\99×\9b×\94, ×\9b×\99×\95×\95×\9f ×©×\94×\99×\90 ×\9b×\95×\9c×\9cת ×ª×\95×\9b×\9f ×\91×\9eש×\91צת ×©×\95× ×\94 ×\9e×\94×\9eש×\91צת ×\94ר×\90ש×\99ת.",
        "undo-norev": "לא ניתן היה לבטל את העריכה כי היא אינה קיימת או כי היא נמחקה.",
        "undo-nochange": "נראה שהעריכה כבר בוטלה.",
        "undo-summary": "ביטול גרסה $1 של [[Special:Contributions/$2|$2]] ([[User talk:$2|שיחה]])",
        "move": "העברה",
        "movethispage": "העברת דף זה",
        "unusedimagestext": "הקבצים הבאים קיימים, אך אינם מוטבעים בשום דף.\nיש לשים לב לכך שאתרי אינטרנט אחרים עשויים לקשר לקובץ באמצעות כתובת URL ישירה, ולכן הוא עלול להופיע כאן למרות היותו בשימוש פעיל.",
+       "unusedimagestext-categorizedimgisused": "הקבצים הבאים קיימים, אך אינם מוטבעים בשום דף. תמונות השייכות לקטגוריות כלשהן מוגדרות כ\"קבצים הנמצאים בשימוש\" אפילו אם אינן מוטבעות בשום דף.\nיש לשים לב לכך שאתרי אינטרנט אחרים עשויים לקשר לקובץ באמצעות כתובת URL ישירה, ולכן הוא עלול להופיע כאן למרות היותו בשימוש פעיל.",
        "unusedcategoriestext": "הקטגוריות הבאות קיימות, אבל לא נעשה שימוש בהן בשום דף או קטגוריה.",
        "notargettitle": "אין דף מטרה",
        "notargettext": "לא ציינת דף מטרה או משתמש לגביו תבוצע פעולה זו.",
        "pageinfo-display-title": "כותרת התצוגה",
        "pageinfo-default-sort": "מפתח המיון הרגיל",
        "pageinfo-length": "אורך הדף (בבתים)",
+       "pageinfo-namespace": "מרחב שם",
        "pageinfo-article-id": "מזהה הדף",
        "pageinfo-language": "שפת התוכן של הדף",
        "pageinfo-language-change": "שינוי",
index 350dee6..18f4722 100644 (file)
        "userjspreview": "'''Ne zaboravite: samo isprobavate/pregledavate svoj suradnički JavaScript, i da još nije snimljen!'''",
        "sitecsspreview": "'''Ne zaboravite ovo je samo pregled ovog CSS-a.'''\n'''Još uvijek nije sačuvan!'''",
        "sitejspreview": "'''Ne zaboravite ovo je samo pregled JavaScript kôda.'''\n'''Još uvijek nije sačuvan!'''",
-       "userinvalidconfigtitle": "'''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.",
+       "userinvalidconfigtitle": "<strong>Upozorenje:</strong> Nema sučelja pod imenom \"$1\".\nNe zaboravite da imena stranica s .css, .json i .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": "<strong>Ne zaboravite da je ovo samo pregled kako će stranica izgledati.</strong>\nVaše uređivanje još nije snimljeno!",
        "duration-millennia": "$1 {{PLURAL:$1|milenij|milenija}}",
        "rotate-comment": "Sliku je $1 zaokrenuo za {{PLURAL:$1|stupanj|stupnja|stupnjeva}} u smjeru kazaljke na satu.",
        "limitreport-title": "Podatci profiliranja raščlanjivača:",
+       "limitreport-cputime": "Vrijeme uporabe CPU-a",
        "limitreport-cputime-value": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
        "limitreport-walltime": "Uporaba u realnom vremenu",
        "limitreport-walltime-value": "$1 {{PLURAL:$1|sekunda|sekunde|sekundi}}",
+       "limitreport-ppvisitednodes": "Broj čvorova za pretprocesiranje",
+       "limitreport-ppgeneratednodes": "Broj pretprocesiranih generiranih čvorova",
+       "limitreport-postexpandincludesize": "Uključena veličina nakon proširenja",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bajt|bajta|bajtova}}",
+       "limitreport-templateargumentsize": "Veličina argumenta predloška",
+       "limitreport-expansiondepth": "Najveća dubina proširenja",
+       "limitreport-expensivefunctioncount": "Broj složenih funkcija raščlanjivača",
+       "limitreport-unstrip-depth": "Dubina rekurzije unstrip",
+       "limitreport-unstrip-size": "Veličina nakon proširenja unstrip",
        "expandtemplates": "Prikaz sadržaja predložaka",
        "expand_templates_intro": "Ova posebna stranica omogućuje unos wikiteksta i prikazuje njegov rezultat,\nuključujući i (rekurzivno, tj. potpuno) sve uključene predloške u wikitekstu.\nPrikazuje i rezultate funkcija kao <nowiki>{{</nowiki>#language:...}} i varijabli\nkao <nowiki>{{</nowiki>CURRENTDAY}}. Funkcionira pozivanjem parsera same MedijeWiki.",
        "expand_templates_title": "Kontekstni naslov stranice, za {{FULLPAGENAME}} i sl.:",
index 5fef526..0c1d608 100644 (file)
        "pageinfo-display-title": "Megjelenített cím",
        "pageinfo-default-sort": "Alapértelmezett rendezési kulcs",
        "pageinfo-length": "A lap hossza (byte-ban)",
+       "pageinfo-namespace": "Névtér",
        "pageinfo-article-id": "Lapazonosító",
        "pageinfo-language": "Laptartalom nyelve",
        "pageinfo-language-change": "módosítás",
index bda343a..efdfd9f 100644 (file)
        "disclaimers": "Ńwepụ̀aka",
        "disclaimerpage": "Project:Ihe I kweshiri ma",
        "edithelp": "Inyetuáká I rüwa",
+       "helppage-top-gethelp": "Enyemaka",
        "mainpage": "Ihu m̀bụ",
        "mainpage-description": "Ihu m̀bụ",
        "policy-url": "Project:Iwu",
        "hidetoc": "zonari",
        "collapsible-collapse": "Zekpùdo",
        "collapsible-expand": "Gbásà",
+       "confirmable-yes": "Eeh",
+       "confirmable-no": "Mbà",
        "thisisdeleted": "Lé ma tinyechárá $1?",
        "viewdeleted": "Lé $1?",
        "restorelink": "{{PLURAL:$1|orü otụ bakashịrị|orü $1 bakashịrị}}",
        "unexpected": "Onuogụgụ amághị o ga fụtá: ''$1''=''$2''.",
        "formerror": "Nsogbu di: a nwere I ki nyefwuör edemede nka",
        "badarticleerror": "Áká nke ènwèghịkị mẹ nà ihü nke.",
+       "cannotdelete-title": "Enweghi ike ehichapụ ihuakwụkwọ \"$1\"",
        "badtitle": "Ishi edemede öjö",
        "badtitletext": "Íshí ihü Í chọrọ à díghị ézíbóté, efù, mà ȯ dị jikodo di jikodo nke ojö na nke íshí asụsụ-mmékotárí ma wiki-mmékotárí.\nO nwèríkí nwé édé ótù ma nke ozor nke ékwéghị na íshí ihü.",
        "perfcached": "Ómárí á kachẹrẹ na o nwẹrẹ ki a kugwaghị ya na ogẹ di nso. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
index 1d75152..f1338df 100644 (file)
        "protectexpiry": "Expiras:",
        "protect_expiry_invalid": "Expirotempo es ne-valida.",
        "protect_expiry_old": "Expirotempo es in pasinta.",
+       "protect-unchain-permissions": "Desblokusar altra selekti pri protektado",
+       "protect-text": "Hike vu povas vidar e modifikar la nivelo di protekto di la pagino <strong>$1</strong>.",
        "protect-cascadeon": "Ica pagino esas nune protektita, pro ke existas kopio de ol en {{PLURAL:$1|pagino qua|pagini qui}} protektesas \"seriale\" (cascade protection).\nModifiki en la nivelo di protektado por ica pagino ne modifikos la \"protekto seriala\".",
        "protect-default": "Permisar omna uzanti",
        "protect-fallback": "Permisez nur uzeri kun permiso \"$1\"",
        "move-page-legend": "Rinomizar pagino",
        "movepagetext": "Uzante ica formularo onu povas rinomizar pagino, movante olua omna versionaro ad la nova titulo.\nLa antea titulo konvertesos a ridirektilo a la nova titulo.\nLa ligili a la antea titulo dil pagino ne chanjesos.\nVoluntez certigar ke ne esas [[Special:DoubleRedirects|duopla]] o [[Special:BrokenRedirects|ruptota ridirektili]].\nVu responsas ke la ligili duros direktante a la pagino korespondanta.\n\nMemorez ke la pagino '''ne''' rinomizesos se ja existus pagino kun la nova titulo, eceptuante ke la pagino esas vakua o ridirektilo sen versionaro.\nIco signifikas ke vu povos rinomizar pagino a olua originala titulo se eroras skribante la nova titulo, ma ne povos riskribar existanta pagino.\n\n'''EGARDEZ!'''\nIca povas esar drastika chanjo e ne-esperinda por populara pagino;\nvoluntez certigar ke vu komprenas la konsequi qui eventos ante durar adavane.",
        "movepagetext-noredirectfixer": "Uzar la formulario infre rinomizos la pagino, e tota lua historio-listo a la nova nomo.\nL'anciena titulo ridirektesos a la nova titulo.\nVerifikez la [[Special:DoubleRedirects|duopla]] e/o la [[Special:BrokenRedirects|krevita ridirekti]].\n<strong>Esas vua responso verifikar se omna ligili esas korekta.</strong>\n\nVidez ke la pagino <strong>ne rinomizesos se existar pagino kun la sama titulo</strong>, ecepte se ol ridirektesas a la prezenta pagino e ne havas pasinta historio pri redaktado.\nTo signifikas ke vu povas retroe rinomizar pagino a lua antea nomo se ol rinomizesis erore, e ke vu ne povas supresar existanta pagino per ridirektado di altra pagino.\n\n<strong>Atencez:</strong>\nLa rinomizo povas esar drastika chanjo por pagini qui esas populara;\nhavez klara certezo pri la konsequi di la posibla rinomizo di la pagino, ante facar ol!",
+       "movepagetalktext": "Se vu markizos ca buxo, la diskuto-pagino asociita anke modifikesos a la nova titulo, ecepte se diskuto-pagino nevakua ja existar ibe.\n\nCakaze, vu propra mustos movar la diskuto-pagino o mixar la du texti, se vu deziros.",
        "movecategorypage-warning": "<strong>Atencez:</strong> Vu balde rinomizos pagino di \"KATEGORIO\". Nur la titulo di la kategorio chanjesos, ma <em>nula pagino kategoriizita segun l'anciena kategorio</em> modifikesos automatale por la nova kategorio.",
        "movenologintext": "Vu mustas esar registragita uzero ed [[Special:UserLogin|enirir]] por rinomizar pagino.",
        "newtitle": "Nova titulo:",
        "newimages-legend": "Filtrilo",
        "ilsubmit": "Serchar",
        "bydate": "per dato",
+       "minutes": "{{PLURAL:$1|$1 minuto|$1 minuti}}",
        "hours": "{{PLURAL:$1|$1 horo|$1 hori}}",
        "days": "{{PLURAL:$1|$1 dio|$1 dii}}",
        "weeks": "{{PLURAL:$1|$1 semano|$1 semani}}",
        "months": "{{PLURAL:$1|$1 monato|$1 monati}}",
        "years": "{{PLURAL:$1|$1 yaro|$1 yari}}",
+       "minutes-ago": "$1 {{PLURAL:$1|minuto|minuti}} ante nun",
        "metadata": "Metadonaji",
        "metadata-help": "Ca arkivo kontenas plusa informo, probable furnisita per la kamero elektronikala o per la \"scanner\" uzata por krear o kopiar l'imajo.\nSe l'arkivo modifikesos de lua originala stando, kelka detali povos ne reprezentar exakte l'arkivo modifikata.",
        "metadata-fields": "Image metadata fields listed in this message will be included on image page display when the metadata table is collapsed.\nOthers will be hidden by default.\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",
index f8a5a7a..2d09a18 100644 (file)
        "editpage-invalidcontentmodel-text": "Il modello di contenuto \"$1\" non è supportato.",
        "editpage-notsupportedcontentformat-title": "Formato contenuto non supportato",
        "editpage-notsupportedcontentformat-text": "Il formato del contenuto $1 non è supportato dal modello di contenuto $2.",
+       "slot-name-main": "Principale",
        "content-model-wikitext": "wikitesto",
        "content-model-text": "testo normale",
        "content-model-javascript": "JavaScript",
        "pageinfo-display-title": "Titolo visualizzato",
        "pageinfo-default-sort": "Criterio di ordinamento predefinito",
        "pageinfo-length": "Lunghezza della pagina (in byte)",
+       "pageinfo-namespace": "Namespace",
        "pageinfo-article-id": "ID della pagina",
        "pageinfo-language": "Lingua del contenuto della pagina",
        "pageinfo-language-change": "cambia",
index 2cd4d36..797f957 100644 (file)
        "filehist-comment": "Areze-kerdene",
        "imagelinks": "Gurenaisê dosya",
        "linkstoimage": "Ano {{PLURAL:$1|girê pele|$1 girê pelu}} be na dosya:",
-       "nolinkstoimage": "Pelanê ser ena dosyayê link biyê çin o.",
+       "nolinkstoimage": "Pelê ke na dosya gurenenê, çinê.",
        "sharedupload": "Na dosya depoê $1 rawa u beno ke procunê binu de gurenina.",
        "sharedupload-desc-here": "Beno ke depoê na dosya $1 ra be terefê procunê bınu ra gurenino.\nCêr [$2 pela arezekerdena dosya de] arezekerdene asnina.",
        "uploadnewversion-linktext": "Dosya de newiye bar ke",
index 59fbbe7..eaa9175 100644 (file)
        "yourname": "ဆ်ုသုံႋဆာႋမိင်:",
        "userlogin-yourname": "ဆ်ုသုံႋဆာႋမိင်",
        "userlogin-yourname-ph": "အွးလင်ႋလ်ုၮ်ုမိင်ႋ",
+       "yourpassword": "ၜီးၜါ်ဖၠုံး:",
        "userlogin-yourpassword": "ၜီးၜါ်",
        "userlogin-yourpassword-ph": "ဆူ့လင်ကီ ၮင့်ဆါႋၜီးၜါ်",
        "createacct-yourpassword-ph": "ဆူ့လင်ကီ ၮင့်ဆါႋဆ်ုသီးယာ့",
        "mypreferences": "မ်ုလုဲႋၯံင်လ်ုဖး",
        "prefs-user-pages": "ဆ်ုသုံႋဏင့်ဆာႋ လိက်မေံၜၠါ်လ်ုဖး",
        "prefs-watchlist": "ခိုဝ်ယောဝ်ႋစ်ုရင့်",
+       "prefs-editing": "ဆ်ုသံင့်ၜးၯဴ",
        "username": "{{GENDER:$1|ဆ်ုသုံႋဆာႋမိင်}}:",
+       "yourrealname": "အ်ုမိင်ယင်ႋ:",
        "editusergroup": "မ်ုၮဲဖှ်ေ ဆ်ုသုံႋဆာႋကုံရွာဲ",
        "group-user": "ဆ်ုသုံႋဆာႋလ်ုဖး",
        "group-autoconfirmed": "အ်ုဆ်ုမာအ်ု ဏေဝ်ႋၯုင်ႋခိုင့်ထ ဆ်ုသုံႋဆာႋလ်ုဖး",
        "all-logs-page": "ၜးဆါင့်ကိုဝ်ၯာစ်ုရင့်လုက်ဆိင့်",
        "alllogstext": "{{SITENAME}}ခဝ့် ၮေဝ်သှ်ေသယ်ၮှ် မာၮါင်းလုက်ဆိင့်လ်ုဖး အင်းကုံၮဲဖှ်ေထ ဆေဝ်ႋလှ်။\nမာၮါင်းအ်ုဍုံ၊ ဆ်ုသုံ့မၠိင် (လိက်ဖၠုံးအ်ုဍောဟ်အ်ုပေဝ့်)၊ လ်ုမွာဲၜး ၜးဆါင့်လိက်မေံၜၠါ် (လိက်ဖၠုံးအ်ုဍောဟ်အ်ုပေဝ့်) ၮှ် အင်းလုဲႋ ဆ်ုယောဝ်သယ်ၮ်ှ အင်းကုံဖှ်ေထဆေဝ်ႋလှ်။",
        "logempty": "လိက်မါၮါင်းဖိုင် ထိုဝ်ၜုဂ်ၯံင်ခေဝ် လ်ုဍးၜး။",
+       "checkbox-none": "အှ်ဏင်မိင်အေ",
        "allpages": "လိက်မေံၜၠါ်လုက်ဆိင့်",
        "allarticles": "လိက်မေံၜၠါ်လုက်ကၠာ",
        "allinnamespace": "လိက်မေံၜၠါ်လုက်ဆိင့် (ဏဲပ်ုယုံ့မိင် $1)",
        "export": "လိက်မေံသယ်လ်ဖး Export ထုက်ထုင်း",
        "export-submit": "မ်ုသုံ့ထင်း",
        "thumbnail-more": "မာဍောဟ်အ်ုလာဟှင်",
+       "import-interwiki-submit": "ဆူ့ဍုဂ်သုံ့လင်",
        "importlogpage": "ဍုဂ်ဆူ့ စ်ုရင့်",
        "tooltip-pt-userpage": "{{GENDER:|ၮ်ုခဝ့် ဆ်ုသုံ့ဆာ}} လိက်မေံၜၠါ်",
        "tooltip-pt-mytalk": "{{GENDER:|ၮ်ုခဝ့်}} ဆ်ုအ်ှကုံဆ်ုခၠါင်လိက်မေံၜၠါ်",
        "exif-datetimedigitized": "တ်ုဂျတယ်အင်းလယ် မူႋသင့်လ်ုအ်ုခါ့",
        "exif-orientation-1": "ဟ်ုအ်ှသှ်ေ",
        "exif-lightsource-2": "မှ်ေထေဝ် အ်ုဖါန်ႋၯာင်ႋ",
+       "exif-gaincontrol-0": "အှ်ဏင်မိင်အေ",
        "namespacesall": "လုက်ခၠါ",
        "monthsall": "လုက်ဆိင့်",
        "imgmultipagenext": "လိက်မေံၜၠာ် လ်ုခဝ့်အိုဝ်",
        "tags-active-yes": "မွာဲ",
        "tags-active-no": "လ်ုမွာဲၜး",
        "tags-hitcount": "ဆ်ုအင်းလယ် $1 {{PLURAL:$1|ၮါင်း|ၮါင်းလ်ုဖး}}",
+       "tags-edit-existing-tags-none": "အှ်ဏင်မိင်အေ",
        "htmlform-yes": "မွာဲ",
        "logentry-delete-delete": "$3 လိက်မေံအိုဝ် $1 ၮ်ှ {{GENDER:$2|ပ္တုံသီ့ဝေ့ဆေဝ်ႋလ်ှ}}",
        "logentry-delete-restore": "$3 လိက်မေံအိုဝ် $4 ခဝ့် $1ၮှ် {{GENDER:$2|သုဂ်ထါင်ႋဖှ်ေထလှ်}}",
        "rightsnone": "(ပၠဝ်ပြေ)",
        "searchsuggest-search": "{{SITENAME}} ဖိုင် မ်ုအင်းၰူ့",
        "duration-days": "$1 {{PLURAL:$1|မူႋသင့်|မူႋသင့်လ်ုဖး}}",
+       "pagelang-select-lang": "မ်ုလုဲႋ ဆ်ုခၠါင်ဘာႋသာ့",
        "mw-widgets-titlesmultiselect-placeholder": "ဆူ့ဍုဂ် ဆ်ုအှ်ထါင်...",
-       "randomrootpage": "လ်ုၜးမိင် အ်ုခံင့် လိက်မေံၜၠါ်"
+       "randomrootpage": "လ်ုၜးမိင် အ်ုခံင့် လိက်မေံၜၠါ်",
+       "authmanager-realname-label": "အ်ုမိင်ယင်ႋ"
 }
index 78f9b77..19e8e6b 100644 (file)
        "returnto": "$1 문서로 돌아갑니다.",
        "tagline": "{{SITENAME}}",
        "help": "도움말",
+       "help-mediawiki": "미디어위키 도움말",
        "search": "검색",
        "search-ignored-headings": " #<!-- 이 줄은 그대로 두십시오 --> <pre>\n# 검색에서 무시되는 문단 제목입니다.\n# 이 문서에 대한 바뀜은 즉시 문단 제목으로 된 문서가 다시 색인됩니다.\n# null 편집을 하여 문서 다시 색인을 강제할 수 있습니다.\n# 문법은 다음과 같습니다:\n#   * \"#\" 문자에서 줄의 끝까지는 주석입니다\n#   * 빈 줄이 아닌 줄은 무시할 정확한 제목이며, 대소문자를 무시합니다\n각주\n참조\n참고\n출처\n외부 링크\n같이 보기\n함께 보기\n #</pre> <!-- 이 줄은 그대로 두십시오 -->",
        "searchbutton": "검색",
        "previewerrortext": "변경사항을 미리보기하는 도중 오류가 발생했습니다.",
        "blockedtitle": "사용자가 차단됨",
        "blocked-email-user": "<strong>사용자 이름은 이메일 보내기에서 차단되었습니다. 그러나 이 위키에서 다른 문서를 편집할 수 있습니다.</strong> [[Special:MyContributions|계정 기여]]에서 자세한 전체 차단 정보를 볼 수 있습니다.\n\n차단은 $1님에 의해 이루어졌습니다.\n\n지정된 이유는 <em>$2</em>입니다.\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n* 차단 ID #$5",
+       "blockedtext-partial": "<strong>당신의 계정이나 IP 주소는 이 문서를 편집하지 못하도록 차단되었습니다. 이 위키의 다른 문서는 여전히 편집할 수 있습니다.</strong> 당신은 [[Special:MyContributions|계정 기여 목록]]에서 차단의 세부 사항을 확인할 수 있습니다.\n\n차단은 $1님에 의해 이루어졌습니다.\n\n지정된 이유는 <em>$2</em>입니다.\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n* 차단 ID #$5",
        "blockedtext": "'''사용자 계정 또는 IP 주소가 차단되었습니다.'''\n\n차단한 사람은 $1입니다.\n차단한 이유는 다음과 같습니다: <em>$2</em>.\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n[[Special:Preferences|계정 환경 설정]]에 올바른 이메일 주소가 있어야만 '이메일 보내기' 기능을 사용할 수 있습니다. 또 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n현재 당신의 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "autoblockedtext": "당신의 IP 주소는 $1님이 차단한 사용자가 사용했던 IP이기 때문에 자동으로 차단되었습니다.\n차단된 이유는 다음과 같습니다:\n\n:<em>$2</em>\n\n* 차단이 시작된 시간: $8\n* 차단이 끝나는 시간: $6\n* 차단된 사용자: $7\n\n$1 또는 [[{{MediaWiki:Grouppage-sysop}}|다른 관리자]]에게 차단에 대해 문의할 수 있습니다.\n\n[[Special:Preferences|사용자 환경 설정]]에 올바른 이메일 주소가 있어야만 \"이메일 보내기\" 기능을 사용할 수 있습니다. 또한 이메일 보내기 기능이 차단되어 있으면 이메일을 보낼 수 없습니다.\n\n현재 IP 주소는 $3이고, 차단 ID는 #$5입니다.\n문의할 때에 이 정보를 같이 알려주세요.",
        "systemblockedtext": "당신의 사용자 이름 또는 IP 주소가 자동으로 미디어위키에 의해 차단되었습니다.\n이유는 다음과 같습니다:\n\n:<em>$2</em>\n\n* 차단 시작: $8\n* 차단 만료: $6\n* 차단 대상: $7\n\n당신의 현재 IP 주소는 $3입니다.\n문의에 대해 상기의 상세 설명을 모두 포함해 주십시오.",
        "editpage-invalidcontentmodel-text": "\"$1\" 콘텐츠 모델은 지원되지 않습니다.",
        "editpage-notsupportedcontentformat-title": "지원하지 않는 내용 형식",
        "editpage-notsupportedcontentformat-text": "내용 형식 $1은(는) $2 내용 모델에서 지원하지 않습니다.",
+       "slot-name-main": "일반",
        "content-model-wikitext": "위키텍스트",
        "content-model-text": "일반 텍스트",
        "content-model-javascript": "자바스크립트",
        "move-watch": "원래 문서와 대상 문서를 주시하기",
        "movepagebtn": "문서 이동",
        "pagemovedsub": "이동 성공",
+       "cannotmove": "문서를 다음과 같은 {{PLURAL:$1|이유}}로 옮기지 못했습니다:",
        "movepage-moved": "'''\"$1\" 문서를 \"$2\" 문서로 이동했습니다.'''",
        "movepage-moved-redirect": "넘겨주기 문서를 만들었습니다.",
        "movepage-moved-noredirect": "넘겨주기 문서를 남기지 않았습니다.",
        "pageinfo-display-title": "표시 제목",
        "pageinfo-default-sort": "기본 정렬 키",
        "pageinfo-length": "문서 길이 (바이트)",
+       "pageinfo-namespace": "이름공간",
        "pageinfo-article-id": "문서 ID",
        "pageinfo-language": "문서 내용 언어",
        "pageinfo-language-change": "바꾸기",
        "logentry-block-block": "$1님이 {{GENDER:$4|$3}}님을 $5 {{GENDER:$2|차단했습니다}} $6",
        "logentry-block-unblock": "$1님이 {{GENDER:$4|$3}}님의 {{GENDER:$2|차단을 해제했습니다}}",
        "logentry-block-reblock": "$1 님이 {{GENDER:$4|$3}} 님의 차단 기간을 $5(으)로 {{GENDER:$2|바꾸었습니다}} $6",
+       "logentry-partialblock-block": "$1님이 {{GENDER:$4|$3}}님을 $7 {{PLURAL:$8|문서를|문서들을}} 편집하지 못하도록 $5 {{GENDER:$2|차단}}했습니다. $6",
        "logentry-suppress-block": "$1님이 {{GENDER:$4|$3}} 사용자를 $5 {{GENDER:$2|차단했습니다}} $6",
        "logentry-suppress-reblock": "$1 님이 {{GENDER:$4|$3}} 님의 차단 기간을 $5(으)로 {{GENDER:$2|바꾸었습니다}} $6",
        "logentry-import-upload": "$1님이 $3 문서를 파일 올리기로 {{GENDER:$2|가져왔습니다}}",
index c6390a6..df84bcc 100644 (file)
        "invalid-content-data": "अवैध डाटा सामग्री",
        "content-not-allowed-here": "[[:$2]] पृष्ठ पर \"$1\" सामग्री $3वर्जित अछि।",
        "editwarning-warning": "इ पृष्ठ के छोड़ए सँ अहाके द्वारा कएल गेल कोनो भी परिवर्तन गायब भऽ जाएत।\nयदि अहाँ सम्प्रवेश केनए छी तहन ई सूचना के देखावए लेल अपन वरीयता सभ के \"{{int:prefs-editing}}\" भाग में बन्द कऽ सकएत छी।",
+       "editpage-invalidcontentmodel-title": "सामग्री स्वरूप समर्थित नै अछि",
        "editpage-notsupportedcontentformat-title": "सामग्री स्वरूप समर्थित नै अछि",
        "editpage-notsupportedcontentformat-text": "$1 सामग्री स्वरूप $2 सामग्री मोडल द्वारा समर्थित नै अछि।",
+       "slot-name-main": "प्रमुख",
        "content-model-wikitext": "विकिटेक्स्ट",
        "content-model-text": "सामान्य पाठ",
        "content-model-javascript": "जावास्क्रिप्ट",
        "action-userrights-interwiki": "दोसर विकीपर प्रयोक्ताक प्रयोक्ता अधिकारक सम्पादन करू",
        "action-siteadmin": "दत्तनिधिकेँ प्रतिबन्धित करू आ फेर प्रतिबन्ध हटाउ",
        "action-sendemail": "ई-पत्र पठाबी",
+       "action-editmyoptions": "अपन वरीयतासभ सम्पादित करु",
        "action-editmywatchlist": "काँच साकांक्षसूची संपादित करू",
        "action-viewmywatchlist": "अपन काँच साकांक्षसूची देखु",
        "action-viewmyprivateinfo": "अपन व्यक्तिगत जानकारी देखु",
        "rcfilters-clear-all-filters": "फ़िल्टरसभ मिटाबु",
        "rcfilters-filterlist-title": "चलनीसभ",
        "rcfilters-highlightmenu-title": "रंग चुनु",
+       "rcfilters-filtergroup-authorship": "लेखक योगदान",
        "rcfilters-filter-editsbyself-label": "अहाक बदलावसभ",
        "rcfilters-filter-editsbyself-description": "अहाक अपन योगदान।",
+       "rcfilters-filter-editsbyother-label": "सदस्यद्वारा परिवर्तन",
        "rcfilters-filter-user-experience-level-registered-label": "पंजीकृत:",
        "rcfilters-filter-user-experience-level-registered-description": "लॉग-इन संपादकसभ।",
        "rcfilters-filter-user-experience-level-unregistered-label": "अपंजीकृत",
        "rcfilters-filtergroup-reviewstatus": "पुनरीक्षण स्थिति",
        "rcfilters-filter-reviewstatus-unpatrolled-label": "अपरीक्षित",
        "rcfilters-filter-reviewstatus-auto-label": "सवापरिक्षित",
+       "rcfilters-filtergroup-significance": "महत्व",
        "rcfilters-filter-minor-label": "छोट सम्पादन",
        "rcfilters-filter-watchlist-watched-label": "साकांक्षसूची",
+       "rcfilters-filter-watchlistactivity-unseen-label": "परिवर्तन सभ चुनु",
        "rcfilters-filter-watchlistactivity-seen-label": "परिवर्तन सभ चुनु",
        "rcfilters-filtergroup-changetype": "बदल क प्रकार:",
        "rcfilters-filter-pageedits-label": "पन्नाक संपादनसभ",
+       "rcfilters-filter-newpages-label": "प्रयोक्ता रचना लग",
        "rcfilters-liveupdates-button": "अखुनका अद्यतन",
        "rcfilters-target-page-placeholder": "पृष्ठ(अथवा श्रेणी) क नाम भरू",
        "rcnotefrom": "नीचाँमे '''$2''' सँ भेल परिवर्तन अछि ('''$1''' धरि देखाएल)।",
        "pageinfo-display-title": "प्रदर्शन शिर्षक",
        "pageinfo-default-sort": "डिफल्ट सर्ट कुंजी",
        "pageinfo-length": "पन्ना आकार (बाइट्स में)",
+       "pageinfo-namespace": "नामस्थान",
        "pageinfo-article-id": "पन्ना आई॰डी॰",
        "pageinfo-language": "पन्ना सामग्री भाषा",
        "pageinfo-language-change": "परिवर्तन",
index 9d22620..1b35077 100644 (file)
        "editpage-invalidcontentmodel-text": "Содржинскиот модел „$1“ не е поддржан.",
        "editpage-notsupportedcontentformat-title": "Форматот на содржината не е поддржан",
        "editpage-notsupportedcontentformat-text": "Форматот $1 is не е поддржан од содржинскиот модел $2.",
+       "slot-name-main": "Главна",
        "content-model-wikitext": "викитекст",
        "content-model-text": "прост текст",
        "content-model-javascript": "JavaScript",
        "action-reupload-shared": "заменување на оваа податотека на заедничко складиште",
        "action-upload_by_url": "подигни ја податотекава од URL-адреса",
        "action-writeapi": "употребете запишување во извршникот",
-       "action-delete": "избÑ\80иÑ\88и Ñ\98а Ñ\81Ñ\82Ñ\80аниÑ\86ава",
+       "action-delete": "бÑ\80иÑ\88еÑ\9aе Ð½Ð° Ð¾Ð²Ð°Ð° Ñ\81Ñ\82Ñ\80аниÑ\86а",
        "action-deleterevision": "бришење преработки",
        "action-deletelogentry": "бришење на дневнички записи",
        "action-deletedhistory": "преглед на историјата на бришења на оваа страница",
        "pageinfo-display-title": "Наслов за приказ",
        "pageinfo-default-sort": "Основен подредбен клуч",
        "pageinfo-length": "Големина на страницата (во бајти)",
+       "pageinfo-namespace": "Именски простор",
        "pageinfo-article-id": "Назнака на страницата",
        "pageinfo-language": "Јазик на содржината на страницата",
        "pageinfo-language-change": "смени",
index 45768f8..49e7daa 100644 (file)
        "returnto": "Torna a $1.",
        "tagline": "'A {{SITENAME}}.",
        "help": "Ajùto",
+       "help-mediawiki": "Ajuto ncopp' 'a MediaWiki",
        "search": "Truova",
        "search-ignored-headings": " #<!-- lassa sta linea comme sta --> <pre>\n# Testate ca se sarranno gnurate int' 'a ricerca.\n# Cagnamiente a chesto addeventarranno affettive quanno 'a paggena sarrà innecizzata.\n# Vuje putite forzà 'a reinnecezzazzione d' 'a paggena facenno nu cagnamiento abbacante.\n# 'A sintasse è 'a seguente:\n#   * Ogneccosa 'a 'o carattere \"#\" 'nzegna 'a fine d' 'a linea è 'nu cummanno\n#   * Ogne linea chiena è 'o titolo esatto 'a gnurà, case e tutteccose\nRiferimente\nJonte 'e fore\nVide pure\n #</pre> <!-- lassa sta linea comme sta  -->",
        "searchbutton": "Truova",
        "passwordtooshort": "'E password hann'avé minimo {{PLURAL:$1|nu carattere|$1 carattere}}.",
        "passwordtoolong": "'E password nun ponno essere cchiù luonghe 'e {{PLURAL:$1|nu carattere|$1 carattere}}.",
        "passwordtoopopular": "'E parole comune nun se ponno ausà comme password. Scigliteve na password cchiù tosta.",
+       "passwordinlargeblacklist": "'A password c'aie scritto sta int'a lista 'e password cchiù ausate. Pe piacere, piglia na password cchiù speciàle.",
        "password-name-match": "'A password adda essere diverza 'a 'o nomme utente.",
        "password-login-forbidden": "L'uso 'e stu nomme utente e password è stato proibito.",
        "mailmypassword": "Riabbìa 'a password",
        "editpage-invalidcontentmodel-text": "'O mudell' 'e cuntenute \"$1\" nun è suppurtato.",
        "editpage-notsupportedcontentformat-title": "Furmato d' 'o cuntenuto nun suppurtato",
        "editpage-notsupportedcontentformat-text": "'O furmato d' 'o cuntenuto $1 nun è suppurtato d' 'o mudello 'e cuntenuto $2.",
+       "slot-name-main": "Prencepale",
        "content-model-wikitext": "wikitesto",
        "content-model-text": "testo nurmale",
        "content-model-javascript": "JavaScript",
        "timezonelegend": "Fuso orario:",
        "localtime": "Ora lucale:",
        "timezoneuseserverdefault": "Aúsa ora predefinita d' 'o wiki ($1)",
-       "timezoneuseoffset": "Ato (specificà 'a differenza)",
+       "timezoneuseoffset": "Ato (hê specificà 'a differenza abbascio)",
        "servertime": "Ora d' 'o server:",
        "guesstimezone": "Aúsa l'ora d' 'o navigatóre",
        "timezoneregion-africa": "Afreca",
        "rcfilters-filter-watchlist-watchednew-label": "Càgni novi ncopp'ê ppaggene cuntrullate",
        "rcfilters-filter-watchlist-watchednew-description": "Càgni d'ê ppaggene cuntrullate ca n'hê visto 'a ll'urdimo cagnamiénto.",
        "rcfilters-filter-watchlist-notwatched-label": "Nun sta ncopp'ê ppaggene cuntrullate",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Càgni nun visti",
+       "rcfilters-filter-watchlistactivity-seen-label": "Càgni visti",
+       "rcfilters-filter-watchlistactivity-seen-description": "Càgni a paggene ch'hê visto 'a cuanno facettero ll'urdimo cagnamiénto.",
        "rcfilters-filtergroup-lastRevision": "Ùrdeme verziune",
        "rcfilters-filter-lastrevision-label": "Verzione 'e mmo",
        "rcfilters-watchlist-markseen-button": "Segna tutt'ê cagni comme visti",
index c673500..e75bfc1 100644 (file)
        "returnto": "Terug naar $1.",
        "tagline": "Uit {{SITENAME}}",
        "help": "Hulp",
+       "help-mediawiki": "Hulp met MediaWiki",
        "search": "Zoeken",
        "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Koppen die worden genegeerd tijdens het zoeken.\n# Wijzigingen worden van kracht als een kop wordt geïndexeerd.\n# U kunt opnieuw indexeren afdwingen door het uitvoeren van een nullbewerking.\n# De syntaxis is als volgt:\n#   * Alle tekst vanaf het teken \"#\" tot het einde van de regel wordt gezien als een opmerking;\n#   * Iedere niet-lege regel is de precieze te negeren kop, inclusief hoofdlettergebruik en degelijke.\nReferenties\nExterne koppelingen\nZie ook\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "Zoeken",
        "pageinfo-display-title": "Weergegeven paginanaam",
        "pageinfo-default-sort": "Standaard sorteerwijze",
        "pageinfo-length": "Paginalengte (in bytes)",
+       "pageinfo-namespace": "Naamruimte",
        "pageinfo-article-id": "Paginanummer",
        "pageinfo-language": "Taal voor de pagina",
        "pageinfo-language-change": "wijzigen",
index 1ac9dcb..eb8cdfa 100644 (file)
        "passwordtooshort": "Passord må innehalda minst {{PLURAL:$1|eitt teikn|$1 teikn}}.",
        "passwordtoolong": "Passord kan ikkje vera lengre enn {{PLURAL:$1|eitt|$1}} teikn.",
        "passwordtoopopular": "Alminneleg valde passord kan ikkje nyttast. Ver god å velja eit passord som er vanskelegare å gissa.",
+       "passwordinlargeblacklist": "Passordet du skreiv inn er på ei liste over særs vanlege passord. Du må velja eit meir særeige passord.",
        "password-name-match": "Passordet ditt lyt vera noko anna enn brukarnamnet ditt.",
        "password-login-forbidden": "Bruk av dette brukarnamnet og passordet er vorte forbode.",
        "mailmypassword": "Attendestill passord",
        "passwordreset-emaildisabled": "E-postfunksjonen er slegen av på wikien.",
        "passwordreset-username": "Brukarnamn:",
        "passwordreset-domain": "Domene:",
-       "passwordreset-email": "E-postadresse:",
+       "passwordreset-email": "E-postadresse:",
        "passwordreset-emailtitle": "↓Kontodetaljar på {{SITENAME}}",
        "passwordreset-emailtext-ip": "Nokon (sannsynlegvis deg, frå IP-adressa $1) bad om ei nullstilling av passordet ditt for {{SITENAME}} ($4). {{PLURAL:$3|Denne brukarkontoen|Desse brukarkontoane}} er knytte til denne e-postadressa:\n\n$2\n\n{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} går ut om {{PLURAL:$5|éin dag|$5 dagar}}.\nDu bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne nullstillinga eller du no hugsar det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.",
        "passwordreset-emailtext-user": "Brukaren $1 på {{SITENAME}} bad om ei påminning for kontodetaljane dine for {{SITENAME}} ($4). {{PLURAL:$3|Den fylgjande brukarkontoen|Dei fylgjande brukarkontoane}} er assosierte med denne e-postadressa:\n\n$2\n\n{{PLURAL:$3|Dette mellombels passordet|Desse mellombels passorda}} vil verta ugilde om {{PLURAL:$5|éin dag|$5 dagar}}.\nDu bør logga inn og velja eit nytt passord no. Om nokon andre enn deg bad om denne påminninga, eller du har kome i hug det opphavlege passordet og ikkje lenger ynskjer å endra det, kan du sjå bort frå denne meldinga og halda fram med å nytta det gamle passordet ditt.",
        "userjsispublic": "Merk: JavaScript-undersider bør ikkje innehalda konfidensielle data sidan dei er synlege for andre brukarar.",
        "usercssispublic": "Merk: CSS-undersider bør ikkje innehalda konfidensielle data sidan dei er synlege for andre brukarar.",
        "revid": "versjon $1",
-       "interfaceadmin-info": "$1\n\nLøyva for endring av CSS/JS/JSON-filer som gjeld heile nettstaden vart nyleg skilde ut frå <code>editinterface</code>-retten. Om du ikkje skjøner kvifor du får denne feilmeldinga, sjå [[mw:MediaWiki_1.32/interface-admin]]."
+       "interfaceadmin-info": "$1\n\nLøyva for endring av CSS/JS/JSON-filer som gjeld heile nettstaden vart nyleg skilde ut frå <code>editinterface</code>-retten. Om du ikkje skjøner kvifor du får denne feilmeldinga, sjå [[mw:MediaWiki_1.32/interface-admin]].",
+       "passwordpolicies-policy-passwordcannotmatchusername": "Passordet kan ikkje vera det same som brukarnamnet",
+       "passwordpolicies-policy-passwordcannotmatchblacklist": "Passordet kan ikkje passa med svartelista passord"
 }
index 5810067..3fdf133 100644 (file)
        "returnto": "Wróć do $1.",
        "tagline": "Z {{GRAMMAR:D.lp|{{SITENAME}}}}",
        "help": "Pomoc",
+       "help-mediawiki": "Pomoc z MediaWiki",
        "search": "Szukaj",
        "search-ignored-headings": " #<!-- ten wiersz zostaw bez zmian --> <pre>\n# Umieszczone tutaj nagłówki będą ignorowane podczas wyszukiwania.\n# Zmiany wprowadzone tutaj zostaną zastosowane, gdy strona wykorzystująca odpowiedni nagłówek zostanie zindeksowana.\n# Można wymusić ponowne zindeksowanie strony wykonując na niej null edit.\n# Składnia jest następująca:\n#   * Wszystko począwszy od znaku „#” aż do końca wiersza jest komentarzem.\n#   * Każdy niepusty wiersz wprowadza dokładną treść nagłówka, który należy zignorować, wielkość liter ma znaczenie.\nLinki zewnętrzne\nZobacz też\n #</pre> <!-- ten wiersz zostaw bez zmian -->",
        "searchbutton": "Szukaj",
        "editpage-invalidcontentmodel-text": "Model zawartości „$1” nie jest obsługiwany.",
        "editpage-notsupportedcontentformat-title": "Nieobsługiwany format zawartości",
        "editpage-notsupportedcontentformat-text": "Format zawartości $1 nie jest obsługiwany modelem treści $2.",
+       "slot-name-main": "Główna",
        "content-model-wikitext": "wikitekst",
        "content-model-text": "zwykły tekst",
        "content-model-javascript": "JavaScript",
        "move": "Przenieś",
        "movethispage": "Przenieś tę stronę",
        "unusedimagestext": "W serwisie istnieją następujące pliki, lecz nie są wykorzystane na żadnej ze stron.\nInne witryny mogą odwoływać się do tych plików, używając bezpośrednich adresów URL. Oznacza to, że niektóre z plików mogą się znajdować na tej liście pomimo tego, że są wykorzystywane.",
+       "unusedimagestext-categorizedimgisused": "Pliki przedstawione poniżej istnieją, jednak nie są umieszczone na żadnej stronie. Skategoryzowane obrazy są oznaczone jako używane, mimo że nie umieszczono ich na żadnej stronie.\nZwróć uwagę że inne strony internetowe mogą linkować do plików przy użyciu bezpośrednich adresów URL, więc te mogą być tu wymienione, chociaż faktycznie znajdują się w użyciu.",
        "unusedcategoriestext": "Poniższe kategorie istnieją, choć nie korzysta z nich żadna strona ani kategoria.",
        "notargettitle": "Wskazywana strona nie istnieje",
        "notargettext": "Nie podano strony albo użytkownika, dla których ta operacja ma być wykonana.",
        "pageinfo-display-title": "Wyświetlany tytuł",
        "pageinfo-default-sort": "Domyślny klucz sortowania",
        "pageinfo-length": "Długość strony (w bajtach)",
+       "pageinfo-namespace": "Przestrzeń nazw",
        "pageinfo-article-id": "Identyfikator strony",
        "pageinfo-language": "Język zawartości strony",
        "pageinfo-language-change": "zmień",
index 1aa7dd0..39a61e0 100644 (file)
        "returnto": "Retornar para $1.",
        "tagline": "De {{SITENAME}}",
        "help": "Ajuda",
+       "help-mediawiki": "Ajuda do MediaWiki",
        "search": "Pesquisa",
        "search-ignored-headings": " #<!-- deixe esta linha exatamente como está --> <pre>\n# Cabeçalhos que serão ignorados pela busca.\n# Mudanças feitas aqui têm efeito quando a página com o cabeçalho é indexada.\n# Você pode forçar a reindexação realizando uma edição nula.\n# A sintaxe é a seguinte:\n#   * Tudo a partir do caractere \"#\" até o final da linha é um comentário.\n#   * Cada linha não vazia é o título exato a ser ignorado, inclusive no uso de maiúsculas.\nReferências\nLigações externas\nVer também\n #</pre> <!-- deixe esta linha exatamente como está -->",
        "searchbutton": "Pesquisar",
        "editpage-invalidcontentmodel-text": "O modelo do conteúdo \"$1\" não é suportado.",
        "editpage-notsupportedcontentformat-title": "Formato do conteúdo não suportado",
        "editpage-notsupportedcontentformat-text": "O formato de conteúdo $1 não é suportando pelo modelo de conteúdo $2.",
+       "slot-name-main": "Principal",
        "content-model-wikitext": "wikitexto",
        "content-model-text": "texto simples",
        "content-model-javascript": "Javascript",
        "pageinfo-display-title": "Título exibido",
        "pageinfo-default-sort": "Chave de ordenação padrão",
        "pageinfo-length": "Tamanho da página (em bytes)",
+       "pageinfo-namespace": "Espaço nominal",
        "pageinfo-article-id": "ID da página",
        "pageinfo-language": "Idioma do conteúdo da página",
        "pageinfo-language-change": "alterar",
index fde9b4e..afc4d65 100644 (file)
        "returnto": "Voltar para $1.",
        "tagline": "Fonte: {{SITENAME}}",
        "help": "Ajuda",
+       "help-mediawiki": "Ajuda do MediaWiki",
        "search": "Pesquisa",
        "search-ignored-headings": " #<!-- deixe esta linha exatamente como ela está --> <pre>\n# Títulos de página que serão ignorados pela pesquisa.\n# Mudanças a esta lista terão efeito quando a página com o título referido for indexada.\n# Pode forçar a indexação de uma página realizando uma edição nula nessa página.\n# A sintaxe é a seguinte:\n#  * Tudo desde um símbolo de cardinal (#) até ao fim da linha é um comentário\n#  * Cada linha não vazia é o título exato a ignorar, respeitando o uso de maiúsculas\nReferências\nHiperligações externas\nVer também\n #</pre> <!-- deixe esta linha exatamente como ela está -->",
        "searchbutton": "Pesquisar",
        "editpage-invalidcontentmodel-text": "O modelo de conteúdo \"$1\" não é suportado.",
        "editpage-notsupportedcontentformat-title": "Formato de conteúdo não suportado",
        "editpage-notsupportedcontentformat-text": "O formato de conteúdo $1 não é suportado pelo modelo de conteúdo $2.",
+       "slot-name-main": "Principal",
        "content-model-wikitext": "texto wiki",
        "content-model-text": "texto simples",
        "content-model-javascript": "JavaScript",
        "pageinfo-display-title": "Título apresentado",
        "pageinfo-default-sort": "Chave de classificação padrão",
        "pageinfo-length": "Tamanho da página (em bytes)",
+       "pageinfo-namespace": "Espaço nominal",
        "pageinfo-article-id": "ID da página",
        "pageinfo-language": "Língua do conteúdo da página",
        "pageinfo-language-change": "alterar",
index ab58894..6b9fa15 100644 (file)
        "autoblockedtext": "Text displayed to automatically blocked users.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - the blocking sysop (with a link to his/her userpage)\n* $2 - the reason for the block (in case of autoblocks: {{msg-mw|autoblocker}})\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the blocking sysop's username (plain text, without the link). Use it for GENDER.\n* $5 - the unique numeric identifier of the applied autoblock\n* $6 - the expiry of the block\n* $7 - the intended target of the block (what the blocking user specified in the blocking form)\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Blockedtext|notext=1}}\n* {{msg-mw|Systemblockedtext|notext=1}}",
        "systemblockedtext": "Text displayed to requests blocked by MediaWiki configuration.\n\n\"email this user\" should be consistent with {{msg-mw|Emailuser}}.\n\nParameters:\n* $1 - (Unused) A dummy user attributed as the blocker, possibly as a link to a user page.\n* $2 - the reason for the block\n* $3 - the current IP address of the blocked user\n* $4 - (Unused) the dummy blocking user's username (plain text, without the link).\n* $5 - A short string indicating the type of system block.\n* $6 - the expiry of the block\n* $7 - the intended target of the block\n* $8 - the timestamp when the block started\nSee also:\n* {{msg-mw|Grouppage-sysop}}\n* {{msg-mw|Blockedtext|notext=1}}\n* {{msg-mw|Autoblockedtext|notext=1}}",
        "blockednoreason": "Substituted with <code>$2</code> in the following message if the reason is not given:\n* {{msg-mw|cantcreateaccount-text}}.\n{{Identical|No reason given}}",
-       "whitelistedittext": "Used as error message. Parameters:\n* $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description\nSee also:\n* {{msg-mw|Nocreatetext}}\n* {{msg-mw|Uploadnologintext}}\n* {{msg-mw|Loginreqpagetext}}",
+       "whitelistedittext": "Used as error message. Parameters:\n* $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description\n* $2 - an URL to the same\n\nSee also:\n* {{msg-mw|Nocreatetext}}\n* {{msg-mw|Uploadnologintext}}\n* {{msg-mw|Loginreqpagetext}}",
        "confirmedittext": "Used as error message.",
        "nosuchsectiontitle": "Used as error message when the user has attempted to edit a nonexistent section.",
        "nosuchsectiontext": "This message is displayed when a user tries to edit a section that does not exist.",
        "loginreqtitle": "Used as title of error message.\n\nSee also:\n* {{msg-mw|permissionserrors}}\n{{Identical|Login required}}",
        "loginreqlink": "Take a look on inflection. Used as <code>$1</code> in the following messages:\n* {{msg-mw|loginreqpagetext}}\n* {{msg-mw|exception-nologin-text-manual}}\n* {{msg-mw|whitelistedittext}}\n* {{msg-mw|Uploadnologintext}}\n* {{msg-mw|watchlistanontext}}\n* {{msg-mw|confirmemail_needlogin}}\n* {{msg-mw|changeemail-no-info}}\n* {{msg-mw|resetpass-no-info}}\n* {{msg-mw|prefsnologintext2}}\n{{Identical|Log in}}",
-       "loginreqpagetext": "This message is displayed if an anonymous reader attempts to access a page which is only available to logged-in users.\n\nParameters:\n* $1 - a link to [[Special:UserLogin]] with {{msg-mw|Loginreqlink}} as link description\nSee also:\n* {{msg-mw|Whitelistedittext}}\n* {{msg-mw|Nocreatetext}}\n* {{msg-mw|Uploadnologintext}}",
+       "loginreqpagetext": "This message is displayed if an anonymous reader attempts to access a page which is only available to logged-in users.\n\nParameters:\n* $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description\n* $2 - an URL to the same\n\nSee also:\n* {{msg-mw|Whitelistedittext}}\n* {{msg-mw|Nocreatetext}}\n* {{msg-mw|Uploadnologintext}}",
        "accmailtitle": "Page title when temporary password was sent to a user via email.",
        "accmailtext": "{{doc-important|Do not translate <code><nowiki>[[User talk:$1|$1]]</nowiki></code> and <code>Special:ChangePassword</code>.}}\nThe message shown when a temporary password has been sent to the user's email address.\n\nParameters:\n* $1 - username\n* $2 - email address",
        "newarticle": "{{Identical|New}}",
        "hiddencategories": "This message is shown below the edit form, like you have a section ''\"Templates used on this page\"''.\n\nParameters:\n* $1 - number of categories",
        "edittools": "{{optional}}\nThis text will be shown below edit and upload forms. It can be used to offer special characters not present on most keyboards for copying/pasting, and also often makes them clickable for insertion via a JavaScript. Since these are seen as specific to a wiki, however, this message should not contain anything but an html comment explaining how it should be used once the wiki has been installed.",
        "edittools-upload": "{{optional}}\nThis text will be shown below upload forms. It will default to the contents of edittools.",
-       "nocreatetext": "Used as error message.\n\nSee also:\n* {{msg-mw|Nocreate-loggedin}}\n* {{msg-mw|Whitelistedittext}}\n* {{msg-mw|Uploadnologintext}}\n* {{msg-mw|Loginreqpagetext}}",
+       "nocreatetext": "Used as error message.\n\nParameters:\n* $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description\n* $2 - an URL to the same\n\nSee also:\n* {{msg-mw|Nocreate-loggedin}}\n* {{msg-mw|Whitelistedittext}}\n* {{msg-mw|Uploadnologintext}}\n* {{msg-mw|Loginreqpagetext}}",
        "nocreate-loggedin": "Used as error message.\n\nSee also:\n* {{msg-mw|Nocreatetext}}",
        "sectioneditnotsupported-title": "Page title of special page, which presumably appears when someone tries to edit a section, and section editing is disabled. Explanation of section editing on [[meta:Help:Section_editing#Section_editing|meta]].",
        "sectioneditnotsupported-text": "I think this is the text of an error message, which presumably appears when someone tries to edit a section, and section editing is disabled. Explanation of section editing on [[meta:Help:Section_editing#Section_editing|meta]].",
        "defaultmessagetext": "Caption above the default message text shown on the left-hand side of a diff displayed after clicking \"Show changes\" when creating a new page in the MediaWiki: namespace",
        "content-failed-to-parse": "Error message indicating that the page's content can not be saved because it is syntactically invalid. This may occurr for content types using serialization or a strict markup syntax.\n\nParameters:\n* $1 – content model, any one of the following messages:\n** {{msg-mw|Content-model-wikitext}}\n** {{msg-mw|Content-model-javascript}}\n** {{msg-mw|Content-model-css}}\n** {{msg-mw|Content-model-json}}\n** {{msg-mw|Content-model-text}}\n* $2 – content format as MIME type (e.g. <code>text/css</code>)\n* $3 – specific error message",
        "invalid-content-data": "Error message indicating that the page's content can not be saved because it is invalid. This may occurr for content types with internal consistency constraints.",
-       "content-not-allowed-here": "Error message indicating that the desired content model is not supported in given localtion.\n* $1 - the human readable name of the content model: {{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-json}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}\n* $2 - the title of the page in question\n* $3 - the role name of the slot the content is not allowed in",
+       "content-not-allowed-here": "Error message indicating that the desired content model is not supported in given location.\n* $1 - the human readable name of the content model: {{msg-mw|Content-model-wikitext}}, {{msg-mw|Content-model-javascript}}, {{msg-mw|Content-model-json}}, {{msg-mw|Content-model-css}} or {{msg-mw|Content-model-text}}\n* $2 - the title of the page in question\n* $3 - the role name of the slot the content is not allowed in",
        "editwarning-warning": "Uses {{msg-mw|Prefs-editing}}",
        "editpage-invalidcontentmodel-title": "Title of error page shown when using an unrecognized content model on EditPage",
        "editpage-invalidcontentmodel-text": "Error message shown when using an unrecognized content model on EditPage. $1 is the user's invalid input",
        "upload-tryagain": "Used as Submit button text in [[Special:Upload]].\n\nSee also:\n* {{msg-mw|Uploaderror|section header}}\n* {{msg-mw|ignorewarning|button text}}\n* {{msg-mw|reuploaddesc|button text}}",
        "upload-tryagain-nostash": "Used as Submit button text in [[Special:Upload]] when the upload could not be stashed & the file needs to be reuploaded.\n\nSee also:\n* {{msg-mw|Uploaderror|section header}}\n* {{msg-mw|ignorewarning|button text}}\n* {{msg-mw|reuploaddesc|button text}}",
        "uploadnologin": "Used as title of the error message {{msg-mw|Uploadnologintext}}.\n{{Identical|Not logged in}}",
-       "uploadnologintext": "Used as error message.\n\nThe title for this message is {{msg-mw|Uploadnologin}}.\n\nParameters:\n* $1 - link text {{msg-mw|Loginreqlink}}. The link points to [[Special:UserLogin]].\nSee also:\n* {{msg-mw|Whitelistedittext}}\n* {{msg-mw|Nocreatetext}}\n* {{msg-mw|Loginreqpagetext}}",
+       "uploadnologintext": "Used as error message.\n\nThe title for this message is {{msg-mw|Uploadnologin}}.\n\nParameters:\n* $1 - a link to [[Special:UserLogin]] with {{msg-mw|loginreqlink}} as link description\n* $2 - an URL to the same\n\nSee also:\n* {{msg-mw|Whitelistedittext}}\n* {{msg-mw|Nocreatetext}}\n* {{msg-mw|Loginreqpagetext}}",
        "upload_directory_missing": "Parameters:\n* $1 - directory name",
        "upload_directory_read_only": "Parameters:\n* $1 - directory name",
        "uploaderror": "Used as section header in [[Special:Upload]].\n\nSee also:\n* {{msg-mw|upload-tryagain|Submit text}}",
        "move": "Name of Move tab. Should be in the imperative mood.\n\nSee also:\n* {{msg-mw|Move}}\n* {{msg-mw|Accesskey-ca-move}}\n* {{msg-mw|Tooltip-ca-move}}\n{{Identical|Move}}",
        "movethispage": "{{Identical|Move this page}}",
        "unusedimagestext": "Header message of [[Special:UnusedFiles]]",
+       "unusedimagestext-categorizedimgisused": "Header message of [[Special:UnusedFiles]] with <code>$wgCountCategorizedImagesAsUsed</code> activated (categorized images are considered as used). This message is sometimes used in place of {{msg-mw|unusedimagestext}}",
        "unusedcategoriestext": "Used as page header in [[Special:UnusedCategories]].",
        "notargettitle": "Used as title of error message.\n\nSee also:\n* {{msg-mw|Notargettitle|title}}\n* {{msg-mw|Notargettext|text}}",
        "notargettext": "Used as error message in [[Special:MovePage]].\n\nSee also:\n* {{msg-mw|Notargettitle|title}}\n* {{msg-mw|Notargettext|text}}",
index 2d22baa..369cc3b 100644 (file)
        "returnto": "Tuerne a $1.",
        "tagline": "Da {{SITENAME}}",
        "help": "Ajute",
+       "help-mediawiki": "Aijute sus a MediaUicchi",
        "search": "Cirche",
        "search-ignored-headings": " #<!-- lasse sta linèe accume ste --> <pre>\n# Testate ca avène scettate jndr'à le ricerche.\n# Le cangiaminde devendane effettive quanne 'a pàgene avène indicizzate.\n# Tu puè forzà 'a reindicizzazzione d'a pàgene facenne 'nu cangiamende vecande.\n# 'A sindasse jè 'a seguende:\n#   * Ogneccose da 'u carattere \"#\" 'nzigne a fine d'a linèe jè 'nu commende\n#   * Ogne linèa chiene jè 'u titole esatte da ignorà, case e ogneccose\nRefereminde\nCollegaminde de fore\n'Ndruche pure\n #</pre> <!-- lasse sta linèe accume ste -->",
        "searchbutton": "Cirche",
        "editpage-invalidcontentmodel-text": "'U modelle d'u condenute \"$1\" non g'è supportate.",
        "editpage-notsupportedcontentformat-title": "'U formate d'u condenute non gè supportate",
        "editpage-notsupportedcontentformat-text": "'U formate d'u condenute $1 non g'è supportate da 'u modelle de condenute $2.",
+       "slot-name-main": "Prengepàle",
        "content-model-wikitext": "Uicchiteste",
        "content-model-text": "teste semblice",
        "content-model-javascript": "JavaScript",
        "pageinfo-display-title": "Fà vedè 'u titole",
        "pageinfo-default-sort": "Chiave de ordenamende de base",
        "pageinfo-length": "Lunghezze d'a pàgene (in byte)",
+       "pageinfo-namespace": "Namespace",
        "pageinfo-article-id": "ID d'a pàgene",
        "pageinfo-language": "Lènga d'a pàgene de condenute",
        "pageinfo-language-change": "cange",
index 29201f0..9299667 100644 (file)
        "returnto": "Возврат к странице $1.",
        "tagline": "Материал из {{grammar:genitive|{{SITENAME}}}}",
        "help": "Справка",
+       "help-mediawiki": "Справка по MediaWiki",
        "search": "Поиск",
        "search-ignored-headings": " #<!-- оставьте эту строку как есть --> <pre>\n# Заголовки, которые будут игнорироваться поиском.\n# Изменения вступают в силу после того, как страница с заголовком индексируется.\n# Вы можете принудительно переиндексировать страницу, сделав нулевую правку.\n# Синтаксис выглядит следующим образом:\n#   * Всё, начинающееся на символ «#» и до конца строки представляет собой комментарий.\n#   * Каждая непустая строка — точное название того, что будет игнорироваться, включая регистр и пр.\nПримечания\nСсылки\nСм. также\n #</pre> <!-- оставьте эту строку как есть -->",
        "searchbutton": "Найти",
        "editpage-invalidcontentmodel-text": "Модель содержимого «$1» не поддерживается.",
        "editpage-notsupportedcontentformat-title": "Формат содержимого не поддерживается",
        "editpage-notsupportedcontentformat-text": "Формат содержимого $1 не поддерживается моделью содержимого $2.",
+       "slot-name-main": "Основное",
        "content-model-wikitext": "вики-текст",
        "content-model-text": "обычный текст",
        "content-model-javascript": "JavaScript",
        "listgrants-summary": "Ниже приведён список разрешений с указанием на то, к каким связанным пользовательским правам они дают доступ. Участники могут разрешить приложениям использовать свою учётную запись, но с ограниченными правами на основе разрешений, которые участник предоставляет приложению. Однако, приложение, действующее  от имени участника, на самом деле не сможет воспользоваться правами, отсутствующими у учётной записи.\nОб отдельных правах можно получить [[{{MediaWiki:Listgrouprights-helppage}}|дополнительную  информацию]].",
        "listgrants-grant": "Разрешение",
        "listgrants-rights": "Права",
-       "listgrants-grant-display": "$1 <code>($2)</code>",
        "trackingcategories": "Отслеживающие категории",
        "trackingcategories-summary": "На этой странице перечислены категории, заполняемые автоматически. Их можно переименовать, изменив соответствующие системные сообщения в пространстве имён {{ns:8}}.",
        "trackingcategories-msg": "Отслеживаемая категория",
        "emailuserfooter": "Это письмо было отправлено {{GENDER:$2|участнику|участнице}} $2 от {{GENDER:$1|участника|участницы}} $1 с помощью функции «{{int:emailuser}}» проекта {{SITENAME}}. Если {{GENDER:$2|вы}} ответите на это письмо, оно будет отослано напрямую {{GENDER:$1|отправителю}}, так что {{GENDER:$2|ваш}} адрес электронной почты станет известен {{GENDER:$1|ему|ей}}.",
        "usermessage-summary": "Оставить системное сообщение.",
        "usermessage-editor": "Системная доставка",
-       "usermessage-template": "MediaWiki:UserMessage",
        "watchlist": "Список наблюдения",
        "mywatchlist": "Список наблюдения",
        "watchlistfor2": "Для $1 $2",
        "protect-fallback": "Разрешено только участникам с правами «$1»",
        "protect-level-autoconfirmed": "Разрешено только автоподтверждённым участникам",
        "protect-level-sysop": "Разрешено только администраторам",
-       "protect-summary-desc": "[$1=$2] ($3)",
        "protect-summary-cascade": "каскадная",
        "protect-expiring": "истекает $1 (UTC)",
        "protect-expiring-local": "истекает $1",
        "undelete-error-long": "Во время восстановления файла возникли ошибки:\n\n$1",
        "undelete-show-file-confirm": "Вы уверены, что желаете просмотреть удалённую версию файла <nowiki>$1</nowiki> от $2 $3?",
        "undelete-show-file-submit": "Да",
-       "undelete-revision-row2": "$1 ($2) $3 . . $4 $5 $6 $7 $8",
        "namespace": "Пространство имён:",
        "invert": "Обратить выбранное",
        "tooltip-invert": "Установите эту отметку, чтобы скрыть изменения на страницах, в пределах выбранного пространства имён (и связанных пространств имён, если указано)",
        "ip_range_toolow": "Диапазоны IP по сути запрещены.",
        "proxyblocker": "Блокировка прокси",
        "proxyblockreason": "Ваш IP-адрес заблокирован потому, что это открытый прокси-сервер. Пожалуйста, свяжитесь со своиим интернет-провайдером или службой поддержки, и сообщите им об этой серьёзной проблеме безопасности.",
-       "sorbs": "DNSBL",
        "sorbsreason": "Ваш IP-адрес числится как открытый прокси в DNSBL.",
        "sorbs_create_account_reason": "Ваш IP-адрес числится как открытый прокси в DNSBL. Вы не можете создать учётную запись.",
        "softblockrangesreason": "Анонимные правки не разрешены с вашего IP-адреса ($1). Пожалуйста, войдите в систему.",
        "tooltip-preferences-save": "Сохранить настройки",
        "tooltip-summary": "Введите краткое описание",
        "interlanguage-link-title": "$1 — $2",
-       "interlanguage-link-title-nonlang": "$1 – $2",
        "common.css": "/* Размещённый здесь CSS будет применяться ко всем темам оформления */",
        "print.css": "/* Размещённый здесь CSS будет применяться к версии для печати */",
        "noscript.css": "/* Размещённый здесь CSS будет применяться для участников с отключенным JavaScript  */",
        "pageinfo-display-title": "Отображаемый заголовок",
        "pageinfo-default-sort": "Ключ сортировки по умолчанию",
        "pageinfo-length": "Длина страницы (в байтах)",
+       "pageinfo-namespace": "Пространство имён",
        "pageinfo-article-id": "Идентификатор страницы",
        "pageinfo-language": "Язык страницы",
        "pageinfo-language-change": "изменить",
        "yesterday-at": "Вчера в $1",
        "bad_image_list": "Формат должен быть следующим:\n\nБудут учитываться только элементы списка (строки, начинающиеся на символ *).\nПервая ссылка строки должна быть ссылкой на запрещённое для вставки изображение.\nПоследующие ссылки в той же строке будут рассматриваться как исключения, то есть статьи, куда изображение может быть включено.",
        "variantname-zh-hans": "hans",
-       "variantname-zh-hant": "hant",
-       "variantname-zh-cn": "cn",
-       "variantname-zh-tw": "tw",
-       "variantname-zh-hk": "hk",
-       "variantname-zh-mo": "mo",
-       "variantname-zh-sg": "sg",
-       "variantname-zh-my": "my",
-       "variantname-zh": "zh",
-       "variantname-gan-hans": "hans",
-       "variantname-gan-hant": "hant",
-       "variantname-gan": "gan",
-       "variantname-sr-ec": "sr-ec",
-       "variantname-sr-el": "sr-el",
-       "variantname-sr": "sr",
-       "variantname-kk-kz": "kk-kz",
-       "variantname-kk-tr": "kk-tr",
-       "variantname-kk-cn": "kk-cn",
-       "variantname-kk-cyrl": "kk-cyrl",
-       "variantname-kk-latn": "kk-latn",
-       "variantname-kk-arab": "kk-arab",
-       "variantname-kk": "kk",
-       "variantname-ku-arab": "ku-Arab",
-       "variantname-ku-latn": "ku-Latn",
-       "variantname-ku": "ku",
-       "variantname-tg-cyrl": "tg-Cyrl",
-       "variantname-tg-latn": "tg-Latn",
-       "variantname-tg": "tg",
-       "variantname-ike-cans": "ike-Cans",
-       "variantname-ike-latn": "ike-Latn",
-       "variantname-iu": "iu",
-       "variantname-shi-tfng": "shi-Tfng",
-       "variantname-shi-latn": "shi-Latn",
-       "variantname-shi": "shi",
-       "variantname-uz": "uz",
-       "variantname-uz-latn": "uz-Latn",
-       "variantname-uz-cyrl": "uz-Cyrl",
-       "variantname-crh": "crh",
-       "variantname-crh-latn": "crh-Latn",
-       "variantname-crh-cyrl": "crh-Cyrl",
        "metadata": "Метаданные",
        "metadata-help": "Файл содержит дополнительные данные, обычно добавляемые цифровыми камерами или сканерами. Если файл после создания редактировался, то некоторые параметры могут не соответствовать текущему изображению.",
        "metadata-expand": "Показать дополнительные данные",
        "metadata-collapse": "Скрыть дополнительные данные",
        "metadata-fields": "Поля метаданных изображения, перечисленные в этом списке, будут показаны на странице изображения при свёрнутой таблице метаданных. Остальные поля будут по умолчанию скрыты.\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",
-       "metadata-langitem": "<strong>$2:</strong> $1",
-       "metadata-langitem-default": "$1",
        "exif-imagewidth": "Ширина",
        "exif-imagelength": "Высота",
        "exif-bitspersample": "Глубина цвета",
        "exif-exposuretime": "Время экспозиции",
        "exif-exposuretime-format": "$1 с ($2)",
        "exif-fnumber": "Число диафрагмы",
-       "exif-fnumber-format": "f/$1",
        "exif-exposureprogram": "Программа экспозиции",
        "exif-spectralsensitivity": "Спектральная чувствительность",
        "exif-isospeedratings": "Светочувствительность ISO",
        "exif-gpsareainformation": "Название области GPS",
        "exif-gpsdatestamp": "Дата",
        "exif-gpsdifferential": "Дифференциальная поправка",
-       "exif-coordinate-format": "$1° $2′ $3″ $4",
        "exif-jpegfilecomment": "Примечание JPEG-файла",
        "exif-keywords": "Ключевые слова",
        "exif-worldregioncreated": "Регион мира, где была сделана фотография",
        "exif-personinimage": "Изображённый человек",
        "exif-originalimageheight": "Высота изображения до кадрирования",
        "exif-originalimagewidth": "Ширина изображения до кадрирования",
-       "exif-contact-value": "$1\n\n$2\n<div class=\"adr\">\n$3\n\n$4, $5, $6 $7\n</div>\n$8",
-       "exif-subjectnewscode-value": "$2 ($1)",
        "exif-compression-1": "Несжатый",
        "exif-compression-2": "CCITT Group 3, 1-мерная модификация кодирования длин серий Хаффмана",
        "exif-compression-3": "CCITT Group 3, факсовое кодирование",
        "exif-compression-5": "LZW",
        "exif-compression-6": "JPEG (старый)",
        "exif-compression-7": "JPEG",
-       "exif-compression-8": "Deflate (Adobe)",
-       "exif-compression-32773": "PackBits (Macintosh RLE)",
-       "exif-compression-32946": "Deflate (PKZIP)",
-       "exif-compression-34712": "JPEG2000",
        "exif-copyrighted-true": "Охраняется авторским правом",
        "exif-copyrighted-false": "Авторско-правовой статус не задан",
        "exif-photometricinterpretation-0": "Чёрный и белый (белый — 0)",
        "exif-photometricinterpretation-1": "Чёрный и белый (чёрный — 0)",
-       "exif-photometricinterpretation-2": "RGB",
-       "exif-photometricinterpretation-3": "Palette",
        "exif-photometricinterpretation-4": "Маска прозрачности",
        "exif-photometricinterpretation-5": "Разделены (вероятно CMYK)",
-       "exif-photometricinterpretation-6": "YCbCr",
-       "exif-photometricinterpretation-8": "CIE L*a*b*",
-       "exif-photometricinterpretation-9": "CIE L*a*b* (ICC encoding)",
-       "exif-photometricinterpretation-10": "CIE L*a*b* (ITU encoding)",
-       "exif-photometricinterpretation-32803": "Color Filter Array",
-       "exif-photometricinterpretation-34892": "Linear raw",
        "exif-unknowndate": "Неизвестная дата",
        "exif-orientation-1": "Нормальная",
        "exif-orientation-2": "Отражено по горизонтали",
        "exif-planarconfiguration-2": "формат «planar»",
        "exif-xyresolution-i": "$1 точек на дюйм",
        "exif-xyresolution-c": "$1 точек на сантиметр",
-       "exif-colorspace-1": "sRGB",
        "exif-colorspace-65535": "Некалиброванное",
        "exif-componentsconfiguration-0": "не существует",
-       "exif-componentsconfiguration-1": "Y",
-       "exif-componentsconfiguration-2": "Cb",
-       "exif-componentsconfiguration-3": "Cr",
-       "exif-componentsconfiguration-4": "R",
-       "exif-componentsconfiguration-5": "G",
-       "exif-componentsconfiguration-6": "B",
        "exif-exposureprogram-0": "Неизвестно",
        "exif-exposureprogram-1": "Ручной режим",
        "exif-exposureprogram-2": "Программный режим (нормальный)",
        "exif-lightsource-17": "Стандартный источник света типа A",
        "exif-lightsource-18": "Стандартный источник света типа B",
        "exif-lightsource-19": "Стандартный источник света типа C",
-       "exif-lightsource-20": "D55",
-       "exif-lightsource-21": "D65",
-       "exif-lightsource-22": "D75",
-       "exif-lightsource-23": "D50",
        "exif-lightsource-24": "Студийная лампа стандарта ISO",
        "exif-lightsource-255": "Другой источник света",
        "exif-flash-fired-0": "Вспышка не срабатывала",
        "exif-dc-type": "Тип медиафайла",
        "exif-rating-rejected": "Отклонено",
        "exif-isospeedratings-overflow": "Более 65535",
-       "exif-maxaperturevalue-value": "$1 APEX (f/$2)",
        "exif-iimcategory-ace": "Искусство, культура и развлечения",
        "exif-iimcategory-clj": "Преступность и закон",
        "exif-iimcategory-dis": "Катастрофы и аварии",
        "imgmultipagenext": "следующая страница →",
        "imgmultigo": "Перейти!",
        "imgmultigoto": "Перейти на страницу $1",
-       "img-lang-opt": "$2 ($1)",
        "img-lang-default": "(язык по умолчанию)",
        "img-lang-info": "Показать это изображение на языке $1 $2",
        "img-lang-go": "Применить",
        "size-zetabytes": "$1 ЗБ",
        "size-yottabytes": "$1 ИБ",
        "size-pixel": "$1 {{PLURAL:$1|пиксель|пикселя|пикселей}}",
-       "size-kilopixel": "$1 KP",
-       "size-megapixel": "$1 MP",
-       "size-gigapixel": "$1 GP",
-       "size-terapixel": "$1 TP",
-       "size-petapixel": "$1 PP",
-       "size-exapixel": "$1 EP",
-       "size-zetapixel": "$1 ZP",
-       "size-yottapixel": "$1 YP",
        "bitrate-bits": "$1 б/с",
        "bitrate-kilobits": "$1 Кб/с",
        "bitrate-megabits": "$1 Мб/с",
        "limitreport-expensivefunctioncount": "Количество «дорогих» функций анализатора",
        "limitreport-expensivefunctioncount-value": "$1/$2",
        "limitreport-unstrip-depth": "Глубина рекурсии Unstrip",
-       "limitreport-unstrip-depth-value": "$1/$2",
        "limitreport-unstrip-size": "Размер Unstrip после раскрытия включений",
        "limitreport-unstrip-size-value": "$1/$2 {{PLURAL:$2|байт|байта|байт}}",
        "expandtemplates": "Развёртка шаблонов",
        "mediastatistics-header-text": "Текстовые",
        "mediastatistics-header-executable": "Исполняемые",
        "mediastatistics-header-archive": "Сжатые форматы",
-       "mediastatistics-header-3d": "3D",
        "mediastatistics-header-total": "Все файлы",
        "json-warn-trailing-comma": "$1 {{PLURAL:$1|лишняя запятая в конце была удалена|лишние запятые в конце были удалены|лишних запятых в конце были удалены}} из JSON",
        "json-error-unknown": "Имеется проблема с JSON. Ошибка: $1",
index 0c9e1f6..b199ea4 100644 (file)
        "userjspreview": "'''Памятайте, же тестуєте а перезерате лем нагляд вашого хосновательского JavaScript-у, іщі не быв уложеный!'''",
        "sitecsspreview": "'''Памятайте, же собі перезерате лем нагляд того CSS.'''\n'''Іщі не было уложене!'''",
        "sitejspreview": "'''Памятайте, же собі перезерате лем нагляд того JavaScript-у.'''\n'''Іщі не быв уложеный!'''",
-       "userinvalidconfigtitle": "'''Увага:''' Тема взгляду „$1“ не екзістує. Не забудьте, же хосновательске .css і .js файлы хоснують малы писмена, наприклад {{ns:user}}:{{BASEPAGENAME}}/vector.css, а не {{ns:user}}:{{BASEPAGENAME}}/Vector.css.",
+       "userinvalidconfigtitle": "<strong>Увага:</strong> Тема взгляду „$1“ не екзістує. Не забудьте, же хосновательске .css, .json і .js файлы хоснують малы писмена, наприклад {{ns:user}}:{{BASEPAGENAME}}/vector.css, а не {{ns:user}}:{{BASEPAGENAME}}/Vector.css.",
        "updated": "(Зміна уложена)",
        "note": "'''Позначка:'''&nbsp;",
        "previewnote": "'''Памятайте, же то лем нагляд.'''\nЗміны іщі не суть уложены!",
index 8f736ac..1677159 100644 (file)
        "search-external": "သွၵ်ႈႁႃႈ ၽၢႆၼွၵ်ႈ",
        "search-error": "မိူဝ်ႈၽွင်းသွၵ်ႈႁႃၼၼ်ႉ မီးလွင်ႈၽိတ်းပိူင်ႈ : $1",
        "preferences": "ငဝ်ႈၵုမ်းပိူင်",
-       "mypreferences": "á\80\9cá\80½á\80\84á\80ºá\82\88á\80\9cá\82\86á\82\88á\81¸á\82\82á\80ºá\80\9cá\80­á\80°á\80\9d်",
+       "mypreferences": "á\80\84á\80\9dá\80ºá\82\88á\81µá\80¯á\80\99á\80ºá\80¸á\80\95á\80­á\80°á\80\84်",
        "prefs-edits": "ၵမ်းၸိူဝ်း မႄးထတ်းမႃး :",
        "prefsnologintext2": "တႃႇတေလႅၵ်ႈလၢႆႈ ငဝ်ႈၵုမ်းပိူင်ၸဝ်ႈၵဝ်ႇၼၼ်ႉ ၶႅၼ်းတေႃႈ ၶဝ်ႈလွၵ်ႉဢိၼ်ႇလႄႈ။",
        "prefs-skin": "ၽိဝ်",
        "tooltip-pt-anonuserpage": "ၼႃႈလိၵ်ႈ ၽူႈၸႂ်ႉတိုဝ်း တွၼ်ႈတႃႇ ႁဵင်းလိၵ်ႈဢၢႆႇၽီႇ ဢၼ်ၸဝ်ႈၵဝ်ႇ တိုၵ်ႉမႄးထတ်း ၼင်ႇ",
        "tooltip-pt-mytalk": "ၼႃႈလိၵ်ႈသပ်းလႅင်းၸဝ်ႈၵဝ်ႇ",
        "tooltip-pt-anontalk": "လွင်ႈဢုပ်ႇဢူဝ်း ၵပ်းၵၢႆႇလွင်ႈမႄးထတ်း ၵႃႈတီႈ ႁဵင်းလိၵ်ႈဢၢႆႇၽီႇဢၼ်ၼႆႉ",
-       "tooltip-pt-preferences": "{{GENDER:|ၸဝ်ႈၵဝ်ႇ}} ငဝ်ႈၵုမ်းပိူင်",
+       "tooltip-pt-preferences": "ငဝ်ႈၵုမ်းပိူင် {{GENDER:|ၸဝ်ႈၵဝ်ႇ}}",
        "tooltip-pt-watchlist": "သဵၼ်ႈမၢႆၼႃႈလိၵ်ႈ ဢၼ်ပႂ်ႉတူၺ်း တႃႇလႅၵ်ႈလၢႆႈ",
        "tooltip-pt-mycontris": "သဵၼ်ႈမၢႆ ၶေႃႈလိၵ်ႈၸဝ်ႈၵဝ်ႇ",
        "tooltip-pt-anoncontribs": "သဵၼ်ႈမၢႆ လွင်ႈမႄးထတ်း ၸိူဝ်းႁဵတ်းဝႆႉ ၵႃႈတီႈ ႁဵင်းလိၵ်ႈ ဢၢႆႇၽီႇဢၼ်ၼႆႉ",
index c8806d8..b948947 100644 (file)
        "userjspreview": "'''Nezabudnite, že iba testujete/náhľad vášho používateľského JavaScriptu, ešte nebol uložený!'''",
        "sitecsspreview": "'''Nezabudnite, že toto je iba náhľad tohto CSS.'''\n'''Zatiaľ nebolo uložené!'''",
        "sitejspreview": "'''Nezabudnite, že toto je iba náhľad tohto JavaScriptu.'''\n'''Zatiaľ nebol uložený!'''",
-       "userinvalidconfigtitle": "'''Upozornenie:''' Neexistuje vzhľad „$1“. Pamätajte, že vlastné .css a .js stránky používajú názov s malými písmenami, napr. {{ns:user}}:Foo/vector.css a nie {{ns:user}}:Foo/Vector.css.",
+       "userinvalidconfigtitle": "<strong>Upozornenie:</strong> Neexistuje vzhľad „$1“. Pamätajte, že vlastné .css, .json a .js stránky používajú názov s malými písmenami, napr. {{ns:user}}:Foo/vector.css a nie {{ns:user}}:Foo/Vector.css.",
        "updated": "(Aktualizovaný)",
        "note": "'''Poznámka: '''",
        "previewnote": "'''Nezabudnite, toto je iba náhľad stránky, ktorú upravujete.\nZmeny ešte nie sú uložené!'''",
index 28ed059..674b21f 100644 (file)
        "postedit-confirmation-restored": "ورقہ بحال تھی ڳئے",
        "postedit-confirmation-saved": "تہاݙی تبدیلی محفوظ تھی ڳئی ہے۔",
        "postedit-confirmation-published": "تہاݙی تبدیلی شائع تھی ڳئی ہائی۔",
+       "slot-name-main": "مین",
        "content-model-wikitext": "ویکی متن",
        "content-model-text": "سادہ متن",
        "content-model-javascript": "جاوا  سکرپٹ",
        "pageinfo-display-title": "عنوان",
        "pageinfo-default-sort": "کلید برائے ابتدائی ترتیب",
        "pageinfo-length": "ورقے دی لمباݨ (بائٹ وچ)",
+       "pageinfo-namespace": "ناں جاہ",
        "pageinfo-article-id": "ورقے دی شناخت",
        "pageinfo-language": "زبان",
        "pageinfo-content-model": "انداز متن",
index 5d046de..bc4fb00 100644 (file)
        "returnto": "Vrnite se na $1.",
        "tagline": "Iz {{GRAMMAR:rodilnik|{{SITENAME}}}}",
        "help": "Pomoč",
+       "help-mediawiki": "Pomoč o MediaWiki",
        "search": "Iskanje",
        "search-ignored-headings": " #<!-- te vrstice ne spreminjajte --> <pre>\n# Poglavja, ki bodo prezrta pri iskanju.\n# Spremembe bodo začele veljati takoj, ko bo stran s poglavjem indeksirana.\n# Reindeksacijo strani lahko vsilite z ničelnim urejanjem.\n# Skladnja je sledeča:\n#   * Vse od znaka »#« do konca vrstice je pripomba.\n#   * Vsaka neprazna vrstica je natančen naslov, ki ga bomo prezrli, upoštevajoč velikost črk in ostalo.\nOpombe\nOpombe in sklici\nViri\nZunanje povezave\nGlej tudi\n #</pre> <!-- te vrstice ne spreminjajte -->",
        "searchbutton": "Iskanje",
        "editpage-invalidcontentmodel-text": "Model vsebine »$1« ni podprt.",
        "editpage-notsupportedcontentformat-title": "Oblika vsebine ni podprta",
        "editpage-notsupportedcontentformat-text": "Model vsebine $2 ne podpira oblike vsebine $1.",
+       "slot-name-main": "Glavno",
        "content-model-wikitext": "wikibesedilo",
        "content-model-text": "golo besedilo",
        "content-model-javascript": "JavaScript",
        "move": "Preimenuj",
        "movethispage": "Prestavi stran",
        "unusedimagestext": "Spodnje datoteke obstajajo, vendar niso vključene v nobeno stran.\nProsimo, upoštevajte, da se lahko druge spletne strani povezujejo na datoteko z neposrednim URL in je zato morda še vedno navedena tukaj, čeprav se aktivno uporablja.",
+       "unusedimagestext-categorizedimgisused": "Naslednje datoteke obstajajo, ampak niso vključene na nobeno stran. Kategorizirane slike obravnavamo kot uporabljane, čeprav niso vključene na nobeno stran.\nPomnite, da se lahko druge strani povezujejo na datoteko z neposrednim URL-jem, zato je lahko še vedno navedena tukaj, čeprav se aktivno uporablja.",
        "unusedcategoriestext": "Naslednje strani kategorij obstajajo, vendar jih ne uporablja noben članek ali druga kategorija.",
        "notargettitle": "Ni cilja",
        "notargettext": "Niste navedli ciljne strani ali uporabnika za izvedbo ukaza.",
        "pageinfo-display-title": "Naslov za prikaz",
        "pageinfo-default-sort": "Privzeti ključ za razvrščanje",
        "pageinfo-length": "Dolžina strani (v bajtih)",
+       "pageinfo-namespace": "Imenski prostor",
        "pageinfo-article-id": "ID strani",
        "pageinfo-language": "Jezik vsebine strani",
        "pageinfo-language-change": "spremeni",
index da5bcd3..0333773 100644 (file)
@@ -39,7 +39,8 @@
                        "BokicaK",
                        "BadDog",
                        "Fitoschido",
-                       "Stalker"
+                       "Stalker",
+                       "Vlad5250"
                ]
        },
        "tog-underline": "Подвлачење веза:",
        "returnto": "Назад на страницу „$1”.",
        "tagline": "Из {{GRAMMAR:генитив|{{SITENAME}}}}",
        "help": "Помоћ",
+       "help-mediawiki": "Помоћ о MediaWiki-ју",
        "search": "Претрага",
        "search-ignored-headings": " #<!-- не мењајте ништа у овом реду --> <pre>\n# Наслови који ће бити занемарени при претрази.\n# Промене су видљиве одмах након што се страница са насловом индексира.\n# Можете изнудити поновно индексирање „нултом” изменом.\n# Синтакса је следећа:\n#  * Сваки ред који започиње знаком „#” је коментар.\n#  * Сваки не празни ред је тачан наслов који ће бити занемарен, с тим да се разликују мала и велика слова и све остало\nРеференце\nСпољашње везе\nТакође погледајте\n #</pre> <!-- не мењајте ништа у овом реду -->",
        "searchbutton": "Претражи",
        "createacct-emailoptional": "Имејл-адреса (опционално)",
        "createacct-email-ph": "Унесите имејл-адресу",
        "createacct-another-email-ph": "Унесите имејл-адресу",
-       "createaccountmail": "Користите привремену, случајну лозинку и пошаљите је на наведену имејл-адресу",
+       "createaccountmail": "Користи привремену, насумичну лозинку и пошаљи је на наведену имејл-адресу",
        "createaccountmail-help": "Може се користити да се некоме отвори налог без сазнања лозинке.",
        "createacct-realname": "Право име (опционално)",
        "createacct-reason": "Разлог",
-       "createacct-reason-ph": "Ð\97аÑ\88Ñ\82о Ð¿Ñ\80авиÑ\82е Ñ\98оÑ\88 Ñ\98едан Ð½Ð°Ð»Ð¾Ð³?",
+       "createacct-reason-ph": "Ð\97аÑ\88Ñ\82о Ð¾Ñ\82ваÑ\80аÑ\82е Ñ\98оÑ\88 Ñ\98едан Ð½Ð°Ð»Ð¾Ð³",
        "createacct-reason-help": "Порука која се приказује у дневнику отварања налога",
        "createacct-submit": "Отвори налог",
        "createacct-another-submit": "Отвори налог",
        "edit-gone-missing": "Није могуће ажурирати страницу.\nИзгледа да је избрисана.",
        "edit-conflict": "Сукоб измена.",
        "edit-no-change": "Ваша измена је занемарена јер није било никаквих промена у тексту.",
+       "edit-slots-cannot-add": "{{PLURAL:$1|Следећи слот овде није поржан|Следећи слотови овде нису подржани}}: $2.",
+       "edit-slots-cannot-remove": "{{PLURAL:$1|Следећи слот је обавезан и не може да се уклони|Следећи слотови су обавезни и не могу да се уклоне}}: $2.",
+       "edit-slots-missing": "{{PLURAL:$1|Следећи слот недостаје|Следећи слотови недостају}}: $2.",
        "postedit-confirmation-created": "Страница је направљена.",
        "postedit-confirmation-restored": "Страница је враћена.",
        "postedit-confirmation-saved": "Ваша измена је сачувана.",
        "defaultmessagetext": "Подразумевани текст поруке",
        "content-failed-to-parse": "Рашчлањивање садржаја типа $2 за модел $1 није успело: $3",
        "invalid-content-data": "Неважећи подаци садржаја",
-       "content-not-allowed-here": "Садржај модела „$1“ није дозвољен на страници [[:$2]]",
+       "content-not-allowed-here": "Садржај $1 није дозвољен на страници [[:$2]] у слоту „$3”",
        "editwarning-warning": "Ако напустите ову страницу, изгубићете све измене које сте направили. Ако сте пријављени, можете онемогућити ово упозорење у својим подешавањима, у одељку „{{int:prefs-editing}}“.",
        "editpage-invalidcontentmodel-title": "Модел садржаја није подржан",
        "editpage-invalidcontentmodel-text": "Модел садржаја „$1“ није подржан.",
        "editpage-notsupportedcontentformat-title": "Формат садржаја није подржан",
        "editpage-notsupportedcontentformat-text": "Формат садржаја $1 није подржан за модел садржаја $2.",
-       "content-model-wikitext": "викитекст",
-       "content-model-text": "чист текст",
-       "content-model-javascript": "JavaScript",
-       "content-model-css": "CSS",
-       "content-model-json": "JSON",
+       "slot-name-main": "Главни",
+       "content-model-wikitext": "викитекста",
+       "content-model-text": "чистог текста",
+       "content-model-javascript": "JavaScript-а",
+       "content-model-css": "CSS-а",
+       "content-model-json": "JSON-а",
        "content-json-empty-object": "Празан објекат",
        "content-json-empty-array": "Празан низ",
        "deprecated-self-close-category": "Странице које користе невалидне самозатварајуће HTML тагове",
        "action-edit": "уређујете ову страницу",
        "action-createpage": "направите ову страницу",
        "action-createtalk": "направите ову страницу за разговор",
-       "action-createaccount": "напÑ\80авите овај кориснички налог",
+       "action-createaccount": "оÑ\82воÑ\80ите овај кориснички налог",
        "action-autocreateaccount": "аутоматски направите овај спољашњи кориснички налог",
        "action-history": "гледате историју ове странице",
        "action-minoredit": "означите ову измену као мању",
        "immobile-target-namespace-iw": "Међувики веза није важеће одредиште за премештање странице.",
        "immobile-source-page": "Ова страница се не може преместити.",
        "immobile-target-page": "Премештање није могуће на одредишни наслов.",
-       "bad-target-model": "Ð\96еÑ\99ено Ð¾Ð´Ñ\80едиÑ\88Ñ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð´Ñ\80Ñ\83гаÑ\87иÑ\98и Ð¼Ð¾Ð´ÐµÐ» Ñ\81адÑ\80жаÑ\98а. Ð\9dе Ð¼Ð¾Ð³Ñ\83 Ð´Ð° Ð¿Ñ\80еÑ\82воÑ\80им Ð¸Ð· $1 Ñ\83 $2.",
+       "bad-target-model": "Ð\96еÑ\99ено Ð¾Ð´Ñ\80едиÑ\88Ñ\82е ÐºÐ¾Ñ\80иÑ\81Ñ\82и Ð´Ñ\80Ñ\83ги Ð¼Ð¾Ð´ÐµÐ» Ñ\81адÑ\80жаÑ\98а. Ð\9dиÑ\98е Ð¼Ð¾Ð³Ñ\83Ñ\9bе ÐºÐ¾Ð½Ð²ÐµÑ\80Ñ\82оваÑ\82и Ð¸Ð· $1 Ñ\83 Ñ\81адÑ\80жаÑ\98 $2.",
        "imagenocrossnamespace": "Датотека се не може преместити у именски простор који не припада датотекама.",
        "nonfile-cannot-move-to-file": "Не-датотеке не можете преместити у именски простор за датотеке",
        "imagetypemismatch": "Проширење нове датотеке се не поклапа с њеним типом.",
        "tooltip-pt-preferences": "{{GENDER:|Ваша}} подешавања",
        "tooltip-pt-watchlist": "Списак страница чије промене надгледате",
        "tooltip-pt-mycontris": "Списак {{GENDER:|ваших}} доприноса",
-       "tooltip-pt-anoncontribs": "СпиÑ\81ак измена направљених са ове IP адресе",
+       "tooltip-pt-anoncontribs": "Ð\9bиÑ\81Ñ\82а измена направљених са ове IP адресе",
        "tooltip-pt-login": "Предлажемо вам да се пријавите, иако то није обавезно",
        "tooltip-pt-login-private": "Морате да се пријавите да бисте користили овај Вики",
        "tooltip-pt-logout": "Одјавите се",
        "pageinfo-display-title": "Наслов за приказ",
        "pageinfo-default-sort": "Подразумевани кључ сортирања",
        "pageinfo-length": "Дужина странице (у бајтовима)",
+       "pageinfo-namespace": "Именски простор",
        "pageinfo-article-id": "ID странице",
        "pageinfo-language": "Језик садржаја странице",
        "pageinfo-language-change": "промени",
index 9a0606b..43da13a 100644 (file)
        "userjspreview": "'''Pamjyntej, aże to je no raźe ino podglůnd Twojego arkusza stylůw JavaScriptu.'''\n'''Ńic jeszcze ńy zostoło naszkryflane!'''",
        "sitecsspreview": "'''Pamjyntej, aże to je na raźe ino podglůnd Twojego arkusza stylůw CSS.'''\n'''Ńic jeszcze ńy zostoło naszkryflane!'''",
        "sitejspreview": "'''Pamjyntej, aże to je na raźe ino podglůnd Twojego JavaScriptu - nic jeszcze ńy zostoło naszkryflane!'''",
-       "userinvalidconfigtitle": "'''Pozůr:''' Ńy mo skůrki uo mjańe \"$1\". Pamjyntej, aże zajty użytkowńika zawjyrajůnce CSS i JavaScript powinny zaczynać śe małům buchsztabům, lb. {{ns:user}}:Foo/vector.css.",
+       "userinvalidconfigtitle": "<strong>Pozůr:</strong> Ńy mo skůrki uo mjańe \"$1\". Pamjyntej, aże zajty użytkowńika zawjyrajůnce CSS, JSON i JavaScript powinny zaczynać śe małům buchsztabům, lb. {{ns:user}}:Foo/vector.css.",
        "updated": "(Pomjyńano)",
        "note": "'''Pozůr:'''",
        "previewnote": "'''To je ino podglůnd - artikel jeszcze ńy je spamjyntany!'''",
index eff2fec..425c05a 100644 (file)
@@ -29,7 +29,8 @@
                        "Pon44695",
                        "Aefgh39622",
                        "Fitoschido",
-                       "TrisT7"
+                       "TrisT7",
+                       "Patsagorn Y."
                ]
        },
        "tog-underline": "การขีดเส้นใต้ลิงก์:",
        "returnto": "กลับไป $1",
        "tagline": "จาก {{SITENAME}}",
        "help": "คำอธิบาย",
+       "help-mediawiki": "ความช่วยเหลือเกี่ยวกับมีเดียวิกิ",
        "search": "ค้นหา",
        "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# อธิบายหัวข้อที่จะละเว้นในการค้นหา\n# การเปลี่ยนแปลงนี้จะมีผลเมื่อหน้าหัวเรื่องถูกจัดทำดัชนี\n# บังคับให้จัดทำดัชนีหน้าใหม่ด้วยการแก้ไขที่ว่างเปล่า\n# ไวยากรณ์เป็นดังนี้:\n#   * ทุกๆ บรรทัดที่ขึ้นต้นด้วย \"#\" จะเป็นคำอธิบายจนถึงจุดสิ้นสุดของบรรทัด\n#   * บรรทัดที่ไม่ใช่บรรทัดว่างจะเป็นบรรทัดแรกที่คุณต้องการละเลย รวมทั้งการใช้อักษรตัวพิมพ์ใหญ่และทุกๆ อย่างด้วย\nReferences\nExternal links\nSee also\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "ค้นหา",
        "passwordtooshort": "รหัสผ่านต้องมีอย่างน้อย $1 อักขระ",
        "passwordtoolong": "รหัสผ่านยาวกว่า $1 อักขระไม่ได้",
        "passwordtoopopular": "ใช้รหัสผ่านที่มีผู้เลือกทั่วไปไม่ได้ กรุณาเลือกรหัสผ่านที่คาดเดาได้ยากกว่านี้",
+       "passwordinlargeblacklist": "รหัสผ่านทีุ่ณป้อนไปคือรายการรหัสผ่านที่ใช้โดยทั่วไปในโครงการ โปรดเลือกรหัสผ่านที่ไม่ซ้ำกันกับที่อื่น",
        "password-name-match": "รหัสผ่านต้องต่างจากชื่อผู้ใช้",
        "password-login-forbidden": "ห้ามใช้ชื่อผู้ใช้และรหัสผ่านนี้",
        "mailmypassword": "ตั้งรหัสผ่านใหม่",
        "edit-gone-missing": "ไม่สามารถปรับหน้าดังกล่าวได้\nดูเหมือนถูกลบแล้ว",
        "edit-conflict": "แก้ไขชนกัน",
        "edit-no-change": "การแก้ไขของคุณถูกเพิกเฉย เพราะไม่มีการเปลี่ยนแปลงข้อความ",
+       "edit-slots-cannot-add": "การติดตาม{{PLURAL:$1|มัน|พวกมัน}} ไม่ได้รับการสนับสนุนที่นี่:$2",
        "postedit-confirmation-created": "สร้างหน้าแล้ว",
        "postedit-confirmation-restored": "กู้คืนหน้าแล้ว",
        "postedit-confirmation-saved": "บันทึกการแก้ไขของคุณแล้ว",
        "defaultmessagetext": "เนื้อหาข้อความปริยาย",
        "content-failed-to-parse": "แจงส่วนเนื้อหา $2 ของตัวแบบ $1 ล้มเหลว: $3",
        "invalid-content-data": "ข้อมูลเนื้อหาไม่ถูกต้อง",
-       "content-not-allowed-here": "ไม่อนุญาตเนื้อหา \"$1\" ในหน้า [[:$2]]",
+       "content-not-allowed-here": "\"$1\" เป็นเนื้อหาที่ไม่ได้รับอนุญาตในหน้า [[:$2]] ในช่อง \"$3\"",
        "editwarning-warning": "การออกจากหน้านี้อาจทำให้การเปลี่ยนแปลงทั้งหมดที่คุณได้ทำสูญหาย\nถ้าคุณเข้าสู่ระบบแล้ว คุณสามารถปิดคำเตือนนี้ได้ที่ส่วน \"{{int:prefs-editing}}\" ในการตั้งค่าของคุณ",
        "editpage-invalidcontentmodel-title": "ไม่รองรับรูปแบบเนื้อหานี้",
        "editpage-invalidcontentmodel-text": "ไม่รองรับโมเดลเนื้อหา \"$1\"",
        "editpage-notsupportedcontentformat-title": "รูปแบบเนื้อหาไม่ได้รับการรองรับ",
        "editpage-notsupportedcontentformat-text": "ตัวแบบเนื้อหา $2 ไม่รองรับตัวแบบเนื้อหา $1",
+       "slot-name-main": "หลัก",
        "content-model-wikitext": "ข้อความวิกิ",
        "content-model-text": "ข้อความธรรมดา",
        "content-model-javascript": "จาวาสคริปต์",
        "localtime": "เวลาท้องถิ่น:",
        "timezoneuseserverdefault": "ใช้ค่าปริยายของวิกิ ($1)",
        "timezoneuseoffset": "อื่น ๆ (ระบุส่วนต่างเวลา)",
+       "timezone-useoffset-placeholder": "ตัวอย่างเช่น: \"-07:00\" หรือ \"01:00\"",
        "servertime": "เวลาเซิร์ฟเวอร์:",
        "guesstimezone": "เรียกค่าจากเบราว์เซอร์",
        "timezoneregion-africa": "ทวีปแอฟริกา",
        "prefs-advancedwatchlist": "ตัวเลือกขั้นสูง",
        "prefs-displayrc": "ตัวเลือกผลแสดง",
        "prefs-displaywatchlist": "ตัวเลือกผลแสดง",
+       "prefs-changesrc": "การเปลี่ยนแปลงที่แสดง",
+       "prefs-changeswatchlist": "การเปลี่ยนแปลงที่แสดง",
+       "prefs-pageswatchlist": "รายการเฝ้าดู",
        "prefs-tokenwatchlist": "โทเค็น",
        "prefs-diffs": "ความแตกต่างระหว่างรุ่น",
        "prefs-help-prefershttps": "การตั้งค่านี้จะมีผลเมื่อคุณล็อกอินครั้งถัดไป",
        "rcfilters-watchlist-markseen-button": "ทำเครื่องหมายว่าเห็นการเปลี่ยนแปลงทั้งหมดแล้ว",
        "rcfilters-watchlist-edit-watchlist-button": "แก้ไขรายการหน้าเฝ้าดูของคุณ",
        "rcfilters-watchlist-showupdated": "การเปลี่ยนแปลงหน้าที่คุณไม่ได้ชมตั้งแต่มีการเปลี่ยนแปลงแสดงด้วย <strong>ตัวหนา</strong> โดยมีเครื่องหมายเข้ม",
-       "rcfilters-preference-label": "à¸\8bà¹\88อà¸\99รุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87à¸\82อà¸\87รายà¸\81ารà¹\80à¸\9bลีà¹\88ยà¸\99à¹\81à¸\9bลà¸\87ลà¹\88าสุà¸\94",
-       "rcfilters-preference-help": "ยà¹\89อà¸\99à¸\81ลัà¸\9aà¸\81ารออà¸\81à¹\81à¸\9aà¸\9aอิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8bà¹\83หมà¹\88à¸\9bี 2560 à¹\81ละà¹\80à¸\84รืà¹\88อà¸\87มือà¸\97ัà¹\89à¸\87หมà¸\94à¸\97ีà¹\88à¹\80à¸\9eิà¹\88มà¹\80à¸\82à¹\89ามาหลัà¸\87à¸\88าà¸\81à¸\99ัà¹\89น",
-       "rcfilters-watchlist-preference-label": "à¸\8bà¹\88อà¸\99รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูรุà¹\88à¸\99à¸\9bรัà¸\9aà¸\9bรุà¸\87",
-       "rcfilters-watchlist-preference-help": "ยà¹\89อà¸\99à¸\81ลัà¸\9aà¸\81ารออà¸\81à¹\81à¸\9aà¸\9aอิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8bà¹\83หมà¹\88à¸\9bี 2560 à¹\81ละà¹\80à¸\84รืà¹\88อà¸\87มือà¸\97ีà¹\88à¹\80à¸\9eิà¹\88มà¹\80à¸\82à¹\89ามาหลัà¸\87à¸\88าà¸\81à¸\99ัà¹\89น",
+       "rcfilters-preference-label": "à¹\83à¸\8aà¹\89อิà¸\99à¹\80à¸\97อรà¹\8cà¹\80à¸\9fà¸\8bà¸\97ีà¹\88à¹\84มà¹\88à¹\83à¸\8aà¹\89 JavaScript",
+       "rcfilters-preference-help": "à¹\82หลà¸\94 RecentChanges à¹\82à¸\94ยà¹\84มà¹\88à¹\83à¸\8aà¹\89à¸\95ัวà¸\81รอà¸\87หรือà¹\80à¸\99à¹\89à¸\99à¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99à¸\81ารà¸\97ำà¸\87าน",
+       "rcfilters-watchlist-preference-label": "à¹\83à¸\8aà¹\89อิà¸\99à¹\80à¸\95อรà¹\8cà¹\80à¸\9fà¸\8bà¸\97ีà¹\88à¹\84มà¹\88à¹\83à¸\8aà¹\89 JavaScript",
+       "rcfilters-watchlist-preference-help": "à¹\82หลà¸\94รายà¸\81ารà¹\80à¸\9dà¹\89าà¸\94ูà¸\97ีà¹\88à¹\84มà¹\88มีà¸\95ัวà¸\81รอà¸\87หรือà¹\80à¸\99à¹\89à¸\99à¸\9fัà¸\87à¸\81à¹\8cà¸\8aัà¸\99à¸\81ารà¸\97ำà¸\87าน",
        "rcfilters-filter-showlinkedfrom-label": "แสดงการเปลี่ยนแปลงในหน้าที่ลิงก์มาจาก",
        "rcfilters-filter-showlinkedfrom-option-label": "<strong>หน้าที่ลิงก์มา</strong>จากหน้าที่เลือก",
        "rcfilters-filter-showlinkedto-label": "แสดงการเปลี่ยนแปลงในหน้าที่ลิงก์ไป",
index aed1562..2e40dc3 100644 (file)
        "returnto": "Повернення до сторінки «$1».",
        "tagline": "Матеріал з {{grammar:genitive|{{SITENAME}}}}",
        "help": "Довідка",
+       "help-mediawiki": "Допомога про MediaWiki",
        "search": "Пошук",
        "search-ignored-headings": " #<!-- залиште цей рядок точно таким, яким він є --> <pre>\n# Заголовки, які будуть ігноруватися при пошуці.\n# Зміни, які набирають сили при індексуванні сторінки з заголовком.\n# Ви можете примусити переіндексувати сторінку з нульовим редагуванням.\n# Синтаксис наступний:\n#   * Усе, що починається з символу \"#\" до кінця рядка, є коментарем\n#   * Кожний непорожній рядок є точним заголовком для ігнорування\nПримітки\nПосилання\nДив. також\n #</pre> <!-- залиште цей рядок точно таким, яким він є -->",
        "searchbutton": "Пошук",
        "pageinfo-display-title": "Заголовок для відображення",
        "pageinfo-default-sort": "Ключ сортування за замовчуванням",
        "pageinfo-length": "Довжина сторінки (в байтах)",
+       "pageinfo-namespace": "Простір назв",
        "pageinfo-article-id": "ID сторінки",
        "pageinfo-language": "Мова вмісту сторінки",
        "pageinfo-language-change": "Змінити",
index 58ad431..3b32542 100644 (file)
        "revisionasof": "نسخہ بمطابق $1",
        "revision-info": "نظرثانی بتاریخ $1 از {{GENDER:$6|$2}}$7",
        "previousrevision": "→ پرانا نسخہ",
-       "nextrevision": "→اگلا اعادہ",
+       "nextrevision": "تازہ نسخہ ←",
        "currentrevisionlink": "تازہ ترین نسخہ",
        "cur": "موجودہ",
        "next": "آگے",
index 291acc0..ec6d069 100644 (file)
        "autosumm-blank": "אויסגעליידיקט דעם בלאט",
        "autosumm-replace": "פֿאַרבײַט דעם בלאַט מיט '$1'",
        "autoredircomment": "ווייטערפירן צו [[$1]]",
+       "autosumm-changed-redirect-target": "געענדערט ווייטערפירונג ציל פון בלאט [[$1]] צו בלאט [[$2]]",
        "autosumm-new": "געשאַפֿן בלאַט מיט '$1'",
        "autosumm-newblank": "ליידיגן בלאט געשאפן",
        "size-kilobytes": "{{PLURAL:$1|איין קילאבייט|$1 קילאבייטן}}",
index 1a90f4f..433d966 100644 (file)
        "tog-newpageshidepatrolled": "響新頁清單度隱藏巡查過嘅版",
        "tog-hidecategorization": "隱藏頁面分類",
        "tog-extendwatchlist": "展開監視清單去顯示全部更改,唔係淨係最新嘅",
-       "tog-usenewrc": "最近修改同監視清單顯示群組修改",
+       "tog-usenewrc": "最近修改同監視清單顯示嘅改動按版夾埋",
        "tog-numberheadings": "標題自動編號",
        "tog-editondblclick": "撳兩下改嘢",
        "tog-editsectiononrightclick": "可以撳右掣更改個別段落",
-       "tog-watchcreations": "將我開嘅同上傳嘅檔案加入監視清單",
+       "tog-watchcreations": "將我開嘅同上傳嘅檔案加入監視清單",
        "tog-watchdefault": "將我修改嘅頁同檔案加入監視清單",
-       "tog-watchmoves": "將我移動嘅頁同檔案加入監視清單",
+       "tog-watchmoves": "將我搬嘅版同檔案加入監視清單",
        "tog-watchdeletion": "將我刪除嘅頁同檔案加入監視清單",
-       "tog-watchuploads": "å\8a æ\88\91ä¸\8aè¼\89å\98\85æª\94å\8e»ç\9b£è¦\96æ¸\85å\96®åº¦",
-       "tog-watchrollback": "將我反轉過嘅頁加落監視清單",
+       "tog-watchuploads": "å°\87æ\88\91ä¸\8aè¼\89å\98\85æ\96°æª\94æ¡\88å\8a å\85¥ç\9b£è¦\96æ¸\85å\96®",
+       "tog-watchrollback": "將我反轉過嘅版加入監視清單",
        "tog-minordefault": "預設全部編輯做細修改",
        "tog-previewontop": "喺修改欄上邊顯示預覽",
        "tog-previewonfirst": "第一次修改時顯示預覽",
-       "tog-enotifwatchlistpages": "å\96ºæ\88\91å¼µç\9b£è¦\96æ¸\85å\96®åº¦å\98\85é \81å\90\8cæª\94æ\9c\89ä¿®æ\94¹æ\99\82,用電郵通知我。",
+       "tog-enotifwatchlistpages": "å¦\82æ\9e\9cæ\88\91å¼µç\9b£è¦\96æ¸\85å\96®å\85¥é\82\8aå\98\85ç\89\88æ\88\96æª\94æ¡\88æ\9c\89ä¿®æ\94¹,用電郵通知我。",
        "tog-enotifusertalkpages": "喺個人留言版有修改時,用電郵通知我。",
        "tog-enotifminoredits": "喺頁面同檔案有細修改時,用電郵通知我。",
        "tog-enotifrevealaddr": "喺電郵通知信上面話畀人聽我嘅電郵地址",
        "tog-fancysig": "將簽名以維基字對待(冇自動連結)",
        "tog-uselivepreview": "響冇重新加載過個頁面嘅情況下用即時預覽",
        "tog-forceeditsummary": "我冇入修改註解時通知我",
-       "tog-watchlisthideown": "響監視清單度隱藏我嘅編輯",
+       "tog-watchlisthideown": "響監視清單度隱藏我嘅修改",
        "tog-watchlisthidebots": "響監視清單度隱藏機械人嘅編輯",
        "tog-watchlisthideminor": "響監視清單度隱藏細修改",
-       "tog-watchlisthideliu": "響監視清單度隱藏登入用戶",
+       "tog-watchlisthideliu": "響監視清單度隱藏登入用戶嘅修改",
        "tog-watchlistreloadautomatically": "有篩選條件變嘅時候自動重新載入個監視清單(要用JavaScript)",
        "tog-watchlisthideanons": "響監視清單度隱藏匿名用戶",
-       "tog-watchlisthidepatrolled": "響監視清單度隱藏巡查過嘅編輯",
+       "tog-watchlisthidepatrolled": "響監視清單度隱藏巡查過嘅修改",
        "tog-watchlisthidecategorization": "隱藏頁面分類",
        "tog-ccmeonemails": "喺我寄電郵畀其他人嗰陣,寄返封副本畀我。",
        "tog-diffonly": "響差異下面唔顯示頁面內容",
        "prefs-editwatchlist-label": "編輯監視清單入面嘅項目:",
        "prefs-editwatchlist-edit": "睇下同刪走你個編輯監視清單入面嘅標題",
        "prefs-editwatchlist-raw": "編輯原始監視清單",
-       "prefs-editwatchlist-clear": "æ¸\85ç\90\86你嘅監視清單",
+       "prefs-editwatchlist-clear": "æ¸\85空你嘅監視清單",
        "prefs-watchlist-days": "監視清單嘅顯示日數:",
        "prefs-watchlist-days-max": "最多 $1 日",
        "prefs-watchlist-edits": "監視清單度嘅最多顯示更改數:",
        "prefs-watchlist-edits-max": "最大數量:1000",
-       "prefs-watchlist-token": "ç\9b£è¦\96æ¸\85å\96®å¹£:",
+       "prefs-watchlist-token": "ç\9b£è¦\96æ¸\85å\96®å®\89å\85¨ç¢¼:",
        "prefs-misc": "雜項",
        "prefs-resetpass": "改密碼",
        "prefs-changeemail": "改或者剷走電郵地址",
        "right-editmyusercss": "編輯你自己嘅用戶CSS檔",
        "right-editmyuserjson": "編輯你自己嘅用戶JSON檔",
        "right-editmyuserjs": "編輯你自己嘅用戶JavaScript檔",
-       "right-viewmywatchlist": "睇你自己嘅監視一覽",
+       "right-viewmywatchlist": "睇你自己嘅監視清單",
        "right-editmywatchlist": "修改自己嘅監視清單。注意,就算無呢個權限,某啲操作仍然會加頁面去監視清單度。",
        "right-viewmyprivateinfo": "睇下個人信息(例如電郵或真名)",
        "right-editmyprivateinfo": "修改個人信息(例如電郵或真名)",
        "action-siteadmin": "鎖同解鎖資料庫",
        "action-sendemail": "寄電郵",
        "action-editmyoptions": "改你嘅喜好設定",
-       "action-editmywatchlist": "改監視清單",
+       "action-editmywatchlist": "改你嘅監視清單",
        "action-viewmywatchlist": "睇監視清單",
        "action-viewmyprivateinfo": "睇你嘅私人資料",
        "action-editmyprivateinfo": "改你嘅私人資料",
        "rcfilters-filter-minor-description": "作者話程度細嘅修改。",
        "rcfilters-filter-major-label": "唔細嘅編輯",
        "rcfilters-filter-major-description": "作者冇話程度細嘅修改。",
-       "rcfilters-filtergroup-watchlist": "監視緊嘅頁面",
+       "rcfilters-filtergroup-watchlist": "監視緊嘅",
        "rcfilters-filter-watchlist-watched-label": "喺監視清單",
-       "rcfilters-filter-watchlist-watched-description": "喺監視清單嘅頁面嘅改動。",
+       "rcfilters-filter-watchlist-watched-description": "監視清單入邊嘅版嘅改動。",
        "rcfilters-filter-watchlist-watchednew-label": "新嘅監視清單改動",
        "rcfilters-filter-watchlist-watchednew-description": "你上次走咗之後,喺監視清單嘅頁面嘅改動。",
        "rcfilters-filter-watchlist-notwatched-label": "唔喺監視清單",
        "emailuserfooter": "呢封電郵係由$1{{GENDER:$1|寄}}畀{{GENDER:$2|$2}}經{{SITENAME}}嘅「{{int:emailuser}}」功能發出嘅。如果{{GENDER:$2|你}}覆呢封電郵,{{GENDER:$2|你}}封電郵會直接送畀{{GENDER:$1|原本發件人}},曝露埋{{GENDER:$2|你}}個電郵地址畀{{GENDER:$1|佢哋}}.",
        "usermessage-summary": "留低系統訊息。",
        "usermessage-editor": "系統訊息",
-       "watchlist": "監視單",
+       "watchlist": "監視單",
        "mywatchlist": "監視清單",
        "watchlistfor2": "$1嘅監視清單 $2",
-       "nowatchlist": "你嘅監視清單度並冇任何項目。",
+       "nowatchlist": "你嘅監視清單乜都冇。",
        "watchlistanontext": "請先簽到去睇或者改響你監視清單度嘅項目。",
        "watchnologin": "未登入",
        "addwatch": "加到監視清單",
        "addedwatchtext": "「[[:$1]]」同佢個討論頁已加入到你嘅[[Special:Watchlist|監視清單]]度。",
+       "addedwatchtext-talk": "「[[:$1]]」同佢啲相關嘅版已加入你嘅[[Special:Watchlist|監視清單]]。",
        "addedwatchtext-short": "「$1」呢一版已經加咗入監視清單。",
        "removewatch": "響監視清單度拎走",
        "removedwatchtext": "「[[:$1]]」同佢個討論頁已經喺[[Special:Watchlist|你嘅監視清單]]度刪除。",
+       "removedwatchtext-talk": "「[[:$1]]」同佢啲相關嘅版已經喺[[Special:Watchlist|你嘅監視清單]]度刪除。",
        "removedwatchtext-short": "「$1」呢一版已經由監視清單度拎走咗。",
        "watch": "監視",
        "watchthispage": "監視呢頁",
        "unwatchthispage": "停止監視",
        "notanarticle": "唔係一個內容頁",
        "notvisiblerev": "上次由唔同用戶嘅修訂已經刪除咗",
-       "watchlist-details": "計埋討論頁,有 $1 {{PLURAL:$1|版}}響你個監視清單度。",
+       "watchlist-details": "你嘅監視清單有$1版(計埋討論頁)。",
        "wlheader-enotif": "電郵通知已經啟用咗。",
        "wlheader-showupdated": "標'''粗體字'''嘅頁響你上次嚟之後畀人改過。",
        "wlnote": "下面係直到$3 $4為止,最近'''$2'''個鐘之內嘅最新$1次修改。",
        "tooltip-ca-delete": "刪除呢一頁",
        "tooltip-ca-undelete": "將呢個頁面還原到被刪除之前嘅狀態",
        "tooltip-ca-move": "移動呢一頁",
-       "tooltip-ca-watch": "將呢一頁加到去你嘅監視清單",
+       "tooltip-ca-watch": "將呢一版加入你嘅監視清單",
        "tooltip-ca-unwatch": "將呢一頁喺你嘅監視清單中移去",
        "tooltip-search": "搵{{SITENAME}}",
        "tooltip-search-go": "如果相同嘅標題存在嘅話就直接去嗰一版",
        "tooltip-preview": "預覽你嘅修改,保存之前請檢查一次先",
        "tooltip-diff": "顯示你對頁面所作嘅修改",
        "tooltip-compareselectedversions": "顯示該頁面兩個所選修訂嘅唔同之處。",
-       "tooltip-watch": "å\8a å\91¢é \81å\85¥ä½ å¼µ監視清單",
+       "tooltip-watch": "å°\87å\91¢ä¸\80ç\89\88å\8a å\85¥ä½ å\98\85監視清單",
        "tooltip-watchlistedit-normal-submit": "拎走標題",
        "tooltip-watchlistedit-raw-submit": "更新監視清單",
        "tooltip-recreate": "即使已經刪過都要重新整過呢頁",
        "confirm-purge-top": "肯定要洗咗呢版個快取版本?",
        "confirm-purge-bottom": "清理一版係會清除快取同埋強迫顯示最現時嘅修訂。",
        "confirm-watch-button": "好",
-       "confirm-watch-top": "å\8a å\91¢é \81å\85¥ä½ å¼µ監視清單?",
+       "confirm-watch-top": "å°\87å\91¢ä¸\80ç\89\88å\8a å\85¥ä½ å\98\85監視清單?",
        "confirm-unwatch-button": "好",
-       "confirm-unwatch-top": "å°\87å\91¢ä¸\80é \81å\96ºä½ å\98\85ç\9b£è¦\96æ¸\85å\96®ä¸­ç§»èµ°?",
+       "confirm-unwatch-top": "å\96ºä½ å\98\85ç\9b£è¦\96æ¸\85å\96®åº¦å\88ªèµ°å\91¢ä¸\80ç\89\88?",
        "confirm-rollback-button": "好",
        "comma-separator": "、",
        "word-separator": "",
        "watchlistedit-raw-done": "你嘅監視清單已經更新。",
        "watchlistedit-raw-added": "已經加入咗$1個標題:",
        "watchlistedit-raw-removed": "已經拎走咗$1個標題:",
-       "watchlistedit-clear-title": "清空監視一覽",
+       "watchlistedit-clear-title": "清空監視清單",
        "watchlistedit-clear-legend": "清空監視一覽",
+       "watchlistedit-clear-explain": "將會刪走監視清單入邊所有嘢",
        "watchlistedit-clear-titles": "標題:",
-       "watchlisttools-clear": "清空監視一覽",
+       "watchlistedit-clear-submit": "清空監視清單(永久清空!)",
+       "watchlistedit-clear-jobqueue": "清緊你嘅監視清單。可能要等一陣!",
+       "watchlisttools-clear": "清空監視清單",
        "watchlisttools-view": "睇吓有關嘅更改",
        "watchlisttools-edit": "睇吓同埋編輯監視清單",
        "watchlisttools-raw": "編輯原始監視清單",
        "feedback-submit": "遞交",
        "feedback-thanks-title": "多謝!",
        "searchsuggest-search": "搵{{SITENAME}}",
-       "searchsuggest-containing": "å\90\8då\96®å\82³é\80\81ç·\8a...",
+       "searchsuggest-containing": "å\8c\85å\90«â\80¦â\80¦",
        "api-error-unknown-warning": "未知嘅警告:$1。",
        "api-error-unknownerror": "未知嘅出錯:$1。",
        "duration-seconds": "$1 {{PLURAL:$1|秒}}",
index 5224b62..d73ef41 100644 (file)
        "returnto": "返回至$1。",
        "tagline": "来自{{SITENAME}}",
        "help": "帮助",
+       "help-mediawiki": "MediaWiki帮助",
        "search": "搜索",
        "search-ignored-headings": " #<!-- 请将此行保持原样 --> <pre>\n# 将被搜索忽略的标题。\n# 对此页面的更改会在带标题的页面被索引时产生影响。\n# 您可以通过进行空编辑来强制页面重新索引。\n# 语法如下:\n#  * 所有以“#”开头的行都是注释。\n#  * 所有非空白行都是要忽略的标题。\n参考文献\n外部链接\n参见\n #</pre> <!-- 请将此行保持原样 -->",
        "searchbutton": "搜索",
        "ipb-disableusertalk": "阻止用户在封禁期间编辑自己的讨论页",
        "ipb-change-block": "使用这些设置重新封禁用户",
        "ipb-confirm": "确认封禁",
+       "ipb-pages-label": "页面",
        "badipaddress": "无效IP地址",
        "blockipsuccesssub": "封禁成功",
        "blockipsuccesstext": "[[Special:Contributions/$1|$1]]已被封禁。<br />\n参见[[Special:BlockList|封禁列表]]以复核封禁。",
        "createaccountblock": "账户创建已禁用",
        "emailblock": "电子邮件停用",
        "blocklist-nousertalk": "不能编辑自己的讨论页",
+       "blocklist-editing": "编辑中",
        "ipblocklist-empty": "封禁列表为空。",
        "ipblocklist-no-results": "请求的IP地址或用户名没有被封禁。",
        "blocklink": "封禁",
index 9b843b1..c33c69e 100644 (file)
        "returnto": "返回「$1」頁面",
        "tagline": "出自 {{SITENAME}}",
        "help": "說明",
+       "help-mediawiki": "有關 MediaWiki 的說明",
        "search": "搜尋",
        "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# 在搜尋中要忽略的標題。\n# 更該此檔案以快速對己列入索引的頁面標題生效。\n# 您可以編輯時不變更內容以強制頁面重新索引。\n# 語法如下:\n#   * 任何以 \"#\" 字元開頭的行至結尾會做為註解。\n#   * 任何非空白行代表要忽略的標題。\n參考文獻\n外部連結\n參見\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "搜尋",
        "editpage-invalidcontentmodel-text": "不支援內容模型 \"$1\"。",
        "editpage-notsupportedcontentformat-title": "不支援此內容格式",
        "editpage-notsupportedcontentformat-text": "內容語法 $2 不支援使用 $1 格式的內容。",
+       "slot-name-main": "主頁",
        "content-model-wikitext": "Wikitext",
        "content-model-text": "純文字",
        "content-model-javascript": "JavaScript",
        "move": "移動",
        "movethispage": "移動此頁面",
        "unusedimagestext": "下列為未被任何頁面使用的檔案。\n請注意,其它網站可能直接透過 URL 連結至檔案,所以這裡列出的檔案有可能仍在使用。",
+       "unusedimagestext-categorizedimgisused": "以下為存在但尚未內嵌在任何頁面的檔案。已分類圖片就算未內嵌在任何頁面,也會被視為已使用。\n請注意其它網站可能會以直接的 URL 來連結檔案,因此儘管正被使用仍有可能會被列出。",
        "unusedcategoriestext": "下列分類沒有被其它頁面或者分類所使用。",
        "notargettitle": "無目標",
        "notargettext": "您尚未指定目標頁面或使用者以進行此項操作。",
        "pageinfo-display-title": "顯示標題",
        "pageinfo-default-sort": "預設排序方式:",
        "pageinfo-length": "頁面長度 (位元組)",
+       "pageinfo-namespace": "命名空間",
        "pageinfo-article-id": "頁面 ID",
        "pageinfo-language": "頁面內容語言",
        "pageinfo-language-change": "變更",
index 2072d7b..24ab3d2 100644 (file)
@@ -66,7 +66,7 @@ class CreateAndPromote extends Maintenance {
                        $this->fatalError( "invalid username." );
                }
 
-               $exists = ( 0 !== $user->idForName() );
+               $exists = ( $user->idForName() !== 0 );
 
                if ( $exists && !$force ) {
                        $this->fatalError( "Account exists. Perhaps you want the --force option?" );
index 210e907..f43d75f 100644 (file)
@@ -202,7 +202,7 @@ class GenerateCollationData extends Maintenance {
                // For each character with an entry in allkeys.txt, overwrite the implicit
                // entry in $this->weights that came from the UCD.
                // Also gather a list of tertiary weights, for use in selecting the group header
-               while ( false !== ( $line = fgets( $file ) ) ) {
+               while ( ( $line = fgets( $file ) ) !== false ) {
                        // We're only interested in single-character weights, pick them out with a regex
                        $line = trim( $line );
                        if ( !preg_match( '/^([0-9A-F]+)\s*;\s*([^#]*)/', $line, $m ) ) {
index d3e0655..336495a 100644 (file)
@@ -88,7 +88,7 @@ class GenerateNormalizerDataAr extends Maintenance {
                $pairs = [];
 
                $lineNum = 0;
-               while ( false !== ( $line = fgets( $file ) ) ) {
+               while ( ( $line = fgets( $file ) ) !== false ) {
                        ++$lineNum;
 
                        # Strip comments
index e81eec0..cb85a53 100644 (file)
@@ -1,3 +1,4 @@
+U+040C5䃅|U+078FE磾|
 U+04724䜤|U+09FC1鿁|
 U+04CA4䲤|U+09FD0鿐|
 U+04E07万|U+0842C萬|U+04E07万|
@@ -70,6 +71,7 @@ U+056F0困|U+056F0困|U+0774F睏|
 U+05742坂|U+05742坂|U+0962A阪|
 U+0574F坏|U+058DE壞|U+0574F坏|
 U+0575B坛|U+058C7壇|U+07F48罈|
+U+05846塆|U+058EA壪|
 U+05899墙|U+07246牆|U+058BB墻|
 U+058F3壳|U+06BBC殼|U+06BBB殻|
 U+0590D复|U+05FA9復|U+08907複|
@@ -210,7 +212,7 @@ U+0949F钟|U+0937E鍾|U+09418鐘|
 U+094A9钩|U+0920E鈎|U+09264鉤|
 U+094B5钵|U+07F3D缽|U+09262鉢|
 U+094F2铲|U+093DF鏟|U+05277剷|
-U+09508锈|U+092B9銹|U+093FD鏽|
+U+09508锈|U+093FD鏽|U+092B9銹|
 U+09510锐|U+092B3銳|U+092ED鋭|
 U+09528锨|U+06774杴|U+09341鍁|
 U+0954B镋|U+09482钂|U+093B2鎲|
@@ -300,6 +302,7 @@ U+2B6ED𫛭|U+09D5F鵟|
 U+2B7A9𫞩|U+0748A璊|
 U+2B7C5𫟅|U+07DA1綡|
 U+2B7E6𫟦|U+04875䡵|
+U+2B7F7𫟷|U+0925D鉝|
 U+2B7F9𫟹|U+09277鉷|
 U+2B7FC𫟼|U+0943D鐽|
 U+2B806𫠆|U+0980D頍|
index 0c6dbfd..31abd35 100644 (file)
@@ -21,6 +21,7 @@
 水氣 水汽
 計畫 计划
 規畫 规划
+身份 身份 #分词用
 天份 天分
 名份 名分
 職份 职分
 穿梭機      航天飞机
 網際網路   互联网
 機械人      机器人
+智慧機器人        智能机器人
 行動電話   移动电话
 流動電話   移动电话
+行動網路   移动网络
+流動網絡   移动网络
+行動支付   移动支付
+流動支付   移动支付
+行動裝置   移动设备
+流動裝置   移动设备
 數據機      调制解调器
 網域名稱   域名
+虛擬實境   虚拟现实
 葉門 也门
 貝里斯      伯利兹
 維德角      佛得角
 突尼西亞   突尼斯
 寮國 老挝
 貢寮 贡寮 #分詞用
+菁寮 菁寮 #分詞用
 蘇利南      苏里南
 奈洛比      内罗毕
 莫三比克   莫桑比克
@@ -2640,8 +2650,6 @@ A型肝炎        甲型肝炎
 數碼訊號   数字信号
 數位音樂   数字音乐
 數位化      数字化
-行動網路   移动网络
-流動網絡   移动网络
 咪高峰      麦克风
 幫浦 泵
 電單車      摩托车
@@ -2695,4 +2703,10 @@ A型肝炎       甲型肝炎
 真人騷      真人秀
 帕運會      残奥会
 帕拉林匹克        残疾人奥林匹克
-傷殘奧林匹克     残疾人奥林匹克
+卑詩省      不列颠哥伦比亚省
+丹帕沙      登巴萨
+峇里 巴厘
+史瓦帝尼   斯威士兰
+皮特肯      皮特凯恩
+安地卡      安提瓜
+撒拉威阿拉伯     阿拉伯撒哈拉
index c73c97a..1ad4540 100644 (file)
 鼓里 鼓裏
 殿里 殿裏
 队里 隊裏
+词里 詞裏
 世纪里      世紀裏
 夜晚里      夜晚裏
 参数里      參數裏
 網際網路   互聯網
 机器人      機械人
 機器人      機械人
+智慧機器人        智能機械人
 移动电话   流動電話
 行動電話   流動電話
+行動網路   流動網絡
+移动网络   流動網絡
+行動支付   流動支付
+移动支付   流動支付
+移动设备   流動裝置
+行動裝置   流動裝置
 操作系统   作業系統
 移动操作系统     流動作業系統
 行動作業系統     流動作業系統
@@ -3015,8 +3023,6 @@ IP地址  IP位址
 數位音樂   數碼音樂
 数字化      數碼化
 數位化      數碼化
-行動網路   流動網絡
-移动网络   流動網絡
 麥克風      咪高峰
 麦克风      咪高峰
 幫浦 泵
@@ -3059,5 +3065,11 @@ IP地址 IP位址
 烏龍麵      烏冬麵
 真人秀      真人騷
 帕運會      殘奧會
-帕拉林匹克        傷殘奧林匹克
-残疾人奥林匹克  傷殘奧林匹克
+帕拉林匹克        殘疾人奧林匹克
+不列颠哥伦比亚省       卑詩省
+丹帕沙      登巴薩
+巴厘岛      峇里島
+史瓦帝尼   斯威士蘭
+皮特凯恩   皮特肯
+安地卡      安提瓜
+撒拉威阿拉伯     阿拉伯撒哈拉
index 1abbf45..5ad8eeb 100644 (file)
 重覆 重复
 覆核 复核
 覆查 复查
-覆检 复检
+覆檢 复检
+覆審 复审
+候覆 候复
+待覆 待复
+盼覆 盼复
+批覆 批复
 鬱姓 鬱姓
 鬱氏 鬱氏
 夥計 伙计
 氾濫 泛滥
 近角聪信   近角聪信
 米泽瑠美   米泽瑠美
-候覆 候复
-待覆 待复
-批覆 批复
 矇眬 矇眬
 荠苧 荠苧
 噁心 恶心
 獨鍾 独钟
 鍾靈 钟灵
 龍鍾 龙钟
+鍾祥 钟祥
 薰心 熏心
 薰習 熏习
 薰陶 熏陶
 造麴 造曲
 大麴 大曲
 黃麴毒素   黄曲毒素
-硃砂 朱砂
-硃紅 朱红
-硃色 朱色
-銀硃 银朱
+硃山湖      硃山湖
 遶境 绕境
 侷促 局促
 侷限 局限
index 91fe87a..28055e1 100644 (file)
 因特网      網際網路
 互聯網      網際網路
 互聯網絡   網際網路
-机器人      機器人
 機械人      機器人
+智能机器人        智慧機器人
+智能機械人        智慧機器人
 移动电话   行動電話
 流動電話   行動電話
+移动网络   行動網路
+流動網絡   行動網路
+移动支付   行動支付
+流動支付   行動支付
+移动设备   行動裝置
+流動裝置   行動裝置
 调制解调器        數據機
 調制解調器        數據機
 短信 簡訊
+虚拟现实   虛擬實境
 乍得 查德
 也门 葉門
 也門 葉門
 希拉里      希拉蕊
 希拉莉      希拉蕊
 希拉克      席哈克
+希拉克略   希拉克略
 尼克松      尼克森
 威廉姆斯   威廉士
 多普勒      都卜勒
@@ -755,8 +764,6 @@ IP地址    IP位址
 數碼音樂   數位音樂
 数字化      數位化
 數碼化      數位化
-移动网络   行動網路
-流動網絡   行動網路
 网络游戏   網路遊戲
 網絡遊戲   網路遊戲
 电脑网络   電腦網路
@@ -799,4 +806,12 @@ IP地址   IP位址
 残奥会      帕運會
 殘奧會      帕運會
 残疾人奥林匹克  帕拉林匹克
-傷殘奧林匹克     帕拉林匹克
+不列颠哥伦比亚省       卑詩省
+登巴萨      丹帕沙
+登巴薩      丹帕沙
+巴厘岛      峇里島
+斯威士兰   史瓦帝尼
+斯威士蘭   史瓦帝尼
+皮特凯恩   皮特肯
+安提瓜      安地卡
+阿拉伯撒哈拉     撒拉威阿拉伯
index 6a30724..5bfe18f 100644 (file)
 府干擾      府干擾
 頁面 頁面
 面條目      面條目
+面包圍      面包圍
+面包裝      面包裝
 黃鈺筑      黃鈺筑
 答复 答覆
 反复 反覆
 反反复复   反反覆覆
 候复 候覆
 待复 待覆
+盼复 盼覆
 批复 批覆
 复信 覆信
 复核 覆核
+复审 覆審
 的回复      的回覆
 回复中      回覆中
 回复说      回覆說
 泸州大曲   瀘州大麯 #商標名
 洋河大曲   洋河大麯
 沟大曲      溝大麯
-朱砂 硃砂
-银朱 銀硃
+朱卷 硃卷
 喲喂 喲喂
 鳥栖 鳥栖
 澄江县      澂江縣 #以下為含異體字地名
index 3be11d4..7206924 100644 (file)
@@ -157,6 +157,7 @@ U+058B0墰|U+0575B坛|
 U+058BB墻|U+05899墙|
 U+058CE壎|U+057D9埙|
 U+058DC壜|U+0575B坛|
+U+058EA壪|U+05846塆|
 U+058FB壻|U+05A7F婿|
 U+05918夘|U+0536F卯|
 U+05925夥|U+04F19伙|U+05925夥|
@@ -451,9 +452,11 @@ U+077C1矁|U+07785瞅|
 U+077C7矇|U+08499蒙|U+077C7矇|
 U+077D9矙|U+077B0瞰|
 U+07832砲|U+070AE炮|
+U+07843硃|U+06731朱|
 U+07881碁|U+068CB棋|
 U+078AA碪|U+07827砧|
 U+078DF磟|U+0788C碌|
+U+078FE磾|U+040C5䃅|
 U+07906礆|U+078B1碱|
 U+07910礐|U+2C488𬒈|
 U+0792E礮|U+070AE炮|
@@ -748,6 +751,7 @@ U+0920E鈎|U+094A9钩|
 U+09244鉄|U+094C1铁|
 U+09246鉆|U+094BB钻|
 U+0924A鉊|U+2CB3F𬬿|
+U+0925D鉝|U+2B7F7𫟷|
 U+09262鉢|U+094B5钵|
 U+09265鉥|U+2CB38𬬸|
 U+09267鉧|U+2CB41𬭁|
@@ -756,6 +760,7 @@ U+09277鉷|U+2B7F9𫟹|
 U+09288銈|U+2B4EF𫓯|
 U+092B2銲|U+0710A焊|
 U+092B6銶|U+28C47𨱇|
+U+092B9銹|U+09508锈|
 U+092D0鋐|U+2CB4E𬭎|
 U+092D7鋗|U+2B4F6𫓶|
 U+092ED鋭|U+09510锐|
index e624e40..327f8f3 100644 (file)
 董氏封髮
 胎髮
 禿妃之髮
-捉髮
 綠髮
-括髮
 髡髮
 鵠髮
 解髮佯狂
 心細如髮
 祝髮
 擢髮
-齒髮
 齒危髮秀
 沖冠髮怒
 甩髮
 穀城縣
 穀氨
 穀胱
+穀茬
 颳雪
 广部
 亂鬨鬨
 曆局
 授時曆
 顓頊曆
+儒略曆
+伊斯蘭曆
+佛曆
 共和歷史
 厤物之意
 爰定祥厤
 瀰山遍野
 瀰瀰
 冷麵
+冷面笑匠
+冷面殺手
+冷面天使
 撈麵
 煮麵
 炆麵
 樸鈍
 樸直
 見素抱樸
+樸茨茅斯
 掣籤
 標籤
 書籤
 幹這
 幹仗
 包幹
+幹過
 李連杰
 周杰
 杰倫
 債纍纍
 果纍纍
 實纍纍
-儒略曆
-伊斯蘭曆
 酒麴
 澹臺
 拜託
 泳氣鐘
 電子鐘
 電子鐘錶
-石英鐘錶
 石英鐘
-鐘錶王
+石英鐘錶
 鐘律
 看鐘
 看錶
 對準鐘
 對準鐘錶
 對準錶
-鐘錶快
-鐘快
-錶快
-鐘錶慢
-鐘慢
-錶慢
 響鐘
 鐘敲
 世紀鐘錶
 萬年曆錶
 個鐘
 個鐘錶
-喜歡鐘
-喜歡鐘錶
-喜歡錶
 大鐘
 佛鐘
 鐘壁
 南屏晚鐘
 敲鐘
 警報鐘
-猶如鐘
-猶如鐘錶
-猶如錶
 舊鐘錶
 繁鐘
 四面鐘
 更鐘
 警示鐘
 鐘差
-任何鐘錶
-任何鐘
 手錶
 選手表現
 選手表達
 角落發
 村落發
 蛇髮女妖
-畢生發展
 對華發
 尸魂界
 樹樑
 好斗膽
 好斗蓬
 墨斗
+雄斗斗
+科斗
+斗牛星
+斗法會
 小几
 尸利
 尸祿
 捉奸細
 捉奸賊
 敢情欲
-敢斗了膽
 敲扑
 望了望
 桌几
 金表面
 長几
 隆准許
-雄斗斗
 裡面包
 表面包
 外面包
 宜云
 貴价
 郁郁菲菲
-生發生
 必須
 須根據
 ·范
 註裡
 殿裡
 隊裡
+詞裡
 裏白 #植物常用名
 烏蘇里 #分詞用
-首發
 夸脫
 風采
 代碼表
 電碼表
 碼碼表
 碼表示
-科斗
 灕水
 這只不
 這只容
 于江震
 于洪區
 于浩威
-于海洋
 于湘蘭
 于特森
 于玉立
 于欣
 于少保
 于海
+於海洋
 於海邊
 於海上
 於海拔
+於海平面
 於山東
 於山西
 于凌辰
 於震前
 於震後
 於震中
+由於 #分詞用
 固定制
 划船
 划不來
 余力為
 葉叶琴
 幾個
+首發
 併發症
 併發重症
 併發模式
 髮披肩
 髮及腰
 飄髮自由女神
+生髮液
+生髮油
+生髮藥
+生髮水
+生髮劑
+頭亂髮
 後天
 學家
 游離
 說不準
 對不準
 量不準
+拿不準
 準不準
 音不準
 預報不準
 蕩氣
 木籤
 薝蔔
-斗牛星
 告劄
 點劄
 嚮慕
 十出擊
 十出家
 十出祁山
-0齣
-0出現
-0出線
+0齣
+0齣。
+0齣電影
 這齣
 這出現
 這出乎
 繫上。
 繫舟
 繫膜
-亂發生
-亂發脾氣
 秀發村
 秀發動
 秀發表
 簡短發
 短發生
 頭發現
+頭發展
+頭發動
+頭發生
 蛋白發
 發狀態
 發狀況
 染發生
+發表 #分詞用
+理發表
+理發現
+理發展
+理發動
+理發生
+護發展
+素發現
+素發生
+絲發現
+絲發生
+斷發現
+胎發展
+胎發育
+胎發生
+結發育
+結發表
 古人有云
 昔人有云
 云敞
 崑岡
 西崑
 蘇崑
+銹病
+嚐糞
index 74298cb..04319b3 100644 (file)
@@ -81,7 +81,7 @@ class PruneFileCache extends Maintenance {
        protected function prune_directory( $dir, $report = false ) {
                $tsNow = time();
                $dirHandle = opendir( $dir );
-               while ( false !== ( $file = readdir( $dirHandle ) ) ) {
+               while ( ( $file = readdir( $dirHandle ) ) !== false ) {
                        // Skip ".", "..", and also any dirs or files like ".svn" or ".htaccess"
                        if ( $file[0] != "." ) {
                                $path = $dir . '/' . $file; // absolute
index 1f89426..cf398ff 100644 (file)
@@ -113,7 +113,7 @@ class RebuildFileCache extends Maintenance {
                                $rebuilt = false;
 
                                $title = Title::makeTitleSafe( $row->page_namespace, $row->page_title );
-                               if ( null == $title ) {
+                               if ( $title === null ) {
                                        $this->output( "Page {$row->page_id} has bad title\n" );
                                        continue; // broken title?
                                }
index a9b9b9e..260ca98 100644 (file)
@@ -184,8 +184,8 @@ class CompressOld extends Maintenance {
         * @return bool
         */
        private function compressPage( $row, $extdb ) {
-               if ( false !== strpos( $row->old_flags, 'gzip' )
-                       || false !== strpos( $row->old_flags, 'object' )
+               if ( strpos( $row->old_flags, 'gzip' ) !== false
+                       || strpos( $row->old_flags, 'object' ) !== false
                ) {
                        # print "Already compressed row {$row->old_id}\n";
                        return false;
index d12f89d..317385d 100644 (file)
@@ -1181,6 +1181,7 @@ return [
                        'jquery.suggestions',
                        'jquery.getAttrs',
                        'mediawiki.api',
+                       'user.options',
                ],
        ],
        'mediawiki.storage' => [
@@ -1786,6 +1787,7 @@ return [
                        'mediawiki.jqueryMsg',
                        'mediawiki.Uri',
                        'mediawiki.user',
+                       'user.options',
                ],
                'messages' => [
                        'quotation-marks',
index 275e96a..fb81dd8 100644 (file)
                // date picker is open will cause the date picker to remain visible (but non-functional), but
                // not replacing the interface while the user is working with it is probably a good idea anyway.
                startReady = whenBlurred( $( '#mw-date-start .oo-ui-inputWidget-input' ) ).then( function () {
-                       return mw.widgets.DateInputWidget.static.infuse( 'mw-date-start' );
+                       return mw.widgets.DateInputWidget.static.infuse( $( '#mw-date-start' ) );
                } );
                endReady = whenBlurred( $( '#mw-date-end .oo-ui-inputWidget-input' ) ).then( function () {
-                       return mw.widgets.DateInputWidget.static.infuse( 'mw-date-end' );
+                       return mw.widgets.DateInputWidget.static.infuse( $( '#mw-date-end' ) );
                } );
 
                $.when( startReady, endReady ).then( function ( startInput, endInput ) {
index 589182a..8b70e1f 100644 (file)
@@ -4,8 +4,8 @@
 ( function () {
        $( function () {
                // Select the 'Language select' option if user is trying to select language
-               OO.ui.infuse( 'mw-pl-languageselector' ).on( 'change', function () {
-                       OO.ui.infuse( 'mw-pl-options' ).setValue( '2' );
+               OO.ui.infuse( $( '#mw-pl-languageselector' ) ).on( 'change', function () {
+                       OO.ui.infuse( $( '#mw-pl-options' ) ).setValue( '2' );
                } );
        } );
 }() );
index f0bc495..03ba0d2 100644 (file)
@@ -33,7 +33,7 @@
 
                // Change the header search links to what user entered
                $headerLinks = $( '.search-types a' );
-               searchWidget = OO.ui.infuse( 'searchText' );
+               searchWidget = OO.ui.infuse( $( '#searchText' ) );
                updateHeaderLinks = function ( value ) {
                        $headerLinks.each( function () {
                                var parts = $( this ).attr( 'href' ).split( 'search=' ),
index 8a11b4c..307bbb6 100644 (file)
@@ -155,7 +155,7 @@ class TestFileReader {
        }
 
        private function execute() {
-               while ( false !== ( $line = fgets( $this->fh ) ) ) {
+               while ( ( $line = fgets( $this->fh ) ) !== false ) {
                        $this->lineNum++;
                        $matches = [];
 
index 7ee800a..20689d6 100644 (file)
@@ -565,9 +565,9 @@ class RevisionTest extends MediaWikiTestCase {
                $row = new stdClass;
                $row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
                $row->old_flags = Revision::compressRevisionText( $row->old_text );
-               $this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ),
+               $this->assertTrue( strpos( $row->old_flags, 'utf-8' ) !== false,
                        "Flags should contain 'utf-8'" );
-               $this->assertFalse( false !== strpos( $row->old_flags, 'gzip' ),
+               $this->assertFalse( strpos( $row->old_flags, 'gzip' ) !== false,
                        "Flags should not contain 'gzip'" );
                $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
                        $row->old_text, "Direct check" );
@@ -588,9 +588,9 @@ class RevisionTest extends MediaWikiTestCase {
                $row = new stdClass;
                $row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
                $row->old_flags = Revision::compressRevisionText( $row->old_text );
-               $this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ),
+               $this->assertTrue( strpos( $row->old_flags, 'utf-8' ) !== false,
                        "Flags should contain 'utf-8'" );
-               $this->assertTrue( false !== strpos( $row->old_flags, 'gzip' ),
+               $this->assertTrue( strpos( $row->old_flags, 'gzip' ) !== false,
                        "Flags should contain 'gzip'" );
                $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
                        gzinflate( $row->old_text ), "Direct check" );
index a40f09c..5506940 100644 (file)
@@ -184,9 +184,9 @@ class SqlBlobStoreTest extends MediaWikiTestCase {
                $row = new stdClass;
                $row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
                $row->old_flags = $store->compressData( $row->old_text );
-               $this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ),
+               $this->assertTrue( strpos( $row->old_flags, 'utf-8' ) !== false,
                        "Flags should contain 'utf-8'" );
-               $this->assertFalse( false !== strpos( $row->old_flags, 'gzip' ),
+               $this->assertFalse( strpos( $row->old_flags, 'gzip' ) !== false,
                        "Flags should not contain 'gzip'" );
                $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
                        $row->old_text, "Direct check" );
@@ -202,9 +202,9 @@ class SqlBlobStoreTest extends MediaWikiTestCase {
                $row = new stdClass;
                $row->old_text = "Wiki est l'\xc3\xa9cole superieur !";
                $row->old_flags = $store->compressData( $row->old_text );
-               $this->assertTrue( false !== strpos( $row->old_flags, 'utf-8' ),
+               $this->assertTrue( strpos( $row->old_flags, 'utf-8' ) !== false,
                        "Flags should contain 'utf-8'" );
-               $this->assertTrue( false !== strpos( $row->old_flags, 'gzip' ),
+               $this->assertTrue( strpos( $row->old_flags, 'gzip' ) !== false,
                        "Flags should contain 'gzip'" );
                $this->assertEquals( "Wiki est l'\xc3\xa9cole superieur !",
                        gzinflate( $row->old_text ), "Direct check" );
index 3709c21..e8cd342 100644 (file)
@@ -801,6 +801,30 @@ class ApiComparePagesTest extends ApiTestCase {
                                [],
                                'nosuchrevid',
                        ],
+                       'Error, deleted revision ID and torelative=prev' => [
+                               [
+                                       'fromrev' => '{{REPL:revC2}}',
+                                       'torelative' => 'prev',
+                               ],
+                               [],
+                               'compare-relative-to-deleted', true
+                       ],
+                       'Error, deleted revision ID and torelative=next' => [
+                               [
+                                       'fromrev' => '{{REPL:revC2}}',
+                                       'torelative' => 'next',
+                               ],
+                               [],
+                               'compare-relative-to-deleted', true
+                       ],
+                       'Deleted revision ID and torelative=cur' => [
+                               [
+                                       'fromrev' => '{{REPL:revC2}}',
+                                       'torelative' => 'cur',
+                               ],
+                               [],
+                               'nosuchrevid', true
+                       ],
                        'Error, revision-deleted content' => [
                                [
                                        'fromrev' => '{{REPL:revA2}}',
diff --git a/tests/phpunit/includes/debug/logger/monolog/CeeFormatterTest.php b/tests/phpunit/includes/debug/logger/monolog/CeeFormatterTest.php
new file mode 100644 (file)
index 0000000..7d0c839
--- /dev/null
@@ -0,0 +1,17 @@
+<?php
+
+namespace MediaWiki\Logger\Monolog;
+
+/**
+ * @covers \MediaWiki\Logger\Monolog\CeeFormatter
+ */
+class CeeFormatterTest extends \PHPUnit\Framework\TestCase {
+       public function testV1() {
+               $ls_formatter = new LogstashFormatter( 'app', 'system', null, 'ctx_', LogstashFormatter::V1 );
+               $cee_formatter = new CeeFormatter( 'app', 'system', null, 'ctx_', LogstashFormatter::V1 );
+               $record = [ 'extra' => [ 'url' => 1 ], 'context' => [ 'url' => 2 ] ];
+               $this->assertSame(
+                       $cee_formatter->format( $record ),
+                       "@cee: " . $ls_formatter->format( $record ) );
+       }
+}
index cd24be4..ac7ef80 100644 (file)
@@ -1,5 +1,9 @@
 <?php
 
+use GuzzleHttp\Handler\MockHandler;
+use GuzzleHttp\HandlerStack;
+use GuzzleHttp\Psr7\Response;
+
 /**
  * @group Http
  * @group small
@@ -503,6 +507,18 @@ class HttpTest extends MediaWikiTestCase {
 
                $this->assertTrue( defined( $value ), $value . ' not defined' );
        }
+
+       /**
+        * No actual request is made herein
+        */
+       public function testGuzzleHttpRequest() {
+               $handler = HandlerStack::create( new MockHandler( [ new Response( 200 ) ] ) );
+               $r = new GuzzleHttpRequest( 'http://www.example.text', [ 'handler' => $handler ] );
+               $r->execute();
+               $this->assertEquals( 200, $r->getStatus() );
+
+               // @TODO: add failure tests (404s and failure to connect)
+       }
 }
 
 /**
@@ -513,13 +529,15 @@ class MWHttpRequestTester extends MWHttpRequest {
        // returns appropriate tester class here
        public static function factory( $url, array $options = null, $caller = __METHOD__ ) {
                if ( !Http::$httpEngine ) {
-                       Http::$httpEngine = function_exists( 'curl_init' ) ? 'curl' : 'php';
+                       Http::$httpEngine = 'guzzle';
                } elseif ( Http::$httpEngine == 'curl' && !function_exists( 'curl_init' ) ) {
                        throw new DomainException( __METHOD__ . ': curl (https://secure.php.net/curl) is not ' .
                                'installed, but Http::$httpEngine is set to "curl"' );
                }
 
                switch ( Http::$httpEngine ) {
+                       case 'guzzle':
+                               return new GuzzleHttpRequestTester( $url, $options, $caller );
                        case 'curl':
                                return new CurlHttpRequestTester( $url, $options, $caller );
                        case 'php':
@@ -535,6 +553,12 @@ class MWHttpRequestTester extends MWHttpRequest {
        }
 }
 
+class GuzzleHttpRequestTester extends GuzzleHttpRequest {
+       function setRespHeaders( $name, $value ) {
+               $this->respHeaders[$name] = $value;
+       }
+}
+
 class CurlHttpRequestTester extends CurlHttpRequest {
        function setRespHeaders( $name, $value ) {
                $this->respHeaders[$name] = $value;
index 26a0672..774e023 100644 (file)
@@ -21,7 +21,7 @@ class SearchResultSetTest extends MediaWikiTestCase {
                $this->hideDeprecated( 'SearchResultSet::next' );
                $resultSet->rewind();
                $count = 0;
-               while ( false !== ( $iterResult = $resultSet->next() ) ) {
+               while ( ( $iterResult = $resultSet->next() ) !== false ) {
                        $this->assertEquals( $result, $iterResult );
                        $count++;
                }
index b8cee67..584b141 100644 (file)
@@ -116,7 +116,7 @@ class ChangesListSpecialPageTest extends AbstractChangesListSpecialPageTestCase
 
        /** return false if condition begins with 'rc_timestamp ' */
        private static function filterOutRcTimestampCondition( $var ) {
-               return ( is_array( $var ) || false === strpos( $var, 'rc_timestamp ' ) );
+               return ( is_array( $var ) || strpos( $var, 'rc_timestamp ' ) === false );
        }
 
        public function testRcNsFilter() {
index 080c6e4..40fe1e3 100644 (file)
@@ -380,6 +380,63 @@ class SpecialBlockTest extends SpecialPageTestBase {
                $this->assertSame( 0, $count );
        }
 
+       /**
+        * @dataProvider provideCheckUnblockSelf
+        * @covers ::checkUnblockSelf
+        */
+       public function testCheckUnblockSelf(
+               $blockedUser,
+               $blockPerformer,
+               $adjustPerformer,
+               $adjustTarget,
+               $expectedResult,
+               $reason
+       ) {
+               $this->setGroupPermissions( 'sysop', 'unblockself', true );
+               $this->setGroupPermissions( 'user', 'block', true );
+               // Getting errors about creating users in db in provider.
+               // Need to use mutable to ensure different named testusers.
+               $users = [
+                       'u1' => TestUserRegistry::getMutableTestUser( __CLASS__, 'sysop' )->getUser(),
+                       'u2' => TestUserRegistry::getMutableTestUser( __CLASS__, 'sysop' )->getUser(),
+                       'u3' => TestUserRegistry::getMutableTestUser( __CLASS__, 'sysop' )->getUser(),
+                       'u4' => TestUserRegistry::getMutableTestUser( __CLASS__, 'sysop' )->getUser(),
+                       'nonsysop' => $this->getTestUser()->getUser()
+               ];
+               foreach ( [ 'blockedUser', 'blockPerformer', 'adjustPerformer', 'adjustTarget' ] as $var ) {
+                       $$var = $users[$$var];
+               }
+
+               $block = new \Block( [
+                       'address' => $blockedUser->getName(),
+                       'user' => $blockedUser->getId(),
+                       'by' => $blockPerformer->getId(),
+                       'expiry' => 'infinity',
+                       'sitewide' => 1,
+                       'enableAutoblock' => true,
+               ] );
+
+               $block->insert();
+
+               $this->assertSame(
+                       SpecialBlock::checkUnblockSelf( $adjustTarget, $adjustPerformer ),
+                       $expectedResult,
+                       $reason
+               );
+       }
+
+       public function provideCheckUnblockSelf() {
+               // 'blockedUser', 'blockPerformer', 'adjustPerformer', 'adjustTarget'
+               return [
+                       [ 'u1', 'u2', 'u3', 'u4', true, 'Unrelated users' ],
+                       [ 'u1', 'u2', 'u1', 'u4', 'ipbblocked', 'Block unrelated while blocked' ],
+                       [ 'u1', 'u2', 'u1', 'u1', true, 'Has unblockself' ],
+                       [ 'nonsysop', 'u2', 'nonsysop', 'nonsysop', 'ipbnounblockself', 'no unblockself' ],
+                       [ 'nonsysop', 'nonsysop', 'nonsysop', 'nonsysop', true, 'no unblockself but can de-selfblock' ],
+                       [ 'u1', 'u2', 'u1', 'u2', true, 'Can block user who blocked' ],
+               ];
+       }
+
        protected function insertBlock() {
                $badActor = $this->getTestUser()->getUser();
                $sysop = $this->getTestSysop()->getUser();
index cc0f263..77461c5 100644 (file)
@@ -86,7 +86,7 @@ class ParserTestTopLevelSuite extends PHPUnit_Framework_TestSuite {
                # Filter out .txt files
                $files = ParserTestRunner::getParserTestFiles();
                foreach ( $files as $extName => $parserTestFile ) {
-                       $isCore = ( 0 === strpos( $parserTestFile, $mwTestDir ) );
+                       $isCore = ( strpos( $parserTestFile, $mwTestDir ) === 0 );
 
                        if ( $isCore && $wantsCore ) {
                                self::debug( "included core parser tests: $parserTestFile" );
index 8bc7dc6..f04f217 100644 (file)
@@ -3,14 +3,22 @@ const Page = require( 'wdio-mediawiki/Page' ),
 
 class EditPage extends Page {
        get content() { return browser.element( '#wpTextbox1' ); }
-       get displayedContent() { return browser.element( '#mw-content-text' ); }
+       get conflictingContent() { return browser.element( '#wpTextbox2' ); }
+       get displayedContent() { return browser.element( '#mw-content-text .mw-parser-output' ); }
        get heading() { return browser.element( '#firstHeading' ); }
        get save() { return browser.element( '#wpSave' ); }
+       get previewButton() { return browser.element( '#wpPreview' ); }
 
        openForEditing( title ) {
                super.openTitle( title, { action: 'edit' } );
        }
 
+       preview( name, content ) {
+               this.openForEditing( name );
+               this.content.setValue( content );
+               this.previewButton.click();
+       }
+
        edit( name, content ) {
                this.openForEditing( name );
                this.content.setValue( content );
index 124279c..3b24298 100644 (file)
@@ -24,6 +24,20 @@ describe( 'Page', function () {
                name = Util.getTestString( 'BeforeEach-name-' );
        } );
 
+       it( 'should be previewable', function () {
+               EditPage.preview( name, content );
+
+               assert.strictEqual( EditPage.heading.getText(), 'Creating ' + name );
+               assert.strictEqual( EditPage.displayedContent.getText(), content );
+               assert( EditPage.content.isVisible(), 'editor is still present' );
+               assert( !EditPage.conflictingContent.isVisible(), 'no edit conflict happened' );
+               // provoke and dismiss reload warning due to unsaved content
+               browser.url( 'data:text/html,Done' );
+               try {
+                       browser.alertAccept();
+               } catch ( e ) {}
+       } );
+
        it( 'should be creatable', function () {
                // create
                EditPage.edit( name, content );