Merge "Add Parser to MediaWikiServices"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Fri, 28 Oct 2016 17:53:30 +0000 (17:53 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Fri, 28 Oct 2016 17:53:30 +0000 (17:53 +0000)
267 files changed:
.gitreview
.travis.yml
RELEASE-NOTES-1.28
RELEASE-NOTES-1.29 [new file with mode: 0644]
autoload.php
composer.json
docs/extension.schema.json
docs/extension.schema.v1.json
includes/DefaultSettings.php
includes/EditPage.php
includes/GlobalFunctions.php
includes/MediaWikiServices.php
includes/MovePage.php
includes/OutputPage.php
includes/PHPVersionCheck.php
includes/Revision.php
includes/ServiceWiring.php
includes/Status.php
includes/Title.php
includes/actions/InfoAction.php
includes/api/ApiPurge.php
includes/api/ApiQueryTags.php
includes/api/ApiStashEdit.php
includes/api/i18n/bn.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/es.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/it.json
includes/api/i18n/ja.json
includes/api/i18n/ka.json [new file with mode: 0644]
includes/api/i18n/ko.json
includes/api/i18n/mr.json
includes/api/i18n/nso.json [new file with mode: 0644]
includes/api/i18n/pl.json
includes/api/i18n/pt.json
includes/api/i18n/ru.json
includes/api/i18n/uk.json
includes/api/i18n/zh-hans.json
includes/api/i18n/zu.json [new file with mode: 0644]
includes/auth/AuthManager.php
includes/cache/MessageCache.php
includes/changetags/ChangeTags.php
includes/collation/NumericUppercaseCollation.php
includes/config/HashConfig.php
includes/context/RequestContext.php
includes/deferred/LinksDeletionUpdate.php
includes/deferred/LinksUpdate.php
includes/exception/MWExceptionHandler.php
includes/exception/PermissionsError.php
includes/filerepo/file/LocalFile.php
includes/htmlform/HTMLForm.php
includes/htmlform/fields/HTMLMultiSelectField.php
includes/htmlform/fields/HTMLSizeFilterField.php [new file with mode: 0644]
includes/installer/DatabaseUpdater.php
includes/installer/PostgresInstaller.php
includes/installer/i18n/bn.json
includes/installer/i18n/cs.json
includes/installer/i18n/de.json
includes/installer/i18n/en.json
includes/installer/i18n/es.json
includes/installer/i18n/fr.json
includes/installer/i18n/gl.json
includes/installer/i18n/he.json
includes/installer/i18n/hu.json
includes/installer/i18n/inh.json
includes/installer/i18n/it.json
includes/installer/i18n/ko.json
includes/installer/i18n/lb.json
includes/installer/i18n/lt.json
includes/installer/i18n/ne.json
includes/installer/i18n/pl.json
includes/installer/i18n/pt.json
includes/installer/i18n/ru.json
includes/installer/i18n/sr-ec.json
includes/installer/i18n/sr-el.json
includes/installer/i18n/uk.json
includes/installer/i18n/zh-hans.json
includes/interwiki/InterwikiLookupAdapter.php [new file with mode: 0644]
includes/jobqueue/JobQueueDB.php
includes/jobqueue/JobRunner.php
includes/jobqueue/jobs/AssembleUploadChunksJob.php
includes/jobqueue/jobs/PublishStashedFileJob.php
includes/libs/CryptHKDF.php [new file with mode: 0644]
includes/libs/StatusValue.php
includes/libs/composer/ComposerJson.php
includes/libs/composer/ComposerLock.php
includes/libs/filebackend/FSFile.php [deleted file]
includes/libs/filebackend/FileBackend.php
includes/libs/filebackend/FileBackendStore.php
includes/libs/filebackend/TempFSFile.php [deleted file]
includes/libs/filebackend/fsfile/FSFile.php [new file with mode: 0644]
includes/libs/filebackend/fsfile/TempFSFile.php [new file with mode: 0644]
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/DatabaseMysqlBase.php
includes/libs/rdbms/database/DatabaseMysqli.php
includes/libs/rdbms/database/DatabasePostgres.php
includes/libs/rdbms/database/DatabaseSqlite.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/lbfactory/ILBFactory.php
includes/libs/rdbms/lbfactory/LBFactory.php
includes/libs/rdbms/lbfactory/LBFactoryMulti.php
includes/libs/rdbms/lbfactory/LBFactorySimple.php
includes/libs/rdbms/lbfactory/LBFactorySingle.php
includes/libs/rdbms/loadbalancer/LoadBalancer.php
includes/libs/rdbms/loadbalancer/LoadBalancerSingle.php
includes/libs/rdbms/loadmonitor/LoadMonitor.php
includes/libs/xmp/XMP.php
includes/media/JpegMetadataExtractor.php
includes/media/SVG.php
includes/objectcache/ObjectCache.php
includes/page/Article.php
includes/page/CategoryPage.php
includes/page/WikiPage.php
includes/parser/CoreParserFunctions.php
includes/parser/Parser.php
includes/parser/ParserOptions.php
includes/profiler/Profiler.php
includes/registration/ExtensionProcessor.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoaderFileModule.php
includes/resourceloader/ResourceLoaderLanguageDataModule.php
includes/resourceloader/ResourceLoaderModule.php
includes/resourceloader/ResourceLoaderWikiModule.php
includes/session/PHPSessionHandler.php
includes/session/Session.php
includes/session/SessionBackend.php
includes/session/SessionManager.php
includes/specialpage/FormSpecialPage.php
includes/specials/SpecialBlockList.php
includes/specials/SpecialContributions.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialTags.php
includes/specials/pagers/NewPagesPager.php
includes/upload/UploadBase.php
includes/user/User.php
includes/utils/BatchRowIterator.php
includes/utils/MWCryptHKDF.php
languages/Language.php
languages/LanguageConverter.php
languages/classes/LanguageRu.php
languages/classes/data/grammar.ru.json [deleted file]
languages/data/grammarTransformations/ru.json [new file with mode: 0644]
languages/i18n/ar.json
languages/i18n/as.json
languages/i18n/ast.json
languages/i18n/ba.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/bqi.json
languages/i18n/bs.json
languages/i18n/ca.json
languages/i18n/cdo.json
languages/i18n/cs.json
languages/i18n/cy.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/en.json
languages/i18n/eo.json
languages/i18n/es.json
languages/i18n/et.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/ga.json
languages/i18n/gl.json
languages/i18n/gu.json
languages/i18n/hak.json
languages/i18n/he.json
languages/i18n/hi.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/is.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/ka.json
languages/i18n/kk-cyrl.json
languages/i18n/kn.json
languages/i18n/ko.json
languages/i18n/ku-latn.json
languages/i18n/la.json
languages/i18n/lb.json
languages/i18n/lij.json
languages/i18n/lt.json
languages/i18n/lv.json
languages/i18n/mai.json
languages/i18n/mk.json
languages/i18n/mr.json
languages/i18n/nah.json
languages/i18n/nan.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/nso.json
languages/i18n/pl.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/qu.json
languages/i18n/ro.json
languages/i18n/ru.json
languages/i18n/sd.json
languages/i18n/shn.json
languages/i18n/sk.json
languages/i18n/sl.json
languages/i18n/so.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/sv.json
languages/i18n/te.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tyv.json
languages/i18n/udm.json
languages/i18n/uk.json
languages/i18n/yo.json
languages/i18n/yue.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/Maintenance.php
maintenance/checkComposerLockUpToDate.php
maintenance/doMaintenance.php
maintenance/jsduck/categories.json
maintenance/update.php
resources/src/mediawiki.language/languages/ru.js
resources/src/mediawiki.skinning/content.css
resources/src/mediawiki.skinning/elements.css
resources/src/mediawiki/htmlform/multiselect.js
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.storage.js
resources/src/mediawiki/mediawiki.user.js
resources/src/mediawiki/page/gallery.css
tests/parser/ParserTestRunner.php
tests/parser/fuzzTest.php
tests/phpunit/data/upload/buggynamespace-bad.svg [new file with mode: 0644]
tests/phpunit/data/upload/buggynamespace-evilhtml.svg [new file with mode: 0644]
tests/phpunit/data/upload/buggynamespace-okay.svg [new file with mode: 0644]
tests/phpunit/data/upload/buggynamespace-okay2.svg [new file with mode: 0644]
tests/phpunit/data/upload/buggynamespace-original.svg [new file with mode: 0644]
tests/phpunit/includes/MediaWikiServicesTest.php
tests/phpunit/includes/WatchedItemStoreUnitTest.php
tests/phpunit/includes/auth/AuthManagerTest.php
tests/phpunit/includes/auth/CheckBlocksSecondaryAuthenticationProviderTest.php
tests/phpunit/includes/auth/TemporaryPasswordPrimaryAuthenticationProviderTest.php
tests/phpunit/includes/changes/RecentChangeTest.php
tests/phpunit/includes/interwiki/InterwikiLookupAdapterTest.php [new file with mode: 0644]
tests/phpunit/includes/libs/composer/ComposerJsonTest.php
tests/phpunit/includes/libs/composer/ComposerLockTest.php
tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php
tests/phpunit/includes/page/WikiCategoryPageTest.php
tests/phpunit/includes/parser/ParserIntegrationTest.php
tests/phpunit/includes/registration/ExtensionRegistryTest.php
tests/phpunit/includes/resourceloader/ResourceLoaderWikiModuleTest.php
tests/phpunit/includes/session/PHPSessionHandlerTest.php
tests/phpunit/includes/session/SessionBackendTest.php
tests/phpunit/includes/session/SessionManagerTest.php
tests/phpunit/includes/session/TestUtils.php
tests/phpunit/includes/specialpage/SpecialPageFactoryTest.php
tests/phpunit/includes/upload/UploadBaseTest.php
tests/phpunit/includes/user/BotPasswordTest.php
tests/phpunit/suites/ParserTestTopLevelSuite.php
tests/qunit/data/testrunner.js
tests/qunit/suites/resources/mediawiki/mediawiki.loader.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.user.test.js

index 0ec44b8..148be02 100644 (file)
@@ -2,5 +2,5 @@
 host=gerrit.wikimedia.org
 port=29418
 project=mediawiki/core.git
-defaultbranch=master
+track=1
 defaultrebase=0
index 9062194..9738605 100644 (file)
@@ -55,7 +55,6 @@ notifications:
   email: false
   irc:
     channels:
-      - "chat.freenode.net#mediawiki-core"
       - "chat.freenode.net#mediawiki-feed"
     on_success: change
     on_failure: change
index 75fc139..a2a986f 100644 (file)
@@ -223,12 +223,16 @@ changes to languages because of Phabricator reports.
   Instead of --keep-uploads, use the same option to parserTests.php, but you
   must specify a directory with --upload-dir.
 * The 'jquery.arrowSteps' ResourceLoader module is now deprecated.
+* (T62604) Core parser functions returning a number now format the number according
+  to the page content language, not wiki content language.
 * IP::isConfiguredProxy() and IP::isTrustedProxy() were removed. Callers should
   migrate to using the same functions on a ProxyLookup instance, obtainable from
   MediaWikiServices.
 * The ArticleAfterFetchContent, ArticleInsertComplete, ArticleSave, ArticleSaveComplete,
   ArticleViewCustom, EditFilterMerged, EditPageGetDiffText, EditPageGetPreviewText and
   ShowRawCssJs hooks will now emit deprecation warnings if used.
+* (T68404) CSS3 attr() function with url type is no longer allowed
+  in inline styles.
 
 == Compatibility ==
 
diff --git a/RELEASE-NOTES-1.29 b/RELEASE-NOTES-1.29
new file mode 100644 (file)
index 0000000..6c53809
--- /dev/null
@@ -0,0 +1,98 @@
+== MediaWiki 1.29 ==
+
+THIS IS NOT A RELEASE YET
+
+MediaWiki 1.29 is an alpha-quality branch and is not recommended for use in
+production.
+
+=== Configuration changes in 1.29 ===
+
+=== New features in 1.29 ===
+
+=== External library changes in 1.29 ===
+
+==== Upgraded external libraries ====
+
+==== New external libraries ====
+
+==== Removed and replaced external libraries ====
+
+=== Bug fixes in 1.29 ===
+
+=== Action API changes in 1.29 ===
+
+=== Action API internal changes in 1.29 ===
+
+=== Languages updated in 1.29 ===
+
+MediaWiki supports over 350 languages. Many localisations are updated
+regularly. Below only new and removed languages are listed, as well as
+changes to languages because of Phabricator reports.
+
+=== Other changes in 1.29 ===
+
+== Compatibility ==
+
+MediaWiki 1.29 requires PHP 5.5.9 or later. There is experimental support for
+HHVM 3.6.5 or later.
+
+MySQL is the recommended DBMS. PostgreSQL or SQLite can also be used, but
+support for them is somewhat less mature. There is experimental support for
+Oracle and Microsoft SQL Server.
+
+The supported versions are:
+
+* MySQL 5.0.3 or later
+* PostgreSQL 8.3 or later
+* SQLite 3.3.7 or later
+* Oracle 9.0.1 or later
+* Microsoft SQL Server 2005 (9.00.1399)
+
+== Upgrading ==
+
+1.29 has several database changes since 1.28, and will not work without schema
+updates. Note that due to changes to some very large tables like the revision
+table, the schema update may take quite long (minutes on a medium sized site,
+many hours on a large site).
+
+If upgrading from before 1.11, and you are using a wiki as a commons
+repository, make sure that it is updated as well. Otherwise, errors may arise
+due to database schema changes.
+
+If upgrading from before 1.7, you may want to run refreshLinks.php to ensure
+new database fields are filled with data.
+
+If you are upgrading from MediaWiki 1.4.x or earlier, you should upgrade to
+1.5 first. The upgrade script maintenance/upgrade1_5.php has been removed
+with MediaWiki 1.21.
+
+Don't forget to always back up your database before upgrading!
+
+See the file UPGRADE for more detailed upgrade instructions.
+
+For notes on 1.28.x and older releases, see HISTORY.
+
+== Online documentation ==
+
+Documentation for both end-users and site administrators is available on
+MediaWiki.org, and is covered under the GNU Free Documentation License (except
+for pages that explicitly state that their contents are in the public domain):
+
+       https://www.mediawiki.org/wiki/Special:MyLanguage/Documentation
+
+== Mailing list ==
+
+A mailing list is available for MediaWiki user support and discussion:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-l
+
+A low-traffic announcements-only list is also available:
+
+       https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce
+
+It's highly recommended that you sign up for one of these lists if you're
+going to run a public MediaWiki, so you can be notified of security fixes.
+
+== IRC help ==
+
+There's usually someone online in #mediawiki on irc.freenode.net.
index 936b261..17e5df6 100644 (file)
@@ -296,6 +296,7 @@ $wgAutoloadLocalClasses = [
        'CreateAndPromote' => __DIR__ . '/maintenance/createAndPromote.php',
        'CreateFileOp' => __DIR__ . '/includes/libs/filebackend/fileop/CreateFileOp.php',
        'CreditsAction' => __DIR__ . '/includes/actions/CreditsAction.php',
+       'CryptHKDF' => __DIR__ . '/includes/libs/CryptHKDF.php',
        'CryptRand' => __DIR__ . '/includes/libs/CryptRand.php',
        'CssContent' => __DIR__ . '/includes/content/CssContent.php',
        'CssContentHandler' => __DIR__ . '/includes/content/CssContentHandler.php',
@@ -435,7 +436,7 @@ $wgAutoloadLocalClasses = [
        'ExternalStoreHttp' => __DIR__ . '/includes/externalstore/ExternalStoreHttp.php',
        'ExternalStoreMedium' => __DIR__ . '/includes/externalstore/ExternalStoreMedium.php',
        'ExternalStoreMwstore' => __DIR__ . '/includes/externalstore/ExternalStoreMwstore.php',
-       'FSFile' => __DIR__ . '/includes/libs/filebackend/FSFile.php',
+       'FSFile' => __DIR__ . '/includes/libs/filebackend/fsfile/FSFile.php',
        'FSFileBackend' => __DIR__ . '/includes/libs/filebackend/FSFileBackend.php',
        'FSFileBackendDirList' => __DIR__ . '/includes/libs/filebackend/FSFileBackend.php',
        'FSFileBackendFileList' => __DIR__ . '/includes/libs/filebackend/FSFileBackend.php',
@@ -555,6 +556,7 @@ $wgAutoloadLocalClasses = [
        'HTMLSelectNamespace' => __DIR__ . '/includes/htmlform/fields/HTMLSelectNamespace.php',
        'HTMLSelectNamespaceWithButton' => __DIR__ . '/includes/htmlform/fields/HTMLSelectNamespaceWithButton.php',
        'HTMLSelectOrOtherField' => __DIR__ . '/includes/htmlform/fields/HTMLSelectOrOtherField.php',
+       'HTMLSizeFilterField' => __DIR__ . '/includes/htmlform/fields/HTMLSizeFilterField.php',
        'HTMLSubmitField' => __DIR__ . '/includes/htmlform/fields/HTMLSubmitField.php',
        'HTMLTagFilter' => __DIR__ . '/includes/htmlform/fields/HTMLTagFilter.php',
        'HTMLTextAreaField' => __DIR__ . '/includes/htmlform/fields/HTMLTextAreaField.php',
@@ -857,6 +859,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Diff\\WordAccumulator' => __DIR__ . '/includes/diff/WordAccumulator.php',
        'MediaWiki\\Interwiki\\ClassicInterwikiLookup' => __DIR__ . '/includes/interwiki/ClassicInterwikiLookup.php',
        'MediaWiki\\Interwiki\\InterwikiLookup' => __DIR__ . '/includes/interwiki/InterwikiLookup.php',
+       'MediaWiki\\Interwiki\\InterwikiLookupAdapter' => __DIR__ . '/includes/interwiki/InterwikiLookupAdapter.php',
        'MediaWiki\\Languages\\Data\\Names' => __DIR__ . '/languages/data/Names.php',
        'MediaWiki\\Languages\\Data\\ZhConversion' => __DIR__ . '/languages/data/ZhConversion.php',
        'MediaWiki\\Linker\\LinkRenderer' => __DIR__ . '/includes/linker/LinkRenderer.php',
@@ -1414,7 +1417,7 @@ $wgAutoloadLocalClasses = [
        'TableDiffFormatter' => __DIR__ . '/includes/diff/TableDiffFormatter.php',
        'TablePager' => __DIR__ . '/includes/pager/TablePager.php',
        'TagLogFormatter' => __DIR__ . '/includes/logging/TagLogFormatter.php',
-       'TempFSFile' => __DIR__ . '/includes/libs/filebackend/TempFSFile.php',
+       'TempFSFile' => __DIR__ . '/includes/libs/filebackend/fsfile/TempFSFile.php',
        'TempFileRepo' => __DIR__ . '/includes/filerepo/FileRepo.php',
        'TemplateParser' => __DIR__ . '/includes/TemplateParser.php',
        'TemplatesOnThisPageFormatter' => __DIR__ . '/includes/TemplatesOnThisPageFormatter.php',
index 884b64f..fdbd0cd 100644 (file)
@@ -40,7 +40,7 @@
                "wikimedia/relpath": "1.0.3",
                "wikimedia/running-stat": "1.1.0",
                "wikimedia/scoped-callback": "1.0.0",
-               "wikimedia/utfnormal": "1.0.3",
+               "wikimedia/utfnormal": "1.1.0",
                "wikimedia/wait-condition-loop": "1.0.1",
                "wikimedia/wrappedstring": "2.2.0",
                "zordius/lightncandy": "0.23"
index 84a404a..2cf5fe1 100644 (file)
                                                                        "items": {
                                                                                "type": "string"
                                                                        }
+                                                               },
+                                                               "noflip": {
+                                                                       "type": "boolean",
+                                                                       "description": "Whether to skip CSSJanus LTR-to-RTL flipping for this module. Recommended for styles imported from libraries that already properly handle their RTL styles. Default is false, meaning CSSJanus will be applied on RTL-mode output."
                                                                }
                                                        }
                                                },
                                                        "type": "string",
                                                        "enum": [
                                                                "array_merge_recursive",
+                                                               "array_replace_recursive",
                                                                "array_plus_2d",
                                                                "array_plus",
                                                                "array_merge"
index 9499927..8659dff 100644 (file)
                                                                        "items": {
                                                                                "type": "string"
                                                                        }
+                                                               },
+                                                               "noflip": {
+                                                                       "type": "boolean",
+                                                                       "description": "Whether to skip CSSJanus LTR-to-RTL flipping for this module. Recommended for styles imported from libraries that already properly handle their RTL styles. Default is false, meaning CSSJanus will be applied on RTL-mode output."
                                                                }
                                                        }
                                                },
                                                        "type": "string",
                                                        "enum": [
                                                                "array_merge_recursive",
+                                                               "array_replace_recursive",
                                                                "array_plus_2d",
                                                                "array_plus",
                                                                "array_merge"
index 2ae33b2..0b0016c 100644 (file)
@@ -75,7 +75,7 @@ $wgConfigRegistry = [
  * MediaWiki version number
  * @since 1.2
  */
-$wgVersion = '1.28.0-alpha';
+$wgVersion = '1.29.0-alpha';
 
 /**
  * Name of the site. It must be changed in LocalSettings.php
@@ -5747,6 +5747,8 @@ $wgGrantPermissions['viewdeleted']['browsearchive'] = true;
 $wgGrantPermissions['viewdeleted']['deletedhistory'] = true;
 $wgGrantPermissions['viewdeleted']['deletedtext'] = true;
 
+$wgGrantPermissions['viewrestrictedlogs']['suppressionlog'] = true;
+
 $wgGrantPermissions['delete'] = $wgGrantPermissions['editpage'] +
        $wgGrantPermissions['viewdeleted'];
 $wgGrantPermissions['delete']['delete'] = true;
@@ -5797,6 +5799,7 @@ $wgGrantPermissionGroups = [
        'blockusers'          => 'administration',
        'delete'              => 'administration',
        'viewdeleted'         => 'administration',
+       'viewrestrictedlogs'  => 'administration',
        'protect'             => 'administration',
        'createaccount'       => 'administration',
 
index 0d8def3..4aa87d6 100644 (file)
@@ -22,6 +22,7 @@
 
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
 
 /**
  * The edit page/HTML interface (split from Article)
@@ -407,6 +408,11 @@ class EditPage {
         */
        protected $context;
 
+       /**
+        * @var bool Whether an old revision is edited
+        */
+       private $isOldRev = false;
+
        /**
         * @param Article $article
         */
@@ -2879,24 +2885,9 @@ ERROR;
                global $wgOut, $wgUser, $wgMaxArticleSize, $wgLang;
                global $wgAllowUserCss, $wgAllowUserJs;
 
-               if ( $this->mTitle->isTalkPage() ) {
-                       $wgOut->addWikiMsg( 'talkpagetext' );
-               }
+               $this->addTalkPageText();
 
-               // Add edit notices
-               $editNotices = $this->mTitle->getEditNotices( $this->oldid );
-               if ( count( $editNotices ) ) {
-                       $wgOut->addHTML( implode( "\n", $editNotices ) );
-               } else {
-                       $msg = $this->context->msg( 'editnotice-notext' );
-                       if ( !$msg->isDisabled() ) {
-                               $wgOut->addHTML(
-                                       '<div class="mw-editnotice-notext">'
-                                       . $msg->parseAsBlock()
-                                       . '</div>'
-                               );
-                       }
-               }
+               $this->addEditNotices();
 
                if ( $this->isConflict ) {
                        $wgOut->wrapWikiMsg( "<div class='mw-explainconflict'>\n$1\n</div>", 'explainconflict' );
@@ -2967,6 +2958,7 @@ ERROR;
                                        if ( !$revision->isCurrent() ) {
                                                $this->mArticle->setOldSubtitle( $revision->getId() );
                                                $wgOut->addWikiMsg( 'editingold' );
+                                               $this->isOldRev = true;
                                        }
                                } elseif ( $this->mTitle->exists() ) {
                                        // Something went wrong
@@ -3277,6 +3269,10 @@ HTML
                                        $classes[] = 'mw-textarea-cprotected';
                                }
                        }
+                       # Is an old revision being edited?
+                       if ( $this->isOldRev ) {
+                               $classes[] = 'mw-textarea-oldrev';
+                       }
 
                        $attribs = [ 'tabindex' => 1 ];
 
@@ -4424,4 +4420,30 @@ HTML
                // reverse the transform that we made for reversibility reasons.
                return strtr( $result, [ "&#x0" => "&#x" ] );
        }
+
+       protected function addEditNotices() {
+               global $wgOut;
+
+               $editNotices = $this->mTitle->getEditNotices( $this->oldid );
+               if ( count( $editNotices ) ) {
+                       $wgOut->addHTML( implode( "\n", $editNotices ) );
+               } else {
+                       $msg = $this->context->msg( 'editnotice-notext' );
+                       if ( !$msg->isDisabled() ) {
+                               $wgOut->addHTML(
+                                       '<div class="mw-editnotice-notext">'
+                                       . $msg->parseAsBlock()
+                                       . '</div>'
+                               );
+                       }
+               }
+       }
+
+       protected function addTalkPageText() {
+               global $wgOut;
+
+               if ( $this->mTitle->isTalkPage() ) {
+                       $wgOut->addWikiMsg( 'talkpagetext' );
+               }
+       }
 }
index 2b6088e..bae9c77 100644 (file)
@@ -1625,11 +1625,13 @@ function wfShowingResults( $offset, $limit ) {
 }
 
 /**
- * @todo document
- * @todo FIXME: We may want to blacklist some broken browsers
+ * Whether the client accept gzip encoding
  *
- * @param bool $force
- * @return bool Whereas client accept gzip compression
+ * Uses the Accept-Encoding header to check if the client supports gzip encoding.
+ * Use this when considering to send a gzip-encoded response to the client.
+ *
+ * @param bool $force Forces another check even if we already have a cached result.
+ * @return bool
  */
 function wfClientAcceptsGzip( $force = false ) {
        static $result = null;
index 2171a5d..f882d74 100644 (file)
@@ -3,6 +3,7 @@ namespace MediaWiki;
 
 use Config;
 use ConfigFactory;
+use CryptHKDF;
 use CryptRand;
 use EventRelayerGroup;
 use GenderCache;
@@ -183,7 +184,7 @@ class MediaWikiServices extends ServiceContainer {
 
                $oldInstance = self::$instance;
 
-               self::$instance = self::newInstance( $bootstrapConfig );
+               self::$instance = self::newInstance( $bootstrapConfig, 'load' );
                self::$instance->importWiring( $oldInstance, [ 'BootstrapConfig' ] );
 
                if ( $quick === 'quick' ) {
@@ -533,6 +534,14 @@ class MediaWikiServices extends ServiceContainer {
                return $this->getService( 'CryptRand' );
        }
 
+       /**
+        * @since 1.28
+        * @return CryptHKDF
+        */
+       public function getCryptHKDF() {
+               return $this->getService( 'CryptHKDF' );
+       }
+
        /**
         * @since 1.28
         * @return MediaHandlerFactory
index 8ee562a..a8f6f8e 100644 (file)
@@ -539,8 +539,8 @@ class MovePage {
                        __METHOD__
                );
 
-               // clean up the old title before reset article id - bug 45348
                if ( !$redirectContent ) {
+                       // Clean up the old title *before* reset article id - bug 45348
                        WikiPage::onArticleDelete( $this->oldTitle );
                }
 
index 50f9eb9..863a426 100644 (file)
@@ -1933,6 +1933,36 @@ class OutputPage extends ContextSource {
                $this->setCdnMaxage( $this->mCdnMaxage );
        }
 
+       /**
+        * Get TTL in [$minTTL,$maxTTL] in pass it to lowerCdnMaxage()
+        *
+        * This sets and returns $minTTL if $mtime is false or null. Otherwise,
+        * the TTL is higher the older the $mtime timestamp is. Essentially, the
+        * TTL is 90% of the age of the object, subject to the min and max.
+        *
+        * @param string|integer|float|bool|null $mtime Last-Modified timestamp
+        * @param integer $minTTL Mimimum TTL in seconds [default: 1 minute]
+        * @param integer $maxTTL Maximum TTL in seconds [default: $wgSquidMaxage]
+        * @return integer TTL in seconds
+        * @since 1.28
+        */
+       public function adaptCdnTTL( $mtime, $minTTL = 0, $maxTTL = 0 ) {
+               $minTTL = $minTTL ?: IExpiringStore::TTL_MINUTE;
+               $maxTTL = $maxTTL ?: $this->getConfig()->get( 'SquidMaxage' );
+
+               if ( $mtime === null || $mtime === false ) {
+                       return $minTTL; // entity does not exist
+               }
+
+               $age = time() - wfTimestamp( TS_UNIX, $mtime );
+               $adaptiveTTL = max( .9 * $age, $minTTL );
+               $adaptiveTTL = min( $adaptiveTTL, $maxTTL );
+
+               $this->lowerCdnMaxage( (int)$adaptiveTTL );
+
+               return $adaptiveTTL;
+       }
+
        /**
         * Use enableClientCache(false) to force it to send nocache headers
         *
@@ -2392,10 +2422,14 @@ class OutputPage extends ContextSource {
        /**
         * Output a standard permission error page
         *
-        * @param array $errors Error message keys
+        * @param array $errors Error message keys or [key, param...] arrays
         * @param string $action Action that was denied or null if unknown
         */
        public function showPermissionsErrorPage( array $errors, $action = null ) {
+               foreach ( $errors as $key => $error ) {
+                       $errors[$key] = (array)$error;
+               }
+
                // For some action (read, edit, create and upload), display a "login to do this action"
                // error if all of the following conditions are met:
                // 1. the user is not logged in
@@ -2688,15 +2722,13 @@ class OutputPage extends ContextSource {
                        $exemptStates = [];
                        $moduleStyles = $this->getModuleStyles( /*filter*/ true );
 
-                       // Batch preload getTitleInfo for isKnownEmpty() calls below
-                       $exemptModules = array_filter( $moduleStyles,
-                               function ( $name ) use ( $rl, &$exemptGroups ) {
-                                       $module = $rl->getModule( $name );
-                                       return $module && isset( $exemptGroups[ $module->getGroup() ] );
-                               }
-                       );
-                       ResourceLoaderWikiModule::preloadTitleInfo(
-                               $context, wfGetDB( DB_REPLICA ), $exemptModules );
+                       // Preload getTitleInfo for isKnownEmpty calls below and in ResourceLoaderClientHtml
+                       // Separate user-specific batch for improved cache-hit ratio.
+                       $userBatch = [ 'user.styles', 'user' ];
+                       $siteBatch = array_diff( $moduleStyles, $userBatch );
+                       $dbr = wfGetDB( DB_REPLICA );
+                       ResourceLoaderWikiModule::preloadTitleInfo( $context, $dbr, $siteBatch );
+                       ResourceLoaderWikiModule::preloadTitleInfo( $context, $dbr, $userBatch );
 
                        // Filter out modules handled by buildExemptModules()
                        $moduleStyles = array_filter( $moduleStyles,
index 018c6f8..656ba43 100644 (file)
@@ -30,7 +30,7 @@
  * version are hardcoded here
  */
 function wfEntryPointCheck( $entryPoint ) {
-       $mwVersion = '1.28';
+       $mwVersion = '1.29';
        $minimumVersionPHP = '5.5.9';
        $phpVersion = PHP_VERSION;
 
index 8f337f9..b812191 100644 (file)
@@ -87,6 +87,7 @@ class Revision implements IDBAccessObject {
        const DELETED_USER = 4;
        const DELETED_RESTRICTED = 8;
        const SUPPRESSED_USER = 12; // convenience
+       const SUPPRESSED_ALL = 15; // convenience
 
        // Audience options for accessors
        const FOR_PUBLIC = 1;
index a427f5c..c2197a6 100644 (file)
@@ -184,6 +184,29 @@ return [
                );
        },
 
+       'CryptHKDF' => function( MediaWikiServices $services ) {
+               $config = $services->getMainConfig();
+
+               $secret = $config->get( 'HKDFSecret' ) ?: $config->get( 'SecretKey' );
+               if ( !$secret ) {
+                       throw new RuntimeException( "Cannot use MWCryptHKDF without a secret." );
+               }
+
+               // In HKDF, the context can be known to the attacker, but this will
+               // keep simultaneous runs from producing the same output.
+               $context = [ microtime(), getmypid(), gethostname() ];
+
+               // Setup salt cache. Use APC, or fallback to the main cache if it isn't setup
+               $cache = $services->getLocalServerObjectCache();
+               if ( $cache instanceof EmptyBagOStuff ) {
+                       $cache = ObjectCache::getLocalClusterInstance();
+               }
+
+               return new CryptHKDF( $secret, $config->get( 'HKDFAlgorithm' ),
+                       $cache, $context, $services->getCryptRand()
+               );
+       },
+
        'MediaHandlerFactory' => function( MediaWikiServices $services ) {
                return new MediaHandlerFactory(
                        $services->getMainConfig()->get( 'MediaHandlers' )
index 07828fe..a35af6e 100644 (file)
@@ -113,7 +113,7 @@ class Status extends StatusValue {
         *     1 => object(Status) # The Status with warning messages, only
         * ]
         *
-        * @return array
+        * @return Status[]
         */
        public function splitByErrorType() {
                list( $errorsOnlyStatus, $warningsOnlyStatus ) = parent::splitByErrorType();
index 5e1e8c6..213572b 100644 (file)
@@ -4391,16 +4391,19 @@ class Title implements LinkTarget {
        public function invalidateCache( $purgeTime = null ) {
                if ( wfReadOnly() ) {
                        return false;
-               }
-
-               if ( $this->mArticleID === 0 ) {
+               } elseif ( $this->mArticleID === 0 ) {
                        return true; // avoid gap locking if we know it's not there
                }
 
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->onTransactionPreCommitOrIdle( function () {
+                       ResourceLoaderWikiModule::invalidateModuleCache( $this, null, null, wfWikiID() );
+               } );
+
                $conds = $this->pageCond();
                DeferredUpdates::addUpdate(
                        new AutoCommitUpdate(
-                               wfGetDB( DB_MASTER ),
+                               $dbw,
                                __METHOD__,
                                function ( IDatabase $dbw, $fname ) use ( $conds, $purgeTime ) {
                                        $dbTimestamp = $dbw->timestamp( $purgeTime ?: time() );
index c039388..be3be85 100644 (file)
@@ -294,6 +294,16 @@ class InfoAction extends FormlessAction {
                        $modelHtml
                ];
 
+               if ( $title->inNamespace( NS_USER ) ) {
+                       $pageUser = User::newFromName( $title->getRootText() );
+                       if ( $pageUser && $pageUser->getId() && !$pageUser->isHidden() ) {
+                               $pageInfo['header-basic'][] = [
+                                       $this->msg( 'pageinfo-user-id' ),
+                                       $pageUser->getId()
+                               ];
+                       }
+               }
+
                // Search engine status
                $pOutput = new ParserOutput();
                if ( isset( $pageProperties['noindex'] ) ) {
index 8be523e..8bbd88d 100644 (file)
@@ -103,11 +103,6 @@ class ApiPurge extends ApiBase {
                                                $updates = $content->getSecondaryDataUpdates(
                                                        $title, null, $forceRecursiveLinkUpdate, $p_result );
                                                foreach ( $updates as $update ) {
-                                                       # Some extensions, like EventBus, need to know the user
-                                                       # that performed the purge action, so set it here
-                                                       if ( $update instanceof LinksUpdate ) {
-                                                               $update->setTriggeringUser( $user );
-                                                       }
                                                        DeferredUpdates::addUpdate( $update, DeferredUpdates::PRESEND );
                                                }
 
index 7a14aac..43eb7e8 100644 (file)
@@ -93,7 +93,7 @@ class ApiQueryTags extends ApiQueryBase {
                        $tag['name'] = $tagName;
 
                        if ( $fld_displayname ) {
-                               $tag['displayname'] = ChangeTags::tagDescription( $tagName );
+                               $tag['displayname'] = ChangeTags::tagDescription( $tagName, $this );
                        }
 
                        if ( $fld_description ) {
index 5a2492d..92cbe90 100644 (file)
@@ -21,6 +21,7 @@
 
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
 
 /**
  * Prepare an edit in shared cache so that it can be reused on edit
index a533710..fde631c 100644 (file)
@@ -16,6 +16,7 @@
        "apihelp-delete-example-simple": "<kbd>প্রধান পাতা</kbd> মুছে ফেলুন।",
        "apihelp-edit-param-text": "পাতার বিষয়বস্তু।",
        "apihelp-edit-param-minor": "অনুল্লেখ্য সম্পাদনা।",
+       "apihelp-edit-param-bot": "এই সম্পাদনাটি একটি বট সম্পাদনা হিসাবে চিহ্নিত করে।",
        "apihelp-edit-param-createonly": "পাতাটি আগেই বিদ্যমান থাকলে সম্পদনা করবেন না।",
        "apihelp-edit-param-contentmodel": "নতুন বিষয়বস্তুর, বিষয়বস্তু-মডেল।",
        "apihelp-edit-example-edit": "একটি পাতা সম্পাদনা করুন",
index 40243c1..a0668c9 100644 (file)
        "apihelp-options-description": "Die Voreinstellungen des gegenwärtigen Benutzers ändern.",
        "apihelp-options-param-reset": "Setzt die Einstellungen auf Websitestandards zurück.",
        "apihelp-options-param-resetkinds": "Liste von zurückzusetzenden Optionstypen, wenn die <var>$1reset</var>-Option ausgewählt ist.",
-       "apihelp-options-param-change": "Liste von Änderungen, die mit Name=Wert formatiert sind (z.B. skin=vector). Wert darf keine Verkettungszeichen enthalten. Falls kein Wert angegeben wurde (nichtmal ein Gleichheitszeichen), z.B.: optionname|otheroption|..., wird die Option auf ihren Vorgabewert zurückgesetzt.",
-       "apihelp-options-param-optionvalue": "Der Wert für die Option, die durch <var>$1optionname</var> angegeben ist, kann Verkettungszeichen enthalten.",
+       "apihelp-options-param-change": "Liste von Änderungen, die mit name=wert formatiert sind (z.&nbsp;B. skin=vector). Falls kein Wert angegeben wurde (ohne einem Gleichheitszeichen), z.&nbsp;B. Optionname|AndereOption|…, wird die Option auf ihren Standardwert zurückgesetzt. Falls ein übergebener Wert ein Trennzeichen enthält (<kbd>|</kbd>), verwende den [[Special:ApiHelp/main#main/datatypes|alternativen Mehrfachwerttrenner]] zur korrekten Bedienung.",
+       "apihelp-options-param-optionvalue": "Der Wert für die Option, die durch <var>$1optionname</var> angegeben ist.",
        "apihelp-options-example-reset": "Alle Einstellungen zurücksetzen",
        "apihelp-options-example-change": "Ändert die Einstellungen <kbd>skin</kbd> und <kbd>hideminor</kbd>.",
        "apihelp-options-example-complex": "Setzt alle Einstellungen zurück, dann <kbd>skin</kbd> und <kbd>nickname</kbd> festlegen.",
index c20ed5d..fe73a56 100644 (file)
        "apihelp-options-description": "Change preferences of the current user.\n\nOnly options which are registered in core or in one of installed extensions, or options with keys prefixed with <code>userjs-</code> (intended to be used by user scripts), can be set.",
        "apihelp-options-param-reset": "Resets preferences to the site defaults.",
        "apihelp-options-param-resetkinds": "List of types of options to reset when the <var>$1reset</var> option is set.",
-       "apihelp-options-param-change": "List of changes, formatted name=value (e.g. skin=vector). Value cannot contain pipe characters. If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value.",
+       "apihelp-options-param-change": "List of changes, formatted name=value (e.g. skin=vector). If no value is given (not even an equals sign), e.g., optionname|otheroption|..., the option will be reset to its default value. If any value passed contains the pipe character (<kbd>|</kbd>), use the [[Special:ApiHelp/main#main/datatypes|alternative multiple-value separator]] for correct operation.",
        "apihelp-options-param-optionname": "The name of the option that should be set to the value given by <var>$1optionvalue</var>.",
-       "apihelp-options-param-optionvalue": "The value for the option specified by <var>$1optionname</var>, can contain pipe characters.",
+       "apihelp-options-param-optionvalue": "The value for the option specified by <var>$1optionname</var>.",
        "apihelp-options-example-reset": "Reset all preferences.",
        "apihelp-options-example-change": "Change <kbd>skin</kbd> and <kbd>hideminor</kbd> preferences.",
        "apihelp-options-example-complex": "Reset all preferences, then set <kbd>skin</kbd> and <kbd>nickname</kbd>.",
index 8ed1cf5..27cf257 100644 (file)
@@ -22,7 +22,8 @@
                        "Rubentl134",
                        "2axterix2",
                        "Dgstranz",
-                       "Copper12"
+                       "Copper12",
+                       "Irus"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentación]]\n* [[mw:API:FAQ|Preguntas frecuentes]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de correo]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anuncios de la API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Errores y peticiones]\n</div>\n<strong>Estado:</strong> Todas las características que se muestran en esta página deberían funcionar, pero la API aún se encuentra en desarrollo activo y puede cambiar en cualquier momento. Suscríbete a [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ la lista de correo de mediawiki-api-announce] para estar al día de las actualizaciones.\n\n<strong>Solicitudes erróneas:</strong> Cuando se envían solicitudes erróneas a la API, se envía una cabecera HTTP con la clave \"MediaWiki-API-Error\". El valor de la cabecera y el código de error devuelto tomarán el mismo valor. Para más información, véase [[mw:API:Errors_and_warnings|API: Errores y advertencias]].\n\n<strong>Pruebas:</strong> para facilitar las pruebas de solicitudes a la API, consulta [[Special:ApiSandbox]].",
@@ -32,6 +33,7 @@
        "apihelp-main-param-smaxage": "Establece el encabezado HTTP <code>s-maxage</code> de control de caché a esta cantidad de segundos. Los errores nunca se almacenan en caché.",
        "apihelp-main-param-maxage": "Establece el encabezado HTTP <code>max-age</code> de control de caché a esta cantidad de segundos. Los errores nunca se almacenan en caché.",
        "apihelp-main-param-assert": "Comprobar que el usuario haya iniciado sesión si el valor es <kbd>user</kbd> o si tiene el permiso de bot si es <kbd>bot</kbd>.",
+       "apihelp-main-param-assertuser": "Verificar el usuario actual es el usuario nombrado.",
        "apihelp-main-param-requestid": "Cualquier valor dado aquí se incluirá en la respuesta. Se puede utilizar para distinguir solicitudes.",
        "apihelp-main-param-servedby": "Incluir el nombre del host que ha servido la solicitud en los resultados.",
        "apihelp-main-param-curtimestamp": "Incluir la marca de tiempo actual en el resultado.",
        "apihelp-options-param-resetkinds": "Lista de tipos de opciones a restablecer cuando la opción <var>$1reset</var> esté establecida.",
        "apihelp-options-param-change": "Lista de cambios con el formato name=value (por ejemplo: skin=vector). El valor no puede contener caracteres de barras verticales. Si no se da ningún valor (ni siquiera un signo de igual), por ejemplo: optionname|otheroption|..., la opción se restablecerá a sus valores predeterminados.",
        "apihelp-options-param-optionname": "El nombre de la opción que debe establecerse en el valor dado por <var>$1optionvalue</var>.",
-       "apihelp-options-param-optionvalue": "El valor de la opción especificada por <var>$1optionname</var>, puede contener barras verticales.",
+       "apihelp-options-param-optionvalue": "El valor de la opción especificada por <var>$1optionname</var>.",
        "apihelp-options-example-reset": "Restablecer todas las preferencias",
        "apihelp-options-example-change": "Cambiar las preferencias <kbd>skin</kbd> y <kbd>hideminor</kbd>.",
        "apihelp-options-example-complex": "Restablecer todas las preferencias y establecer <kbd>skin</kbd> y <kbd>nickname</kbd>.",
        "apihelp-query+alltransclusions-param-prefix": "Buscar todos los títulos transcluidos que comiencen con este valor.",
        "apihelp-query+alltransclusions-param-prop": "Qué piezas de información incluir:",
        "apihelp-query+alltransclusions-paramvalue-prop-title": "Añade el título de la transclusión.",
+       "apihelp-query+alltransclusions-param-namespace": "El espacio de nombres que enumerar.",
        "apihelp-query+alltransclusions-param-limit": "Número de elementos que se desea obtener.",
        "apihelp-query+alltransclusions-example-unique": "Listar títulos transcluidos de forma única.",
        "apihelp-query+alltransclusions-example-unique-generator": "Obtiene todos los títulos transcluidos, marcando los que faltan.",
        "apihelp-query+allusers-description": "Enumerar todos los usuarios registrados.",
        "apihelp-query+allusers-param-prefix": "Buscar todos los usuarios que empiecen con este valor.",
        "apihelp-query+allusers-param-group": "Incluir solo usuarios en los grupos dados.",
+       "apihelp-query+allusers-param-excludegroup": "Excluir a los usuarios en estos grupos",
+       "apihelp-query+allusers-param-rights": "Sólo se incluyen a los usuarios con los derechos cedidos. No incluye los derechos concedidos por la implícita o auto-promoverse grupos como *, usuario, o autoconfirmed.",
        "apihelp-query+allusers-param-prop": "Qué piezas de información incluir:",
        "apihelp-query+allusers-paramvalue-prop-blockinfo": "Añade información sobre un bloque actual al usuario.",
        "apihelp-query+allusers-paramvalue-prop-groups": "Lista los grupos a los que el usuario pertenece. Esto utiliza más recursos del servidor y puede devolver menos resultados que el límite.",
+       "apihelp-query+allusers-paramvalue-prop-implicitgroups": "Lista todos los grupos el usuario es automáticamente en.",
        "apihelp-query+allusers-paramvalue-prop-rights": "Lista los permisos que tiene el usuario.",
        "apihelp-query+allusers-paramvalue-prop-editcount": "Añade el número de ediciones del usuario.",
        "apihelp-query+allusers-paramvalue-prop-registration": "Añade la marca de tiempo del momento en que el usuario se registró, si está disponible (puede estar en blanco).",
+       "apihelp-query+allusers-paramvalue-prop-centralids": "Añade el central IDs y estado de anexo para el usuario.",
        "apihelp-query+allusers-param-limit": "Cuántos nombres de usuario se devolverán.",
+       "apihelp-query+allusers-param-witheditsonly": "Mostrar solo los usuarios que han realizado ediciones.",
        "apihelp-query+allusers-param-activeusers": "Solo listar usuarios activos en {{PLURAL:$1|el último día|los $1 últimos días}}.",
+       "apihelp-query+allusers-param-attachedwiki": "Con <kbd>$1prop=centralids</kbd>, indicar también si el usuario está conectado con el wiki identificado por el ID.",
        "apihelp-query+allusers-example-Y": "Listar usuarios que empiecen por <kbd>Y</kbd>.",
        "apihelp-query+authmanagerinfo-example-login": "Captura de las solicitudes que puede ser utilizadas al comienzo de inicio de sesión.",
        "apihelp-query+backlinks-description": "Encuentra todas las páginas que enlazan a la página dada.",
        "apihelp-query+backlinks-param-pageid": "Identificador de página que buscar. No puede usarse junto con <var>$1title</var>",
+       "apihelp-query+backlinks-param-namespace": "El espacio de nombres que enumerar.",
        "apihelp-query+backlinks-param-filterredir": "Cómo filtrar redirecciones. Si se establece a <kbd>nonredirects</kbd> cuando está activo <var>$1redirect</var>, esto sólo se aplica al segundo nivel.",
        "apihelp-query+backlinks-param-limit": "Cuántas páginas en total se devolverán. Si está activo <var>$1redirect</var>, el límite aplica a cada nivel por separado (lo que significa que se pueden devolver hasta 2 * <var>$1limit</var> resultados).",
        "apihelp-query+backlinks-example-simple": "Mostrar enlaces a <kbd>Main page</kbd>.",
        "apihelp-query+backlinks-example-generator": "Obtener información acerca de las páginas enlazadas a <kbd>Main page</kbd>.",
        "apihelp-query+blocks-description": "Listar todos los usuarios y direcciones IP bloqueadas.",
+       "apihelp-query+blocks-param-start": "El sello de tiempo para comenzar la enumeración",
+       "apihelp-query+blocks-param-end": "El sello de tiempo para detener la enumeración",
+       "apihelp-query+blocks-param-ids": "Lista de bloquear IDs para listar (opcional).",
        "apihelp-query+blocks-param-users": "Lista de usuarios a buscar (opcional).",
        "apihelp-query+blocks-param-ip": "Obtiene todos los bloqueos que se aplican a esta dirección IP o intervalo CIDR, incluyendo bloqueos de intervalos. No se puede usar en conjunto con <var>$3users</var>. No se aceptan intervalos CIDR mayores que IPv4/$1 o IPv6/$2.",
+       "apihelp-query+blocks-param-limit": "El número máximo de filtros a listar.",
        "apihelp-query+blocks-param-prop": "Qué propiedades se obtendrán:",
+       "apihelp-query+blocks-paramvalue-prop-id": "Agrega el ID del bloque.",
+       "apihelp-query+blocks-paramvalue-prop-user": "Añade el nombre de usuario del usuario bloqueado.",
        "apihelp-query+blocks-paramvalue-prop-userid": "Añade el identificador del usuario bloqueado.",
+       "apihelp-query+blocks-paramvalue-prop-by": "Añade el nombre de usuario del bloqueo de usuario.",
+       "apihelp-query+blocks-paramvalue-prop-byid": "Añade el usuario ID del usuario bloqueador.",
        "apihelp-query+blocks-paramvalue-prop-timestamp": "Añade la fecha y hora de cuando se aplicó el bloque.",
+       "apihelp-query+blocks-paramvalue-prop-expiry": "Añade la marca de tiempo correspondiente a la expiración del bloqueo.",
        "apihelp-query+blocks-paramvalue-prop-reason": "Añade la razón dada para el bloqueo.",
+       "apihelp-query+blocks-paramvalue-prop-range": "Añade la gama de direcciones de IP afectó por el bloque.",
+       "apihelp-query+blocks-paramvalue-prop-flags": "Etiquetas la prohibición con (autoblock, anononly, etc.).",
        "apihelp-query+blocks-example-simple": "Listar bloques.",
        "apihelp-query+categories-param-prop": "Qué propiedades adicionales obtener para cada categoría:",
        "apihelp-query+categories-paramvalue-prop-timestamp": "Añade la marca de tiempo del momento en que se añadió la categoría.",
        "apihelp-query+exturlusage-param-prop": "Qué piezas de información incluir:",
        "apihelp-query+exturlusage-paramvalue-prop-ids": "Añade el identificado de la página.",
        "apihelp-query+exturlusage-paramvalue-prop-title": "Agrega el título y el identificador del espacio de nombres de la página.",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "Añade el URL utilizado en la página.",
        "apihelp-query+exturlusage-param-protocol": "Protocolo del URL. Si está vacío y se establece <var>$1query</var>, el protocolo es <kbd>http</kbd>. Deja vacío esto y <var>$1query</var> para listar todos los enlaces externos.",
        "apihelp-query+exturlusage-param-limit": "Cuántas páginas se devolverán.",
        "apihelp-query+exturlusage-example-simple": "Mostrar páginas que enlacen con <kbd>http://www.mediawiki.org</kbd>.",
index 321fb75..6843c90 100644 (file)
@@ -50,7 +50,7 @@
        "apihelp-block-param-anononly": "Bloquer uniquement les utilisateurs anonymes (c’est-à-dire désactiver les modifications anonymes pour cette adresse IP).",
        "apihelp-block-param-nocreate": "Empêcher la création de compte.",
        "apihelp-block-param-autoblock": "Bloquer automatiquement la dernière adresse IP utilisée, et toute les adresses IP subséquentes depuis lesquelles ils ont essayé de se connecter.",
-       "apihelp-block-param-noemail": "Empêcher l’utilisateur d’envoyer des courriels via le wiki (nécessite le doit <code>blockemail</code>).",
+       "apihelp-block-param-noemail": "Empêcher l’utilisateur d’envoyer des courriels via le wiki (nécessite le droit <code>blockemail</code>).",
        "apihelp-block-param-hidename": "Masque le nom de l’utilisateur dans le journal des blocages (nécessite le droit <code>hideuser</code>).",
        "apihelp-block-param-allowusertalk": "Autoriser les utilisateurs à modifier leur propre page de discussion (dépend de <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Si l’utilisateur est déjà bloqué, écraser le blocage existant.",
        "apihelp-options-description": "Modifier les préférences de l’utilisateur courant.\n\nSeules les options enregistrées dans le cœur ou dans l’une des extensions installées, ou les options avec des clés préfixées par <code>userjs-</code> (devant être utilisées dans les scripts utilisateur), peuvent être définies.",
        "apihelp-options-param-reset": "Réinitialise les préférences aux valeurs par défaut du site.",
        "apihelp-options-param-resetkinds": "Liste des types d’option à réinitialiser quand l’option <var>$1reset</var> est définie.",
-       "apihelp-options-param-change": "Liste des modifications, au format nom=valeur (par ex. skin=vector). La valeur ne peut pas contenir de caractère barre verticale. Si aucune valeur n’est fournie (pas même un signe égal), par ex., nomoption|autreoption|…, l’option sera réinitialisée à sa valeur par défaut.",
+       "apihelp-options-param-change": "Liste des modifications, au format nom=valeur (par ex. skin=vector). Si aucune valeur n’est fournie (pas même un signe égal), par ex., nomoption|autreoption|…, l’option sera réinitialisée à sa valeur par défaut. Pour toute valeur passée contenant une barre verticale (<kbd>|</kbd>), utiliser le [[Special:ApiHelp/main#main/datatypes|séparateur alternatif de valeur multiple]] pour que l'opération soit correcte.",
        "apihelp-options-param-optionname": "Un nom d’option qui doit être fixé à la valeur fournie par <var>$1optionvalue</var>.",
-       "apihelp-options-param-optionvalue": "La valeur d’une option spécifiée par <var>$1optionname</var> peut contenir des caractères barre verticale.",
+       "apihelp-options-param-optionvalue": "La valeur de l'option spécifiée par <var>$1optionname</var>.",
        "apihelp-options-example-reset": "Réinitialiser toutes les préférences",
        "apihelp-options-example-change": "Modifier les préférences <kbd>skin</kbd> et <kbd>hideminor</kbd>.",
        "apihelp-options-example-complex": "Réinitialiser toutes les préférences, puis définir <kbd>skin</kbd> et <kbd>nickname</kbd>.",
index 4c74147..6d90fb5 100644 (file)
        "apihelp-options-description": "Cambiar as preferencias do usuario actual.\n\nSó se poden cambiar opcións que estean rexistradas no núcleo ou nunha das extensións instaladas, ou aquelas opcións con claves prefixadas con <code>userjs-</code> (previstas para ser usadas por escrituras de usuario).",
        "apihelp-options-param-reset": "Reinicia as preferencias ás iniciais do sitio.",
        "apihelp-options-param-resetkinds": "Lista de tipos de opcións a reinicializar cando a opción <var>$1reset</var> está definida.",
-       "apihelp-options-param-change": "Lista de cambios, con formato nome=valor (p. ex. skin=vector). O valor non pode ter caracteres de barra vertical. Se non se indica un valor (sen u signo igual), p. ex. nomeopcion|outraopcion|..., a opción será gardada co seu valor por defecto.",
+       "apihelp-options-param-change": "Lista de cambios, con formato nome=valor (p. ex. skin=vector). Se non se da un valor (sen un símbolo de igual), p.ex. optionname|otheroption|..., a opción pasará ó valor por defecto. Para calquera valor que conteña o carácter (<kbd>|</kbd>), use o [[Special:ApiHelp/main#main/datatypes|separador alternativo para valores múltiples]] para unha operación correcta.",
        "apihelp-options-param-optionname": "O nome da opción que debe fixarse no valor dado por <var>$1optionvalue</var>.",
-       "apihelp-options-param-optionvalue": "O valor para a opción especificada por <var>$1optionname</var>. Pode conter barras verticais.",
+       "apihelp-options-param-optionvalue": "O valor para a opción especificada por <var>$1optionname</var>, pode conter barras verticais.",
        "apihelp-options-example-reset": "Restablecer todas as preferencias.",
        "apihelp-options-example-change": "Cambiar as preferencias <kbd>skin</kbd> and <kbd>hideminor</kbd>.",
        "apihelp-options-example-complex": "Restaurar todas as preferencias, logo fixar <kbd>skin</kbd> e <kbd>nickname</kbd>.",
index 73b4420..16e6d8a 100644 (file)
        "apihelp-edit-param-tags": "אילו תגי שינוי להחיל על הגרסה.",
        "apihelp-edit-param-minor": "עריכה משנית.",
        "apihelp-edit-param-notminor": "שינוי לא משני.",
-       "apihelp-edit-param-bot": "סימון עריכה זו כבוט.",
+       "apihelp-edit-param-bot": "ס×\99×\9e×\95×\9f ×¢×¨×\99×\9b×\94 ×\96×\95 ×\9bער×\99×\9bת ×\91×\95×\98.",
        "apihelp-edit-param-basetimestamp": "חותם־זמן של גרסת הבסיס, משמש לזיהוי התנגשויות עריכה. אפשר לקבל אותו באמצעות [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
        "apihelp-edit-param-starttimestamp": "חותם־הזמן של תחילת תהליך העריכה, משמש לזיהוי התנגשויות. אפשר לקבל ערך מתאים באמצעות <var>[[Special:ApiHelp/main|curtimestamp]]</var> בעת תחילת תהליך העריכה (למשל בזמן טעינת תוכן הדף לעריכה).",
        "apihelp-edit-param-recreate": "לעקוב את כל הטעויות על כך שהדף נמחק בינתיים.",
        "apihelp-emailuser-param-text": "גוף הדואר.",
        "apihelp-emailuser-param-ccme": "שליחת עותק של הדואר הזה אליי.",
        "apihelp-emailuser-example-email": "שליחת דוא\"ל למשתמש <kbd>WikiSysop</kbd> עם הטקסט <kbd>Content</kbd>.",
-       "apihelp-expandtemplates-description": "הרחבת כל התבניות בקוד הוויקי.",
+       "apihelp-expandtemplates-description": "×\94ר×\97×\91ת ×\9b×\9c ×\94ת×\91× ×\99×\95ת ×\91ת×\95×\9a ×§×\95×\93 ×\94×\95×\95×\99ק×\99.",
        "apihelp-expandtemplates-param-title": "כותרת הדף.",
        "apihelp-expandtemplates-param-text": "איזה קוד ויקי להמיר.",
        "apihelp-expandtemplates-param-revid": "מזהה גרסה, עבור <nowiki>{{REVISIONID}}</nowiki> ומשתנים דומים.",
        "apihelp-options-description": "שינוי העדפות של המשתמש הנוכחי.\n\nרק אפשרויות שמוגדרות בליבה או באחת מההרחבות המותקנות, או אפשרויות עם מפתחות עם התחילית \"<code dir=\"ltr\">userjs-</code>\" (שמיועדות לשימוש תסריטי משתמשים) יכולות להיות מוגדרות.",
        "apihelp-options-param-reset": "אתחול ההעדפות לבררות המחדל של האתר.",
        "apihelp-options-param-resetkinds": "רשימת סוגי אפשרויות לאתחל כאשר מוגדרת האפשרות <var>$1reset</var>.",
-       "apihelp-options-param-change": "רש×\99×\9eת ×©×\99× ×\95×\99×\99×\9d, ×\91תס×\93×\99ר name=value (×\9c×\9eש×\9c skin=vector). ×\94ער×\9a ×\90×\99× ×\95 ×\99×\9b×\95×\9c ×\9c×\94×\9b×\99×\9c ×ª×\95×\95×\99 ×\9eק×\9c (|). ×\90×\9d ×\9c×\90 × ×\99ת×\9f ×¢×¨×\9a, ×\90פ×\99×\9c×\95 ×\9c×\90 ×¡×\99×\9e×\9f ×©×\95×\95×\94, ×\9c×\9eש×\9c optionname|otheroption|...â\80\8e, ×\94×\90פשר×\95ת ×ª×\90×\95פס ×\9cער×\9a ×\91ררת ×\94×\9e×\97×\93×\9c ×©×\9cה.",
+       "apihelp-options-param-change": "רש×\99×\9eת ×©×\99× ×\95×\99×\99×\9d, ×\91תס×\93×\99ר name=value (×\9c×\9eש×\9c skin=vector). ×\90×\9d ×\9c×\90 × ×\99ת×\9f ×¢×¨×\9a, ×\90פ×\99×\9c×\95 ×\9c×\90 ×¡×\99×\9e×\9f ×©×\95×\95×\94, ×\9c×\9eש×\9c optionname|otheroption|...â\80\8e, ×\94×\90פשר×\95ת ×ª×\90×\95פס ×\9cער×\9a ×\91ררת ×\94×\9e×\97×\93×\9c ×©×\9c×\94. ×\90×\9d ×¢×¨×\9a ×\9e×\95×¢×\91ר ×\9b×\9cש×\94×\95 ×\9e×\9b×\99×\9c ×\90ת ×ª×\95 ×\94×\9eק×\9c (<kbd>|</kbd>), ×\99ש ×\9c×\94שת×\9eש ×\91[[Special:ApiHelp/main#main/datatypes|×\9eפר×\99×\93 ×¢×¨×\9b×\99×\9d ×\9eר×\95×\91×\99×\9d ×\97×\9c×\95פ×\99]] ×\91ש×\91×\99×\9c ×¤×¢×\95×\9c×\94 × ×\9b×\95× ה.",
        "apihelp-options-param-optionname": "שם האפשרות שצריך להגדיר לערך שניתן ב־<var>$1optionvalue</var>.",
-       "apihelp-options-param-optionvalue": "ערך האפשרות שצוין ב־<var>$1optionname</var>, יכול להכיל תווי מקל.",
+       "apihelp-options-param-optionvalue": "ערך האפשרות שצוין ב־<var>$1optionname</var>.",
        "apihelp-options-example-reset": "אתחול כל ההעדפות.",
        "apihelp-options-example-change": "לשנות את ההעדפות <kbd>skin</kbd> ו־<kbd>hideminor</kbd>.",
        "apihelp-options-example-complex": "לאתחל את כל ההעדפות ואז להגדיר את <kbd>skin</kbd> ואת <kbd>nickname</kbd>.",
index 5f1d851..48521a1 100644 (file)
        "apihelp-opensearch-param-suggest": "Non fare nulla se <var>[[mw:Manual:$wgEnableOpenSearchSuggest|$wgEnableOpenSearchSuggest]]</var> è falso.",
        "apihelp-opensearch-param-format": "Il formato dell'output.",
        "apihelp-opensearch-example-te": "Trova le pagine che iniziano con <kbd>Te</kbd>.",
+       "apihelp-options-param-optionvalue": "Il valore per l'opzione specificata da <var>$1optionname</var>.",
        "apihelp-options-example-reset": "Reimposta tutte le preferenze.",
        "apihelp-paraminfo-description": "Ottieni informazioni sui moduli API.",
        "apihelp-paraminfo-param-helpformat": "Formato delle stringhe di aiuto.",
index f3beff6..3985dc1 100644 (file)
@@ -9,7 +9,8 @@
                        "Otokoume",
                        "Sujiniku",
                        "Macofe",
-                       "Suchichi02"
+                       "Suchichi02",
+                       "Kkairri"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|説明文書]]\n* [[mw:API:FAQ|よくある質問]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api メーリングリスト]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API 告知]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R バグの報告とリクエスト]\n</div>\n<strong>状態:</strong> このページに表示されている機能は全て動作するはずですが、この API は未だ活発に開発されており、変更される可能性があります。アップデートの通知を受け取るには、[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ the mediawiki-api-announce メーリングリスト]に参加してください。\n\n<strong>誤ったリクエスト:</strong> 誤ったリクエストが API に送られた場合、\"MediaWiki-API-Error\" HTTP ヘッダーが送信され、そのヘッダーの値と送り返されるエラーコードは同じ値にセットされます。より詳しい情報は [[mw:API:Errors_and_warnings|API: Errors and warnings]] を参照してください。\n\n<strong>テスト:</strong> API のリクエストのテストは、[[Special:ApiSandbox]]で簡単に行えます。",
@@ -85,7 +86,7 @@
        "apihelp-edit-param-tags": "この版に適用する変更タグ。",
        "apihelp-edit-param-minor": "細部の編集",
        "apihelp-edit-param-notminor": "細部の編集ではない。",
-       "apihelp-edit-param-bot": "この編集をボットとしてマークする。",
+       "apihelp-edit-param-bot": "ã\81\93ã\81®ç·¨é\9b\86ã\82\92ã\83\9cã\83\83ã\83\88ã\81®ç·¨é\9b\86ã\81¨ã\81\97ã\81¦ã\83\9eã\83¼ã\82¯ã\81\99ã\82\8bã\80\82",
        "apihelp-edit-param-basetimestamp": "編集前の版のタイムスタンプ。編集競合を検出するために使用されます。\n[[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]] で取得できます。",
        "apihelp-edit-param-starttimestamp": "編集作業を開始したときのタイムスタンプ。編集競合を検出するために使用されます。適切な値は <var>[[Special:ApiHelp/main|curtimestamp]]</var> を使用して編集作業を開始するとき (たとえば、編集するページの本文を読み込んだとき) に取得できます。",
        "apihelp-edit-param-createonly": "すでにそのページが存在する場合は編集を行いません。",
        "apihelp-protect-description": "ページの保護レベルを変更します。",
        "apihelp-protect-param-title": "保護(解除)するページ名です。$1pageid とは同時に使用できません。",
        "apihelp-protect-param-pageid": "保護(解除)するページIDです。$1title とは同時に使用できません。",
-       "apihelp-protect-param-protections": "<kbd>action=level</kbd> の形式 (例えば、<kbd>edit=sysop</kbd>) で整形された、保護レベルの一覧。\n\n<strong>注意: </strong> ここに列挙されなかった操作の制限は解除されます。",
+       "apihelp-protect-param-protections": "<kbd>action=level</kbd> の形式 (例えば、<kbd>edit=sysop</kbd>) で整形された、保護レベルの一覧。レベル <kbd>all</kbd> は誰もが操作できる、言い換えると制限が掛かっていないことを意味します。\n\n<strong>注意: </strong> ここに列挙されなかった操作の制限は解除されます。",
        "apihelp-protect-param-expiry": "有効期限です。タイムスタンプがひとつだけ指定された場合は、それがすべての保護に適用されます。無期限の保護を行う場合は<kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd>, または <kbd>never</kbd> を指定します。",
        "apihelp-protect-param-reason": "保護(解除)の理由。",
        "apihelp-protect-param-tags": "保護記録の項目に適用する変更タグ。",
        "apihelp-query+siteinfo-paramvalue-prop-general": "システム全体の情報。",
        "apihelp-query+siteinfo-paramvalue-prop-specialpagealiases": "特別ページの別名の一覧。",
        "apihelp-query+siteinfo-paramvalue-prop-magicwords": "マジックワードとこれらの別名の一覧。",
+       "apihelp-query+siteinfo-param-numberingroup": "利用者グループに属する利用者の数を一覧表示します。",
        "apihelp-query+siteinfo-example-simple": "サイト情報を取得する。",
        "apihelp-query+tags-description": "変更タグを一覧表示します。",
        "apihelp-query+tags-param-limit": "一覧表示するタグの最大数。",
        "apihelp-query+usercontribs-param-tag": "このタグが付与された版のみを一覧表示する。",
        "apihelp-query+usercontribs-param-toponly": "最新の版である変更のみを一覧表示する。",
        "apihelp-query+usercontribs-example-user": "利用者 <kbd>Example</kbd> の投稿記録を表示する。",
+       "apihelp-query+usercontribs-example-ipprefix": "<kbd>192.0.2.</kbd> から始まるすべてのIPアドレスからの投稿記録を表示する。",
+       "apihelp-query+userinfo-description": "現在の利用者に関する情報を取得します。",
        "apihelp-query+userinfo-param-prop": "どの情報を結果に含めるか:",
        "apihelp-query+userinfo-paramvalue-prop-realname": "利用者の本名を追加します。",
        "apihelp-query+userinfo-example-simple": "現在の利用者に関する情報を取得します。",
diff --git a/includes/api/i18n/ka.json b/includes/api/i18n/ka.json
new file mode 100644 (file)
index 0000000..a9bc686
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Irus"
+               ]
+       },
+       "apihelp-login-param-name": "მომხმარებლის სახელი",
+       "apihelp-login-param-password": "პაროლი",
+       "apihelp-login-param-domain": "ელ-ფოსტა (არასავალდებულო)",
+       "apihelp-login-example-login": "შესვლა"
+}
index d4ff5d8..f15bec1 100644 (file)
        "apihelp-emailuser-param-text": "메일 본문.",
        "apihelp-emailuser-param-ccme": "자신에게 메일의 복사본을 보냅니다.",
        "apihelp-emailuser-example-email": "<kbd>WikiSysop</kbd> 사용자에게 텍스트 <kbd>Content</kbd>로 이메일을 보냅니다.",
-       "apihelp-expandtemplates-description": "모든 틀을 위키텍스트로 확장.",
+       "apihelp-expandtemplates-description": "위키텍스트 안에 모든 틀을 확장합니다.",
        "apihelp-expandtemplates-param-title": "문서 제목",
        "apihelp-expandtemplates-param-text": "변환할 위키텍스트.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "확장된 위키텍스트.",
        "apihelp-query+revisions+base-paramvalue-prop-contentmodel": "판의 콘텐츠 모델 ID.",
        "apihelp-query+revisions+base-paramvalue-prop-content": "판의 텍스트.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "판의 태그.",
+       "apihelp-query+search-description": "전문 검색을 수행합니다.",
        "apihelp-query+search-param-qiprofile": "쿼리 독립적인 프로파일 사용(순위 알고리즘에 영향있음)",
        "apihelp-query+search-paramvalue-prop-size": "바이트 단위로 문서의 크기를 추가합니다.",
        "apihelp-query+search-paramvalue-prop-wordcount": "문서의 낱말 수를 추가합니다.",
index 03cb2b5..1580fcf 100644 (file)
        "apihelp-delete-description": "पान वगळा",
        "apihelp-edit-param-minor": "छोटे संपादन",
        "apihelp-edit-param-notminor": "छोटे नसलेले संपादन",
+       "apihelp-edit-param-bot": "या संपादनावर सांगकाम्याचे संपादन म्हणून खूण करा.",
        "apihelp-edit-example-edit": "पान संपादा",
+       "apihelp-expandtemplates-description": "विकिमजकूरात सर्व साच्यांचा विस्तार करा.",
+       "apihelp-feedcontributions-param-toponly": "केवळ नवीनतम आवर्तने असलेलीच संपादने दाखवा.",
        "apihelp-feedrecentchanges-param-categories": "या सर्व वर्गात असलेल्या पानांमधील बदलच फक्त  दाखवा.",
        "apihelp-feedrecentchanges-param-categories_any": "त्यापेक्षा,या कोणत्याही वर्गांमधील,पानांना झालेले बदलच फक्त दाखवा.",
        "apihelp-login-param-name": "सदस्य नाव.",
diff --git a/includes/api/i18n/nso.json b/includes/api/i18n/nso.json
new file mode 100644 (file)
index 0000000..42b30bb
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Mohau"
+               ]
+       },
+       "apihelp-createaccount-param-name": "Leina la mošomši.",
+       "apihelp-login-example-login": "Tsena."
+}
index c28ac64..7fae7ae 100644 (file)
@@ -23,6 +23,7 @@
        "apihelp-main-param-smaxage": "Ustaw nagłówek HTTP kontrolujący pamięć podręczną <code>s-maxage</code> na taką ilość sekund. Błędy nie będą nigdy przechowywane w pamięci podręcznej.",
        "apihelp-main-param-maxage": "Ustaw nagłówek HTTP kontrolujący pamięć podręczną <code>maxage</code> na taką ilość sekund. Błędy nie będą nigdy przechowywane w pamięci podręcznej.",
        "apihelp-main-param-assert": "Zweryfikuj, czy użytkownik jest zalogowany, jeżeli wybrano <kbd>user</kbd>, lub czy ma uprawnienia bota, jeżeli wybrano <kbd>bot</kbd>.",
+       "apihelp-main-param-assertuser": "Sprawdź, czy bieżący użytkownik posiada nazwę.",
        "apihelp-main-param-requestid": "Każda wartość tu podana będzie dołączana do odpowiedzi. Może być użyta do rozróżniania żądań.",
        "apihelp-main-param-servedby": "Dołącz do odpowiedzi nazwę hosta, który obsłużył żądanie.",
        "apihelp-main-param-curtimestamp": "Dołącz obecny znacznik czasu do wyniku.",
        "apihelp-options-param-resetkinds": "Lista typów opcji do zresetowania, jeżeli ustawiono opcję <var>$1reset</var>.",
        "apihelp-options-param-change": "Lista zmian, w formacie nazwa=wartość (np. skin=vector). Wartość nie może zawierać znaku pionowej kreski. Jeżeli nie zostanie podana wartość (a nawet znak równości), np., optionname|otheroption|..., to opcja zostanie zresetowana do jej wartości domyślnej.",
        "apihelp-options-param-optionname": "Nazwa opcji, która powinna być ustawiona na wartość <var>$1optionvalue</var>.",
-       "apihelp-options-param-optionvalue": "Wartość opcji, określona w <var>$1optionname</var>, może zawierać znaki pionowej kreski.",
+       "apihelp-options-param-optionvalue": "Wartość opcji, określona w <var>$1optionname</var>.",
        "apihelp-options-example-reset": "Resetuj wszystkie preferencje.",
        "apihelp-options-example-change": "Zmień preferencje <kbd>skin</kbd> (skórka) i <kbd>hideminor</kbd> (ukryj drobne edycje).",
        "apihelp-options-example-complex": "Zresetuj wszystkie preferencje, a następnie ustaw <kbd>skin</kbd> i <kbd>nickname</kbd>.",
        "apihelp-query+alldeletedrevisions-example-user": "Wymień ostatnie 50 usuniętych edycji przez użytkownika <kbd>Example</kbd>.",
        "apihelp-query+alldeletedrevisions-example-ns-main": "Wymień ostatnie 50 usuniętych edycji z przestrzeni głównej.",
        "apihelp-query+allfileusages-description": "Lista wykorzystania pliku, także dla nieistniejących.",
+       "apihelp-query+allfileusages-param-prop": "Jakie informacje dołączyć:",
+       "apihelp-query+allfileusages-paramvalue-prop-title": "Dodaje tytuł pliku.",
        "apihelp-query+allfileusages-param-limit": "Łączna liczba obiektów do zwrócenia.",
        "apihelp-query+allfileusages-example-unique": "Lista unikatowych tytułów plików.",
        "apihelp-query+allimages-param-sort": "Sortowanie według właściwości.",
        "apihelp-query+allimages-example-recent": "Pokaż listę ostatnio przesłanych plików, podobnie do [[Special:NewFiles]].",
        "apihelp-query+allimages-example-mimetypes": "Pokaż listę plików z typem MIME <kbd>image/png</kbd> lub <kbd>image/gif</kbd>",
+       "apihelp-query+alllinks-param-prop": "Jakie informacje dołączyć:",
+       "apihelp-query+alllinks-paramvalue-prop-title": "Dodaje tytuł linku.",
        "apihelp-query+alllinks-param-namespace": "Przestrzeń nazw do emulacji.",
        "apihelp-query+alllinks-param-limit": "Łączna liczba obiektów do zwrócenia.",
        "apihelp-query+alllinks-example-unique": "Lista unikatowych tytułów plików.",
        "apihelp-query+allpages-param-limit": "Liczba stron do zwrócenia.",
        "apihelp-query+allpages-example-B": "Pokaż listę stron rozpoczynających się na literę <kbd>B</kbd>.",
        "apihelp-query+allredirects-description": "Lista wszystkich przekierowań do przestrzeni nazw.",
+       "apihelp-query+allredirects-param-prop": "Jakie informacje dołączyć:",
+       "apihelp-query+allredirects-paramvalue-prop-title": "Dodaje tytuł przekierowania.",
        "apihelp-query+allredirects-param-namespace": "Przestrzeń nazw do emulacji.",
        "apihelp-query+allredirects-param-limit": "Łączna liczba obiektów do zwrócenia.",
        "apihelp-query+allrevisions-description": "Wyświetl wszystkie wersje.",
        "apihelp-query+allrevisions-param-excludeuser": "Nie wyświetlaj wersji tego użytkownika.",
        "apihelp-query+allrevisions-param-namespace": "Wyświetl tylko strony w przestrzeni głównej.",
        "apihelp-query+allrevisions-example-ns-main": "Wyświetl pierwsze 50 wersji w przestrzeni głównej.",
+       "apihelp-query+mystashedfiles-param-limit": "Liczba plików do pobrania.",
+       "apihelp-query+alltransclusions-param-prop": "Jakie informacje dołączyć:",
        "apihelp-query+alltransclusions-param-namespace": "Przestrzeń nazw do emulacji.",
+       "apihelp-query+alltransclusions-param-limit": "Łączna liczba elementów do zwrócenia.",
+       "apihelp-query+allusers-param-dir": "Kierunek sortowania.",
+       "apihelp-query+allusers-param-prop": "Jakie informacje dołączyć:",
+       "apihelp-query+allusers-param-limit": "Łączna liczba nazw użytkowników do zwrócenia.",
        "apihelp-query+allusers-param-witheditsonly": "Tylko użytkownicy, którzy edytowali.",
+       "apihelp-query+backlinks-description": "Znajdź wszystkie strony, które linkują do danej strony.",
        "apihelp-query+backlinks-param-namespace": "Przestrzeń nazw do emulacji.",
        "apihelp-query+backlinks-example-simple": "Pokazuj linki do <kbd>Main page</kbd>.",
        "apihelp-query+blocks-param-ids": "Lista zablokowanych ID do wylistowania (opcjonalne).",
        "apihelp-query+blocks-param-users": "Lista użytkowników do wyszukania (opcjonalne).",
        "apihelp-query+blocks-param-limit": "Maksymalna liczba blokad do wylistowania.",
+       "apihelp-query+blocks-paramvalue-prop-reason": "Dodaje powód zablokowania.",
        "apihelp-query+blocks-example-simple": "Listuj blokady.",
        "apihelp-query+categories-param-limit": "Liczba kategorii do zwrócenia.",
        "apihelp-query+categorymembers-description": "Wszystkie strony w danej kategorii.",
        "apihelp-query+categorymembers-paramvalue-prop-type": "Doda informacje o typie strony w kategorii (<samp>page</samp> (strona), <samp>subcat</samp> (podkategoria) lub <samp>file</samp> (plik)).",
        "apihelp-query+categorymembers-param-limit": "Maksymalna liczba zwracanych wyników.",
        "apihelp-query+categorymembers-param-sort": "Sortowanie według właściwości.",
+       "apihelp-query+categorymembers-param-dir": "W jakim kierunku sortować.",
        "apihelp-query+deletedrevisions-param-tag": "Pokazuj tylko zmiany oznaczone tym tagiem.",
        "apihelp-query+deletedrevisions-param-user": "Pokazuj tylko zmiany dokonane przez tego użytkownika.",
        "apihelp-query+deletedrevisions-param-excludeuser": "Nie pokazuj zmian dokonanych przez tego użytkownika.",
        "apihelp-query+deletedrevs-param-limit": "Maksymalna liczba zmian do wylistowania.",
        "apihelp-query+duplicatefiles-example-generated": "Szukaj duplikatów wszystkich plików.",
        "apihelp-query+embeddedin-param-filterredir": "Jaki filtrować przekierowania.",
+       "apihelp-query+embeddedin-param-limit": "Łączna liczba stron do zwrócenia.",
        "apihelp-query+extlinks-param-limit": "Liczba linków do zwrócenia.",
+       "apihelp-query+exturlusage-param-prop": "Jakie informacje dołączyć:",
+       "apihelp-query+exturlusage-paramvalue-prop-ids": "Dodaje ID strony.",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "Dodaje adres URL, używany na stronie.",
        "apihelp-query+exturlusage-param-limit": "Liczba stron do zwrócenia.",
        "apihelp-query+filearchive-paramvalue-prop-dimensions": "Alias rozmiaru.",
        "apihelp-query+filearchive-example-simple": "Pokaż listę wszystkich usuniętych plików.",
        "apihelp-query+filerepoinfo-example-simple": "Uzyskaj informacje na temat repozytoriów plików.",
        "apihelp-query+fileusage-paramvalue-prop-title": "Nazwa każdej strony.",
        "apihelp-query+fileusage-param-limit": "Ilość do zwrócenia.",
+       "apihelp-query+imageinfo-description": "Zwraca informacje o pliku i historię przesyłania.",
        "apihelp-query+imageinfo-paramvalue-prop-canonicaltitle": "Dodaje kanoniczny tytuł pliku.",
        "apihelp-query+imageinfo-paramvalue-prop-dimensions": "Alias rozmiaru.",
        "apihelp-query+imageinfo-paramvalue-prop-sha1": "Dodaj sumę kontrolną SHA-1 dla tego pliku.",
        "apihelp-query+info-paramvalue-prop-readable": "Czy użytkownik może przeczytać tę stronę.",
        "apihelp-query+iwbacklinks-param-prefix": "Prefix interwiki.",
        "apihelp-query+iwbacklinks-param-limit": "Łączna liczba stron do zwrócenia.",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwprefix": "Dodaje prefiks interwiki.",
+       "apihelp-query+iwbacklinks-paramvalue-prop-iwtitle": "Dodaje tytuł interwiki.",
        "apihelp-query+iwlinks-paramvalue-prop-url": "Dodaje pełny adres URL.",
+       "apihelp-query+iwlinks-param-limit": "Łączna liczba linków interwiki do zwrócenia.",
+       "apihelp-query+langbacklinks-param-limit": "Łączna liczba stron do zwrócenia.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lllang": "Dodaje kod języka linku językowego.",
+       "apihelp-query+langbacklinks-paramvalue-prop-lltitle": "Dodaje tytuł linku językowego.",
+       "apihelp-query+langlinks-paramvalue-prop-url": "Dodaje pełny adres URL.",
        "apihelp-query+links-param-limit": "Liczba linków do zwrócenia.",
+       "apihelp-query+linkshere-description": "Znajdź wszystkie strony, które linkują do danych stron.",
        "apihelp-query+linkshere-paramvalue-prop-title": "Nazwa każdej strony.",
+       "apihelp-query+linkshere-paramvalue-prop-redirect": "Oznacz, jeśli strona jest przekierowaniem.",
        "apihelp-query+linkshere-param-limit": "Liczba do zwrócenia.",
        "apihelp-query+logevents-description": "Pobierz eventy z logu.",
        "apihelp-query+logevents-example-simple": "Lista ostatnich zarejestrowanych zdarzeń.",
+       "apihelp-query+pageswithprop-param-prop": "Jakie informacje dołączyć:",
+       "apihelp-query+pageswithprop-paramvalue-prop-ids": "Doda ID strony.",
        "apihelp-query+pageswithprop-example-generator": "Pobierz dodatkowe informacje o pierwszych 10 stronach wykorzystując <code>_&#95;NOTOC_&#95;</code>.",
        "apihelp-query+prefixsearch-param-search": "Wyszukaj tekst.",
        "apihelp-query+prefixsearch-param-namespace": "Przestrzenie nazw do przeszukania.",
        "apihelp-query+protectedtitles-param-namespace": "Listuj tylko strony z tych przestrzeni nazw.",
        "apihelp-query+protectedtitles-param-limit": "Łączna liczba stron do zwrócenia.",
        "apihelp-query+protectedtitles-example-simple": "Lista chronionych nagłówków",
+       "apihelp-query+querypage-param-limit": "Liczba zwracanych wyników.",
        "apihelp-query+recentchanges-param-user": "Listuj tylko zmiany dokonane przez tego użytkownika.",
        "apihelp-query+recentchanges-param-excludeuser": "Nie listuj zmian dokonanych przez tego użytkownika.",
        "apihelp-query+recentchanges-param-tag": "Pokazuj tylko zmiany oznaczone tym tagiem.",
        "apihelp-query+recentchanges-example-simple": "Lista ostatnich zmian.",
+       "apihelp-query+redirects-description": "Zwraca wszystkie przekierowania do danej strony.",
        "apihelp-query+redirects-paramvalue-prop-title": "Nazwa każdego przekierowania.",
        "apihelp-query+redirects-param-limit": "Ile przekierowań zwrócić.",
        "apihelp-query+revisions+base-paramvalue-prop-ids": "Identyfikator wersji.",
        "apihelp-query+revisions+base-paramvalue-prop-flags": "Znaczniki wersji (drobne).",
        "apihelp-query+revisions+base-paramvalue-prop-timestamp": "Znacznik czasu wersji.",
+       "apihelp-query+revisions+base-paramvalue-prop-size": "Długość wersji (w bajtach).",
        "apihelp-query+revisions+base-paramvalue-prop-sha1": "SHA-1 (base 16) wersji.",
        "apihelp-query+revisions+base-paramvalue-prop-content": "Tekst wersji.",
        "apihelp-query+revisions+base-paramvalue-prop-tags": "Znaczniki wersji.",
        "apihelp-query+revisions+base-param-limit": "Ograniczenie na liczbę wersji, które będą zwrócone.",
        "apihelp-query+search-description": "Wykonaj wyszukiwanie pełnotekstowe.",
        "apihelp-query+search-param-info": "Które metadane zwrócić.",
+       "apihelp-query+search-paramvalue-prop-size": "Dodaje rozmiar strony w bajtach.",
+       "apihelp-query+search-paramvalue-prop-wordcount": "Dodaje liczbę słów na stronie.",
+       "apihelp-query+search-paramvalue-prop-redirecttitle": "Dodaje tytuł pasującego przekierowania.",
        "apihelp-query+search-param-limit": "Łączna liczba stron do zwrócenia.",
        "apihelp-query+search-param-interwiki": "Dołączaj wyniki wyszukiwań interwiki w wyszukiwarce, jeśli możliwe.",
        "apihelp-query+search-example-simple": "Szukaj <kbd>meaning</kbd>.",
+       "apihelp-query+siteinfo-paramvalue-prop-general": "Ogólne informacje o systemie.",
        "apihelp-query+siteinfo-paramvalue-prop-namespaces": "Lista zarejestrowanych przestrzeni nazw i ich nazwy kanoniczne.",
        "apihelp-query+siteinfo-paramvalue-prop-namespacealiases": "Lista zarejestrowanych aliasów przestrzeni nazw.",
        "apihelp-query+siteinfo-example-simple": "Pobierz informacje o stronie.",
+       "apihelp-query+stashimageinfo-param-sessionkey": "Alias dla $1filekey, dla kompatybilności wstecznej.",
        "apihelp-query+tags-description": "Lista zmian tagów.",
        "apihelp-query+tags-param-limit": "Maksymalna liczba tagów do wyświetlenia.",
+       "apihelp-query+tags-paramvalue-prop-name": "Dodaje nazwę znacznika.",
+       "apihelp-query+tags-paramvalue-prop-displayname": "Dodaje komunikat systemowy dla znacznika.",
+       "apihelp-query+tags-paramvalue-prop-description": "Dodaje opis znacznika.",
+       "apihelp-query+tags-paramvalue-prop-active": "Czy znacznik jest nadal stosowany.",
        "apihelp-query+tags-example-simple": "Lista dostęnych tagów.",
+       "apihelp-query+templates-description": "Zwraca wszystkie strony osadzone w danych stronach.",
        "apihelp-query+templates-param-limit": "Ile szablonów zwrócić?",
+       "apihelp-query+transcludedin-paramvalue-prop-title": "Nazwa każdej strony.",
+       "apihelp-query+transcludedin-paramvalue-prop-redirect": "Oznacz, jeśli strona jest przekierowaniem.",
        "apihelp-query+transcludedin-param-limit": "Ile zwrócić.",
+       "apihelp-query+userinfo-description": "Pobierz informacje o aktualnym użytkowniku.",
+       "apihelp-query+userinfo-paramvalue-prop-registrationdate": "Dodaje datę rejestracji użytkownika.",
+       "apihelp-query+userinfo-example-simple": "Pobierz informacje o aktualnym użytkowniku.",
+       "apihelp-query+userinfo-example-data": "Pobierz dodatkowe informacje o aktualnym użytkowniku.",
+       "apihelp-query+users-description": "Pobierz informacje o liście użytkowników.",
+       "apihelp-query+users-param-prop": "Jakie informacje dołączyć:",
+       "apihelp-query+users-param-users": "Lista użytkowników, o których chcesz pobrać informacje.",
        "apihelp-query+watchlist-param-excludeuser": "Nie wyświetlaj zmian wykonanych przez tego użytkownika.",
        "apihelp-query+watchlist-paramvalue-prop-title": "Dodaje tytuł strony.",
        "apihelp-query+watchlist-paramvalue-prop-user": "Dodaje użytkownika, który wykonał edycję.",
        "apihelp-query+watchlist-paramvalue-prop-comment": "Dodaje komentarz do edycji.",
        "apihelp-query+watchlist-paramvalue-prop-timestamp": "Dodaje znacznik czasu edycji.",
        "apihelp-query+watchlist-paramvalue-prop-sizes": "Dodaje starą i nową długość strony.",
+       "apihelp-query+watchlist-paramvalue-type-external": "Zmiany zewnętrzne.",
        "apihelp-resetpassword-description": "Wyślij użytkownikowi e-mail do resetowania hasła.",
        "apihelp-resetpassword-example-email": "Wyślij e-mail do resetowania hasła do wszystkich użytkowników posiadających adres <kbd>user@example.com</kbd>.",
        "apihelp-stashedit-param-title": "Tytuł edytowanej strony.",
        "apihelp-stashedit-param-sectiontitle": "Tytuł nowej sekcji.",
        "apihelp-stashedit-param-text": "Zawartość strony.",
        "apihelp-tag-param-reason": "Powód zmiany.",
+       "apihelp-unblock-description": "Odblokuj użytkownika.",
        "apihelp-unblock-param-reason": "Powód odblokowania.",
        "apihelp-undelete-param-reason": "Powód przywracania.",
        "apihelp-upload-param-filename": "Nazwa pliku docelowego.",
+       "apihelp-upload-param-watch": "Obserwuj stronę.",
+       "apihelp-upload-param-ignorewarnings": "Ignoruj wszystkie ostrzeżenia.",
+       "apihelp-upload-param-file": "Zawartość pliku.",
        "apihelp-userrights-param-user": "Nazwa użytkownika.",
+       "apihelp-userrights-param-add": "Dodaj użytkownika do tych grup.",
        "apihelp-userrights-param-reason": "Powód zmiany.",
        "apihelp-json-description": "Dane wyjściowe w formacie JSON.",
        "apihelp-jsonfm-description": "Dane wyjściowe w formacie JSON (prawidłowo wyświetlane w HTML).",
        "api-help-permissions": "{{PLURAL:$2|Uprawnienie|Uprawnienia}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|Przydzielone dla}}: $2",
        "api-help-right-apihighlimits": "Użyj wyższych limitów w zapytaniach API (dla zapytań powolnych: $1; dla zapytań szbkich: $2). Limity zapytań powolnych są także stosowane dla parametrów z podanymi wieloma wartościami.",
+       "api-help-open-in-apisandbox": "<small>[otwórz w brudnopisie]</small>",
        "api-credits-header": "Twórcy",
        "api-credits": "Deweloperzy API:\n* Roan Kattouw (główny programista wrzesień 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (twórca, główny programista wrzesień 2006–wrzesień 2007)\n* Brad Jorsch (główny programista 2013–obecnie)\n\nProsimy wysyłać komentarze, sugestie i pytania do mediawiki-api@lists.wikimedia.org\nlub zgłoś błąd na https://phabricator.wikimedia.org/."
 }
index 1f1ac4b..4e14f82 100644 (file)
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Documentação]]\n* [[mw:API:FAQ|FAQ]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Lista de discussão]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Anúncios da API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Erros e solicitações]\n</div>\n<strong>Estado:</strong> Todas as funcionalidades mostradas nesta página deveriam estar a funcionar, mas a API ainda está em desenvolvimento ativo, e pode ser alterada a qualquer momento. Inscreva-se na [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ lista de discussão mediawiki-api-announce] para ser informado acerca das atualizações.\n\n<strong>Pedidos incorretos:</strong> Quando são enviados pedidos incorretos à API, um cabeçalho de HTTP será enviado com a chave \"MediaWiki-API-Error\" e, em seguida, tanto o valor do cabeçalho quanto o código de erro retornado serão definidos com o mesmo valor. Para mais informação, consulte [[mw:API:Errors_and_warnings|API: Errors and warnings]].\n\n<strong>Testes:</strong> Para facilitar os testes de pedidos à API, consulte [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Qual acção a executar.",
        "apihelp-main-param-format": "O formato de saída.",
-       "apihelp-main-param-origin": "Ao aceder à API usando um pedido AJAX entre domínios (CORS), coloque aqui o domínio de origem. Isto tem de ser incluído em todas as verificações prévias, e portanto tem de fazer parte da URI do pedido (e não do conteúdo do POST).\n\nPara pedidos autenticados, este valor tem de corresponder de forma exata a um dos cabeçalhos <code>Origin</code>, portanto tem de ser algo como <kbd>https://en.wikipedia.org</kbd> ou <kbd>https://meta.wikimedia.org</kbd>. Se este parâmetro não for igual ao cabeçalho <code>Origin</code>, será devolvida a resposta 403. Se este parâmetro for igual ao cabeçalho <code>Origin</code> e a origem for permitida (<i>white-listed</i>) os cabeçalhos <code>Access-Control-Allow-Origin</code> e <code>Access-Control-Allow-Credentials</code> serão preenchidos.\n\nPara pedidos não autenticados, especifique o valor <kbd>*</kbd>. Isto fará com que o cabeçalho <code>Access-Control-Allow-Origin</code>\nseja preenchido, mas <code>Access-Control-Allow-Credentials</code> terá o valor <code>false</code> e todos os dados específicos do utilizador serão restringidos.",
+       "apihelp-main-param-maxlag": "O atraso máximo pode ser usado quando o MediaWiki é instalado num <i>cluster</i> de bases de dados replicadas. Para impedir que as operações causem ainda mais atrasos de replicação do <i>site</i>, este parâmetro pode fazer o cliente aguardar até que o atraso de replicação seja inferior ao valor especificado. Caso o atraso atual exceda esse valor, o código de erro <samp>maxlag</samp> é devolvido com uma mensagem como <samp>À espera do servidor $host: $lag segundos de atraso</samp>.<br />Consulte [[mw:Manual:Maxlag_parameter|Manual: Parâmetro maxlag]] para mais informações.",
+       "apihelp-main-param-smaxage": "Definir no cabeçalho HTTP <code>s-maxage</code> de controlo da <i>cache</i> este número de segundos. Os erros nunca são armazenados na <i>cache</i>.",
+       "apihelp-main-param-maxage": "Definir no cabeçalho HTTP <code>max-age</code> de controlo da <i>cache</i> este número de segundos. Os erros nunca são armazenados na <i>cache</i>.",
+       "apihelp-main-param-assertuser": "Verificar que o utilizador atual é o utilizador nomeado.",
+       "apihelp-main-param-requestid": "Qualquer valor fornecido aqui será incluído na resposta. Pode ser usado para distinguir pedidos.",
+       "apihelp-main-param-servedby": "Incluir o nome do servidor que serviu o pedido nos resultados.",
+       "apihelp-main-param-curtimestamp": "Incluir a data e hora atuais no resultado.",
+       "apihelp-main-param-origin": "Ao aceder à API usando um pedido AJAX entre domínios (CORS), coloque aqui o domínio de origem. Isto tem de ser incluído em todas as verificações prévias e, portanto, tem de fazer parte do URI do pedido (e não do conteúdo do POST).\n\nPara pedidos autenticados, este valor tem de corresponder de forma exata a um dos cabeçalhos <code>Origin</code>, portanto tem de ser algo como <kbd>https://en.wikipedia.org</kbd> ou <kbd>https://meta.wikimedia.org</kbd>. Se este parâmetro não for igual ao cabeçalho <code>Origin</code>, será devolvida a resposta 403. Se este parâmetro for igual ao cabeçalho <code>Origin</code> e a origem for permitida (<i>white-listed</i>) os cabeçalhos <code>Access-Control-Allow-Origin</code> e <code>Access-Control-Allow-Credentials</code> serão preenchidos.\n\nPara pedidos não autenticados, especifique o valor <kbd>*</kbd>. Isto fará com que o cabeçalho <code>Access-Control-Allow-Origin</code>\nseja preenchido, mas <code>Access-Control-Allow-Credentials</code> terá o valor <code>false</code> e todos os dados específicos do utilizador serão restringidos.",
+       "apihelp-main-param-uselang": "Língua a usar nas traduções de mensagens. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> com <kbd>siprop=languages</kbd> devolve uma lista de códigos de língua, ou especifique <kbd>user</kbd> para usar a língua nas preferências do utilizador atual, ou especifique <kbd>content</kbd> para usar a língua de conteúdo desta wiki.",
        "apihelp-block-description": "Bloquear um utilizador.",
        "apihelp-block-param-user": "Nome de utilizador(a), endereço ou gama de IP que pretende bloquear.",
+       "apihelp-block-param-expiry": "O período de expiração. Pode ser relativo (p. ex. <kbd>5 meses</kbd> ou <kbd>2 semanas</kbd>) ou absoluto (p. ex. <kbd>2014-09-18T12:34:56Z</kbd>). Se definido como <kbd>infinite</kbd>, <kbd>indefinite</kbd> ou <kbd>never</kbd>, o bloqueio nunca expirará.",
        "apihelp-block-param-reason": "Motivo do bloqueio.",
+       "apihelp-block-param-anononly": "Bloquear só utilizadores anónimos (isto é, impedir edições anónimas a partir deste endereço IP)",
        "apihelp-block-param-nocreate": "Impedir criação de contas.",
+       "apihelp-block-param-autoblock": "Bloquear automaticamente o último endereço IP usado e quaisquer outros endereços IP subsequentes a partir do quais o utilizador tente iniciar uma sessão.",
+       "apihelp-block-param-noemail": "Impedir o utilizador de enviar correio eletrónico através da wiki. (Requer o privilégio <code>blockemail</code>).",
+       "apihelp-block-param-hidename": "Ocultar o nome do utilizador do registo de bloqueios. (Requer o privilégio <code>hideuser</code>).",
+       "apihelp-block-param-allowusertalk": "Permitir que o utilizador edite a sua própria página de discussão (depende de <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
+       "apihelp-block-param-reblock": "Se o utilizador já está bloqueado, sobrescrever o bloco existente.",
+       "apihelp-block-param-watchuser": "Vigiar as páginas de utilizador e de discussão, do utilizador ou do endereço IP.",
+       "apihelp-block-example-ip-simple": "Bloquear o endereço IP <kbd>192.0.2.5</kbd> por três dias com o motivo <kbd>First strike</kbd>.",
+       "apihelp-block-example-user-complex": "Bloquear o utilizador <kbd>Vandal</kbd> indefinidamente com o motivo <kbd>Vandalism</kbd>, e impedir a criação de nova conta e o envio de correio eletrónico.",
+       "apihelp-changeauthenticationdata-description": "Alterar os dados de autenticação do utilizador atual.",
+       "apihelp-checktoken-description": "Verificar a validade de uma chave a partir de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
+       "apihelp-checktoken-param-type": "Tipo de chave que está a ser testado.",
+       "apihelp-checktoken-param-token": "Chave a testar.",
+       "apihelp-checktoken-param-maxtokenage": "Validade máxima da chave, em segundos.",
+       "apihelp-checktoken-example-simple": "Testar a validade de uma chave <kbd>csrf</kbd>.",
+       "apihelp-compare-param-fromtitle": "Primeiro título a comparar.",
+       "apihelp-compare-param-fromid": "Primeiro identificador de página a comparar.",
+       "apihelp-compare-param-fromrev": "Primeira revisão a comparar.",
+       "apihelp-compare-param-totitle": "Segundo título a comparar.",
+       "apihelp-compare-param-toid": "Segundo identificador de página a comparar.",
+       "apihelp-compare-param-torev": "Segunda revisão a comparar.",
+       "apihelp-compare-example-1": "Criar uma lista de diferenças entre as revisões 1 e 2.",
        "apihelp-createaccount-description": "Criar uma nova conta.",
        "apihelp-createaccount-param-name": "Nome de utilizador(a).",
+       "apihelp-createaccount-param-password": "Palavra-passe (ignorada se <var>$1mailpassword</var> está definida).",
+       "apihelp-createaccount-param-domain": "Domínio para autenticação externa (opcional).",
+       "apihelp-createaccount-param-token": "Chave de criação de conta obtida no primeiro pedido.",
        "apihelp-createaccount-param-email": "Endereço de correio eletrónico do utilizador (opcional).",
        "apihelp-createaccount-param-realname": "Nome verdadeiro do utilizador (opcional).",
+       "apihelp-createaccount-param-mailpassword": "Se qualquer valor estiver definido, uma palavra-passe aleatória será enviada por correio eletrónico ao utilizador.",
+       "apihelp-createaccount-param-reason": "Motivo opcional de criação da conta, para ser colocado nos registos.",
+       "apihelp-createaccount-param-language": "Código de língua a definir como padrão para o utilizador (opcional, por omissão é a língua de conteúdo).",
        "apihelp-delete-description": "Eliminar uma página.",
        "apihelp-delete-param-watch": "Adicionar a página à lista de vigiadas do utilizador atual.",
        "apihelp-delete-param-unwatch": "Remover a página da lista de vigiadas do utilizador atual.",
        "apihelp-edit-param-text": "Conteúdo da página.",
        "apihelp-edit-param-minor": "Edição menor.",
        "apihelp-edit-param-bot": "Marcar esta edição como robô.",
+       "apihelp-edit-param-token": "A chave deve ser sempre enviada como último parâmetro, ou pelo menos após o parâmetro $1text.",
        "apihelp-edit-example-edit": "Editar uma página",
        "apihelp-emailuser-description": "Enviar correio eletrónico a utilizador.",
        "apihelp-emailuser-param-subject": "Assunto.",
        "apihelp-emailuser-param-text": "Texto.",
        "apihelp-emailuser-param-ccme": "Enviar-me uma cópia desta mensagem de correio eletrónico.",
-       "apihelp-expandtemplates-description": "Expande todas as predefinições em notação wiki.",
+       "apihelp-expandtemplates-description": "Expande todas as predefinições incluídas na notação wiki.",
        "apihelp-expandtemplates-param-title": "Título da página.",
+       "apihelp-expandtemplates-paramvalue-prop-ttl": "O período máximo a partir do qual devem ser invalidados os armazenamentos na <i>cache</i> do resultado.",
        "apihelp-expandtemplates-example-simple": "Expandir a notação wiki <kbd><nowiki>{{Project:Sandbox}}</nowiki></kbd>.",
        "apihelp-feedcontributions-param-feedformat": "O formato do feed.",
        "apihelp-feedcontributions-param-deletedonly": "Mostrar apenas contribuições eliminadas.",
        "apihelp-feedrecentchanges-example-simple": "Mostrar mudanças recentes",
        "apihelp-help-example-main": "Ajuda para o módulo principal",
        "apihelp-help-example-recursive": "Toda a ajuda numa página",
+       "apihelp-login-description": "Entrar e obter <i>cookies</i> de autenticação.\n\nEsta operação só deve ser usada em combinação com [[Special:BotPasswords]]; a sua utilização para entrar com a conta principal é obsoleta e poderá falhar sem aviso. Para entrar com a conta principal de forma segura, use <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
        "apihelp-login-param-name": "Nome de utilizador(a).",
        "apihelp-login-param-password": "Palavra-passe.",
        "apihelp-login-param-domain": "Domínio (opcional).",
+       "apihelp-login-param-token": "Chave de início de sessão obtida no primeiro pedido.",
+       "apihelp-login-example-gettoken": "Obter uma chave de início de sessão.",
        "apihelp-login-example-login": "Entrar",
        "apihelp-logout-description": "Terminar e limpar dados de sessão.",
        "apihelp-managetags-description": "Executar tarefas de gestão relacionadas com alteração de etiquetas.",
        "apihelp-patrol-description": "Patrulhar uma página ou edição.",
        "apihelp-patrol-example-rcid": "Patrulhar uma mudança recente",
        "apihelp-patrol-example-revid": "Patrulhar uma edição",
+       "apihelp-protect-param-expiry": "Datas e horas de expiração. Se só uma data e hora for definida, será usada para todas as proteções. Use <kbd>infinite</kbd>, <kbd>indefinite</kbd>, <kbd>infinity</kbd> ou <kbd>never</kbd>, para proteção sem expiração.",
        "apihelp-protect-example-protect": "Proteger uma página",
+       "apihelp-purge-description": "Limpar a <i>cache</i> para os títulos especificados.\n\nRequer um pedido POST se o utilizador não tiver iniciado uma sessão.",
+       "apihelp-query-description": "Obter dados do MediaWiki e acerca dele.\n\nTodas as modificações de dados têm primeiro de usar um pedido para adquirir uma chave, de forma a impedir ações abusivas de <i>sites</i> maliciosos.",
+       "apihelp-query-param-prop": "Que propriedades obter para as páginas consultadas.",
+       "apihelp-query-param-iwurl": "Obter, ou não, o URL completo se o título for um <i>link</i> interwikis.",
        "apihelp-query+allcategories-description": "Enumerar todas as categorias.",
+       "apihelp-query+allcategories-param-prop": "Que propriedades obter:",
        "apihelp-query+alldeletedrevisions-example-user": "Lista das últimas 50 contribuições eliminadas pelo utilizador <kbd>Example</kbd>.",
+       "apihelp-query+allmessages-param-prop": "Que propriedades obter.",
+       "apihelp-query+allmessages-example-ipb": "Mostrar mensagens que começam por <kbd>ipb-</kbd>.",
        "apihelp-query+allpages-param-prefix": "Pesquisa para todos os títulos de páginas que comecem com este valor.",
+       "apihelp-query+allpages-param-prexpiry": "Por qual tipo de expiração filtrar a página:\n;indefinite:Obter só páginas com um período de expiração indefinido.\n;definite:Obter só páginas com um período de expiração definido (específico).\n;all:Obter páginas com qualquer período de expiração.",
        "apihelp-query+allpages-example-generator": "Mostrar informação sobre 4 páginas que comecem com a letra <kbd>T</kbd>.",
+       "apihelp-query+mystashedfiles-param-prop": "Que propriedades obter para os ficheiros.",
        "apihelp-query+allusers-example-Y": "Lista de utilizadores que comecem com <kbd>Y</kbd>.",
+       "apihelp-query+authmanagerinfo-description": "Obter informação sobre o atual estado de autenticação.",
+       "apihelp-query+authmanagerinfo-param-requestsfor": "Obter informação sobre os pedidos de autenticação que são necessários para a operação de autenticação especificada.",
+       "apihelp-query+authmanagerinfo-example-securitysensitiveoperation": "Testar se a autenticação é suficiente para a operação <kbd>foo</kbd>.",
        "apihelp-query+backlinks-example-simple": "Mostrar ligações para <kbd>Main page</kbd>.",
        "apihelp-query+backlinks-example-generator": "Obter informações sobre as páginas com ligação para <kbd>Main page</kbd>.",
+       "apihelp-query+blocks-description": "Listar todos os utilizadores e endereços IP bloqueados.",
+       "apihelp-query+blocks-param-ip": "Obter todos os bloqueios aplicáveis a este endereço IP ou intervalo CIDR, incluindo bloqueios de intervalos. Não pode ser usado em conjunto com <var>$3users</var>. Não são aceites intervalos CIDR maiores que IPv4/$1 ou IPv6/$2.",
        "apihelp-query+blocks-param-limit": "O número máximo de bloqueios a listar.",
+       "apihelp-query+blocks-param-prop": "Que propriedades obter:",
+       "apihelp-query+blocks-paramvalue-prop-range": "Adiciona o intervalo de endereços IP afetado pelo bloqueio.",
+       "apihelp-query+blocks-param-show": "Mostrar só os bloqueios que preenchem estes critérios.\nPor exemplo, para ver só bloqueios indefinidos de endereços IP, defina <kbd>$1show=ip|!temp</kbd>.",
        "apihelp-query+categorymembers-description": "Lista de todas as páginas numa categoria fornecida.",
        "apihelp-query+deletedrevs-paraminfo-modes": "{{PLURAL:$1|Modo|Modos}}: $2",
        "apihelp-query+deletedrevs-param-excludeuser": "Não listar edições deste utilizador.",
        "apihelp-query+deletedrevs-param-namespace": "Listar apenas as páginas neste domínio.",
+       "apihelp-query+deletedrevs-param-prop": "Que propriedades obter:\n;revid:Adiciona o identificador de revisão da revisão eliminada.\n;parentid:Adiciona o identificador de revisão da revisão anterior da página.\n;user:Adiciona o utilizador que fez a revisão.\n;userid:Adiciona o identificador do utilizador que fez a revisão.\n;comment:Adiciona o comentário da revisão.\n;parsedcomment:Adiciona o comentário da revisão após passagem pelo analisador sintático.\n;minor:Etiqueta a revisão como uma revisão menor.\n;len:Adiciona o comprimento (em bytes) da revisão.\n;sha1:Adiciona o SHA-1 (base 16) da revisão.\n;content:Adiciona o conteúdo da revisão.\n;token:<span class=\"apihelp-deprecated\">Obsoleto.</span> Fornece a chave da edição.\n;tags:Etiquetas da revisão.",
+       "apihelp-query+extlinks-description": "Devolve todos os URL externos (que não sejam interwikis) das páginas especificadas.",
+       "apihelp-query+extlinks-param-protocol": "Protocolo do URL. Se vazio e <var>$1query</var> está definido, o protocolo é <kbd>http</kbd>. Deixe isto e  <var>$1query</var> vazios para listar todos os <i>links</i> externos.",
+       "apihelp-query+extlinks-param-query": "Texto de pesquisa sem protocolo. Útil para verificar se uma determinada página contém um determinado URL externo.",
        "apihelp-query+extlinks-example-simple": "Obtenha uma lista de ligações externas na <kbd>Main Page</kbd>.",
+       "apihelp-query+exturlusage-description": "Enumerar as páginas que contêm um determinado URL.",
+       "apihelp-query+exturlusage-paramvalue-prop-url": "Adiciona o URL usado na página.",
+       "apihelp-query+exturlusage-param-protocol": "Protocolo do URL. Se vazio e <var>$1query</var> está definido, o protocolo é <kbd>http</kbd>. Deixe isto e  <var>$1query</var> vazios para listar todos os <i>links</i> externos.",
+       "apihelp-query+exturlusage-param-expandurl": "Expandir URL relativos a protocolos com o protocolo canónico.",
        "apihelp-query+filearchive-example-simple": "Mostrar lista de todos os ficheiros eliminados",
+       "apihelp-query+filerepoinfo-param-prop": "Propriedades do repositório a obter (em algumas wikis poderão haver mais disponíveis):\n;apiurl:URL para a API do repositório - útil para obter informação de imagens do servidor.\n;name:A chave para o repositório - usada, por exemplo, em <var>[[mw:Manual:$wgForeignFileRepos|$wgForeignFileRepos]]</var> e nos valores de retorno de [[Special:ApiHelp/query+imageinfo|imageinfo]].\n;displayname:O nome legível da wiki repositório.\n;rooturl:URL de raiz para endereços de imagens.\n;local:Se o repositório é o local ou não.",
+       "apihelp-query+fileusage-param-prop": "Que propriedades obter:",
+       "apihelp-query+imageinfo-paramvalue-prop-url": "Devolve URL para o ficheiro e página de descrição.",
+       "apihelp-query+imageinfo-paramvalue-prop-thumbmime": "Adiciona o tipo MIME da miniatura (requer URL e o parâmetro $1urlwidth).",
+       "apihelp-query+imageinfo-param-urlwidth": "Se $2prop=url está definido, será devolvido um URL para uma imagem redimensionada com este comprimento.\nPor razões de desempenho, se esta opção for usada não serão devolvidas mais de $1 imagens redimensionadas.",
        "apihelp-query+info-description": "Obter informação básica da página.",
+       "apihelp-query+info-paramvalue-prop-url": "Fornece um URL completo, um URL de edição e o URL canónico, para cada página.",
+       "apihelp-query+info-param-token": "Em substituição, usar [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-query+iwbacklinks-param-prop": "Que propriedades obter:",
+       "apihelp-query+iwlinks-param-url": "Obter, ou não, o URL completo (não pode ser usado com $1prop).",
+       "apihelp-query+iwlinks-paramvalue-prop-url": "Adiciona o URL completo.",
+       "apihelp-query+langbacklinks-param-prop": "Que propriedades obter:",
+       "apihelp-query+langlinks-param-url": "Obter, ou não, o URL completo (não pode ser usado com $1prop).",
+       "apihelp-query+langlinks-paramvalue-prop-url": "Adiciona o URL completo.",
+       "apihelp-query+linkshere-param-prop": "Que propriedades obter:",
+       "apihelp-query+logevents-param-prop": "Que propriedades obter:",
+       "apihelp-query+protectedtitles-param-prop": "Que propriedades obter:",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "Adiciona o utilizador responsável pela edição e marca se o utilizador é um endereço IP.",
+       "apihelp-query+recentchanges-param-token": "Em substituição, usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
        "apihelp-query+recentchanges-example-simple": "Lista de mudanças recentes",
+       "apihelp-query+redirects-param-prop": "Que propriedades obter:",
+       "apihelp-query+revisions-param-token": "Que chaves obter para cada revisão.",
+       "apihelp-query+revisions+base-param-prop": "Que propriedades obter para cada revisão:",
+       "apihelp-query+search-param-prop": "Que propriedades devolver:",
        "apihelp-query+search-param-enablerewrites": "Ativar reescrita da consulta interna. Alguns motores de busca podem reescrever a consulta, substituindo-a por outra que consideram que dará melhores resultados, como acontece na correção de erros de ortografia.",
+       "apihelp-query+siteinfo-paramvalue-prop-dbrepllag": "Devolve o servidor da base de dados com o maior atraso de replicação.",
+       "apihelp-query+siteinfo-param-showalldb": "Listar todos os servidores da base de dados, não só aquele que tem maior atraso.",
+       "apihelp-query+siteinfo-example-replag": "Verificar o atraso de replicação atual.",
+       "apihelp-query+tags-param-prop": "Que propriedades obter:",
+       "apihelp-query+tokens-description": "Obtém chaves para operações de modificação de dados.",
+       "apihelp-query+tokens-param-type": "Tipos de chave a pedir.",
+       "apihelp-query+tokens-example-simple": "Obter uma chave csfr (padrão).",
+       "apihelp-query+tokens-example-types": "Obter uma chave de vigilância e uma chave de patrulha.",
+       "apihelp-query+transcludedin-param-prop": "Que propriedades obter:",
+       "apihelp-query+usercontribs-example-ipprefix": "Mostrar as contribuições de todos os endereços IP com o prefixo <kbd>192.0.2.</kbd>.",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">Obsoleto.</span> Obter uma chave para alterar as preferências do utilizador atual.",
+       "apihelp-query+userinfo-paramvalue-prop-email": "Adicionar o correio eletrónico do utilizador e a data de autenticação do correio eletrónico.",
+       "apihelp-query+users-param-token": "Em substituição, usar <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.",
        "apihelp-query+watchlist-param-owner": "Usado com $1token para aceder à lista de páginas vigiadas de outro utilizador.",
        "apihelp-query+watchlist-param-token": "Uma chave de segurança (disponível nas [[Special:Preferences#mw-prefsection-watchlist|preferências]] do utilizador) para permitir acesso à lista de páginas vigiadas de outro utilizador.",
        "apihelp-query+watchlistraw-param-owner": "Usado com $1token para aceder à lista de páginas vigiadas de outro utilizador.",
        "apihelp-query+watchlistraw-param-token": "Uma chave de segurança (disponível nas [[Special:Preferences#mw-prefsection-watchlist|preferências]] do utilizador) para permitir acesso à lista de páginas vigiadas de outro utilizador.",
+       "apihelp-removeauthenticationdata-description": "Remover os dados de autenticação do utilizador atual.",
+       "apihelp-rollback-example-summary": "Reverter as últimas edições da página <kbd>Main Page</kbd> pelo utilizador IP <kbd>192.0.2.5</kbd> com o resumo <kbd>Reverting vandalism</kbd>, e marcar essas edições e a reversão como edições de robôs.",
+       "apihelp-stashedit-description": "Preparar uma edição na <i>cache</i> partilhada.\n\nIsto destina-se a ser usado via AJAX a partir do formulário de edição, para melhorar o desempenho da gravação da página.",
+       "apihelp-tokens-description": "Obter chaves para operações de modificação de dados.\n\nEste módulo é obsoleto e foi substituído por [[Special:ApiHelp/query+tokens|action=query&meta=tokens]].",
+       "apihelp-tokens-param-type": "Tipos de chave a pedir.",
+       "apihelp-tokens-example-edit": "Obter uma chave de edição (padrão).",
+       "apihelp-tokens-example-emailmove": "Obter uma chave de correio eletrónico e uma chave de movimentação.",
        "apihelp-unblock-description": "Desbloquear um utilizador.",
+       "apihelp-unblock-param-user": "Nome de utilizador, endereço IP ou gama de endereços IP a desbloquear. Não pode ser usado em conjunto com <var>$1id</var>.",
        "apihelp-unblock-param-reason": "Motivo para o desbloqueio.",
        "apihelp-undelete-param-title": "Título da página a restaurar.",
        "apihelp-upload-param-watch": "Vigiar página.",
        "apihelp-upload-param-ignorewarnings": "Ignorar todos os avisos.",
+       "apihelp-upload-param-url": "URL de onde obter o ficheiro.",
+       "apihelp-upload-example-url": "Carregar de um URL.",
        "apihelp-userrights-param-user": "Nome de utilizador(a).",
        "apihelp-userrights-param-userid": "ID de utilizador.",
        "apihelp-userrights-param-add": "Adicionar o utilizador a estes grupos.",
        "api-help-param-deprecated": "Obsoleto.",
        "api-help-param-required": "Este parâmetro é obrigatório.",
        "api-help-datatypes-header": "Tipo de dados",
-       "api-help-datatypes": "Alguns tipos de parâmetro na API necessitam de mais explicações:\n;boolean\n:Os parâmetros booleanos funcionam como as caixas de seleção HTML: se o parâmetro for especificado, independentemente do valor, é considerado verdadeiro. Para um valor falso, omitir o parâmetro completo.\n;timestamp\n:Timestamps podem ser especificados em vários formatos. Formato de data e hora ISO 8601 é recomendado. Todos os horários estão em UTC, qualquer inclusão de fuso horário é ignorado.\n:* Data e hora ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (pontuação e <kbd>Z</kbd> são opcionais)\n:* Data e hora ISO 8601 com segundos fracionários (ignorado), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (traços, dois pontos e <kbd>Z</kbd> são opcionais)\n:* Formato do MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Formato numérico genérico, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (fuso horário opcional do <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, or <kbd>-<var>##</var></kbd> são ignorados)\n:* Formato EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*Formato RFC 2822 (o fuso horário pode ser omitido), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato RFC 850 (o fuso horário pode ser omitido), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato C ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Segundos desde 1970-01-01T00:00:00Z como um inteiro de 1 a 13 dígitos (excluindo <kbd>0</kbd>)\n:* A string <kbd>now</kbd>",
+       "api-help-datatypes": "O <i>input</i> para o MediaWiki de ser UTF-8 normalizado de acordo com a norma NFC. O MediaWiki pode converter outros tipos de entrada, mas isto pode causar que algumas operações (tais como [[Special:ApiHelp/edit|edições]] com verificações MD5) falhem.\n\nAlguns tipos de parâmetro nos pedidos à API necessitam de mais explicações:\n;boolean\n:Os parâmetros booleanos funcionam como as caixas de seleção HTML: se o parâmetro for especificado, independentemente do valor, é considerado verdadeiro. Para um valor falso, omitir o parâmetro completo.\n;timestamp\n:As datas e horas podem ser especificados em vários formatos. O formato de data e hora ISO 8601 é recomendado. Todas as horas estão em UTC, qualquer inclusão de fuso horário é ignorada.\n:* Data e hora ISO 8601, <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>Z</kbd> (pontuação e <kbd>Z</kbd> são opcionais)\n:* Data e hora ISO 8601 com segundos fracionários (ignorado), <kbd><var>2001</var>-<var>01</var>-<var>15</var>T<var>14</var>:<var>56</var>:<var>00</var>.<var>00001</var>Z</kbd> (traços, dois pontos e <kbd>Z</kbd> são opcionais)\n:* Formato do MediaWiki, <kbd><var>2001</var><var>01</var><var>15</var><var>14</var><var>56</var><var>00</var></kbd>\n:* Formato numérico genérico, <kbd><var>2001</var>-<var>01</var>-<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd> (fuso horário opcional de <kbd>GMT</kbd>, <kbd>+<var>##</var></kbd>, ou <kbd>-<var>##</var></kbd> são ignorados)\n:* Formato EXIF, <kbd><var>2001</var>:<var>01</var>:<var>15</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:*Formato RFC 2822 (o fuso horário pode ser omitido), <kbd><var>Mon</var>, <var>15</var> <var>Jan</var> <var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato RFC 850 (o fuso horário pode ser omitido), <kbd><var>Monday</var>, <var>15</var>-<var>Jan</var>-<var>2001</var> <var>14</var>:<var>56</var>:<var>00</var></kbd>\n:* Formato C ctime, <kbd><var>Mon</var> <var>Jan</var> <var>15</var> <var>14</var>:<var>56</var>:<var>00</var> <var>2001</var></kbd>\n:* Segundos desde 1970-01-01T00:00:00Z como um inteiro de 1 a 13 dígitos (excluindo <kbd>0</kbd>)\n:* O texto <kbd>now</kbd>\n;separador alternativo de valores múltiplos\n:Os parâmetros que aceitam vários valores são normalmente fornecidos com os valores separados por uma barra vertical (<i>pipe</i>), por exemplo <kbd>parâmetro=valor1|valor2</kbd> ou <kbd>parâmetro=valor1%7Cvalor2</kbd>. Se um valor contém a barra vertical, use U+001F (Separador de Unidades) como separador ''e'' prefixe o valor com U+001F, isto é, <kbd>parâmetro=%1Fvalor1%1Fvalor2</kbd>.",
        "api-help-param-type-limit": "Tipo: inteiro ou <kbd>max</kbd>",
        "api-help-param-type-boolean": "Tipo: boolean ([[Special:ApiHelp/main#main/datatypes|detalhes]])",
        "api-help-param-type-user": "Tipo: {{PLURAL:$1|1=nome de utilizador|2=lista de nomes de utilizadores}}",
        "api-help-param-multi-max": "O número máximo de valores é {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} para robôs).",
        "api-help-param-default": "Padrão: $1",
        "api-help-param-default-empty": "Padrão: <span class=\"apihelp-empty\">(vazio)</span>",
+       "api-help-param-token": "Uma chave \"$1\" obtida de [[Special:ApiHelp/query+tokens|action=query&meta=tokens]]",
+       "api-help-param-token-webui": "Para efeitos de compatibilidade, a chave usada na interface <i>web</i> também é aceite.",
        "api-help-param-no-description": "<span class=\"apihelp-empty\">(sem descrição)</span>",
        "api-help-examples": "{{PLURAL:$1|Exemplo|Exemplos}}:",
        "api-help-permissions": "{{PLURAL:$1|Permissão|Permissiões}}:",
        "api-help-permissions-granted-to": "{{PLURAL:$1|Concedida a|Concedidas a}}: $2",
        "api-help-open-in-apisandbox": "<small>[abrir na página de testes]</small>",
+       "api-help-authmanager-general-usage": "O procedimento geral para usar este módulo é:\n# Obtenha os campos disponíveis em <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$4</kbd> e uma chave <kbd>$5</kbd> de <kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>.\n# Apresente os campos ao utilizador e obtenha os dados fornecidos por este.\n# Publique-os para este módulo, fornecendo <var>$1returnurl</var> e quaisquer campos relevantes.\n# Verifique o <samp>status</samp> na resposta.\n#* Se recebeu <samp>PASS</samp> ou <samp>FAIL</samp>, terminou. A operação terá tido sucesso ou falhado.\n#* Se recebeu <samp>UI</samp>, apresente os novos campos ao utilizador e obtenha os dados fornecidos por este. Depois publique-os para este módulo com <var>$1continue</var> e os campos relevantes preenchidos, e repita o passo 4.\n#* Se recebeu <samp>REDIRECT</samp>, encaminhe o utilizador para <samp>redirecttarget</samp> e aguarde o retorno para o URL <var>$1returnurl</var>. Depois publique para este módulo com <var>$1continue</var> e quaisquer campos que tenham sido passados ao URL de retorno, e repita o passo 4.\n#* Se recebeu <samp>RESTART</samp>, isso significa que a autenticação funcionou mas não temos uma conta de utilizador associada. Pode tratá-lo como <samp>UI</samp> ou como <samp>FAIL</samp>.",
+       "api-help-authmanagerhelper-request": "Usar este pedido de autenticação, com o <samp>id</samp> devolvido por <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$1</kbd>.",
+       "api-help-authmanagerhelper-mergerequestfields": "Combinar a informação de todos os pedidos de autenticação numa única matriz.",
+       "api-help-authmanagerhelper-returnurl": "O URL de retorno para fluxos de autenticação por terceiros tem de ser absoluto. É obrigatório fornecer este URL ou <var>$1continue</var>.\n\nTipicamente, após receber uma resposta <samp>REDIRECT</samp>, abrirá um <i>browser</i> ou uma <i>web view</i> para o URL <samp>redirecttarget</samp> especificado, para dar lugar ao fluxo de autenticação por terceiros. Quando o fluxo terminar, a terceira entidade enviará o <i>browser</i> ou a <i>web view</i> para este URL. Deve extrair do URL quaisquer parâmetros de consulta ou de POST, e passá-los como um pedido <var>$1continue</var> a este módulo da API.",
+       "api-help-authmanagerhelper-additional-params": "Este módulo aceita parâmetros adicionais, dependendo dos pedidos de autenticação disponíveis. Use <kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd> com <kbd>amirequestsfor=$1</kbd> (ou uma resposta anterior deste módulo, se aplicável) para determinar os pedidos disponíveis e os campos que estes utilizam.",
        "api-credits-header": "Créditos",
        "api-credits": "Programadores API:\n* Roan Kattouw (programador principal Set 2007–2009)\n* Victor Vasiliev\n* Bryan Tong Minh\n* Sam Reed\n* Yuri Astrakhan (criador, programador-líder Set 2006–Set 2007)\n* Brad Jorsch (programador-líder 2013–presente)\n\nPor favor, envie os seus comentários, sugestões e perguntas para mediawiki-api@lists.wikimedia.org ou reporte um erro técnico em https://phabricator.wikimedia.org/."
 }
index aa0d99a..6abd59f 100644 (file)
                        "Лилиә",
                        "Айсар",
                        "Гизатуллина",
-                       "MaxSem"
+                       "MaxSem",
+                       "Irus"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|Документация]]\n* [[mw:API:FAQ|ЧаВО]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api Почтовая рассылка]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce Новости API]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R Ошибки и запросы]\n</div>\n<strong>Статус:</strong> Все отображаемые на этой странице функции должны работать, однако API находится в статусе активной разработки и может измениться в любой момент. Подпишитесь на [https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ почтовую рассылку mediawiki-api-announce], чтобы быть в курсе обновлений.\n\n<strong>Ошибочные запросы:</strong> Если API получает запрос с ошибкой, вернётся заголовок HTTP с ключом «MediaWiki-API-Error», после чего значение заголовка и код ошибки будут отправлены обратно и установлены в то же значение. Более подробную информацию см. [[mw:API:Errors_and_warnings|API: Ошибки и предупреждения]].\n\n<strong>Тестирование:</strong> для удобства тестирования API-запросов, см. [[Special:ApiSandbox]].",
        "apihelp-main-param-action": "Действие, которое следует выполнить.",
        "apihelp-main-param-format": "Формат вывода.",
+       "apihelp-main-param-maxlag": "Максимальное отставание может быть использован, когда Медиавики устанавливается на реплицируемой базы данных кластера. Чтобы спасти действий, способных причинить больше отставать репликации сайта, этот параметр может заставлять клиента ждать до задержки репликации меньше указанного значения. В случае чрезмерной задержки, код ошибки <samp>maxlag</samp> возвращается с сообщением <samp>ждет $ведущий: $отставать секунд отстала</samp>.<br />См. [[mw:Manual:Maxlag_parameter|Maxlag параметр]] для получения дополнительной информации.",
        "apihelp-main-param-smaxage": "Устанавливает значение HTTP-заголовка Cache-Control <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
        "apihelp-main-param-maxage": "Устанавливает значение HTTP-заголовка Cache-Control <code>s-maxage</code> в заданное число секунд. Ошибки никогда не кэшируются.",
        "apihelp-main-param-assert": "Удостовериться, что пользователь авторизован, если задано <kbd>user</kbd>, или что имеет права бота, если задано <kbd>bot</kbd>.",
+       "apihelp-main-param-assertuser": "Убедитесь, что текущий пользователь является именем пользователя.",
        "apihelp-main-param-requestid": "Любое заданное здесь значение будет включено в ответ. Может быть использовано для различения запросов.",
        "apihelp-main-param-servedby": "Включить в результаты имя хоста, обработавшего запрос.",
        "apihelp-main-param-curtimestamp": "Включить в результаты временную метку.",
        "apihelp-main-param-origin": "При обращении к API, используя кросс-доменный AJAX-запрос (CORS), задайте параметру значение исходного домена. Он должен быть включён в любой предварительный запрос и таким образом должен быть частью URI-запроса (не тела POST).\n\nДля аутентифицированных запросов он должен точно соответствовать одному из источников в заголовке <code>Origin</code>, так что он должен быть задан наподобие <kbd>https://ru.wikipedia.org</kbd> или <kbd>https://meta.wikimedia.org</kbd>. Если параметр не соответствует заголовку <code>Origin</code>, будет возвращён ответ с кодом ошибки 403. Если параметр соответствует заголовку <code>Origin</code>, и источник находится в белом списке, будут установлены заголовки <code>Access-Control-Allow-Origin</code> и <code>Access-Control-Allow-Credentials</code>.\n\nДля неаутентифицированных запросов укажите значение <kbd>*</kbd>. Это приведёт к установке заголовка <code>Access-Control-Allow-Origin</code> заголовка должен быть установлен, но <code>Access-Control-Allow-Credentials</code> примет значение <code>false</code> и все пользовательские данные будут ограничены.",
+       "apihelp-main-param-uselang": "Язык, используемый для перевода Сообщений. <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd> с <kbd>siprop=языки</kbd> возвращает список кодов языков, или указать <kbd>пользователей</kbd> , чтобы использовать текущий язык пользователя предпочтения, или указать <kbd>контента</kbd> для использования этой Вики содержание язык.",
        "apihelp-block-description": "Блокировка участника.",
        "apihelp-block-param-user": "Имя участника, IP-адрес или диапазон IP-адресов, которые вы хотите заблокировать.",
        "apihelp-block-param-reason": "Причина блокировки.",
@@ -41,6 +45,8 @@
        "apihelp-block-param-allowusertalk": "Позволяет участникам редактировать их собственные страницы обсуждения (зависит от <var>[[mw:Manual:$wgBlockAllowsUTEdit|$wgBlockAllowsUTEdit]]</var>).",
        "apihelp-block-param-reblock": "Если участник уже заблокирован, перезаписать существующую блокировку.",
        "apihelp-block-param-watchuser": "Следить за страницей пользователя или IP-участника и страницей обсуждения.",
+       "apihelp-changeauthenticationdata-description": "Изменить данные проверки подлинности для текущего пользователя.",
+       "apihelp-changeauthenticationdata-example-password": "Попытка изменить текущий пароль пользователя в <kbd>ExamplePassword</kbd>.",
        "apihelp-checktoken-param-type": "Тип маркера проходит тестирование.",
        "apihelp-checktoken-param-token": "токен для проверки",
        "apihelp-checktoken-param-maxtokenage": "Максимально допустимый возраст токена (в секундах).",
        "apihelp-edit-param-text": "Содержание страницы.",
        "apihelp-edit-param-minor": "Незначительное изменение (малая правка).",
        "apihelp-edit-param-notminor": "Значительное изменение (обычная, не «малая», правка).",
-       "apihelp-edit-param-bot": "Пометить правку как сделанную ботом.",
+       "apihelp-edit-param-bot": "Пометьте этот редактировать как изменить скрипт.",
+       "apihelp-edit-param-recreate": "Возвращает сообщение об ошибке не, если страница тем временем был удален.",
        "apihelp-edit-param-createonly": "Не редактировать страницу, если она уже существует.",
        "apihelp-edit-param-nocreate": "Выбрасывать ошибку, если страницы не существует.",
        "apihelp-edit-param-watch": "Добавить страницу к текущему списку наблюдения пользователя.",
        "apihelp-edit-param-unwatch": "Удалить страницу из списка наблюдения текущего пользователя.",
+       "apihelp-edit-param-watchlist": "Безоговорочно добавить или удалить страницы из списка наблюдения текущего пользователя, используйте предпочтения или не менять часы.",
+       "apihelp-edit-param-md5": "MD5-хеша $1текстовый параметр, или $1prependtext и $1appendtext параметры объединяются. Если установлен, то изменение не будет сделано, если хэш является правильным.",
+       "apihelp-edit-param-prependtext": "Добавьте этот текст в начале страницы. Переопределяет $1текст.",
+       "apihelp-edit-param-appendtext": "Добавьте этот текст внизу страницы. Переопределяет $1текст.\n\nИспользуйте вместо этого параметра $1раздел = new, чтобы добавить новый раздел.",
+       "apihelp-edit-param-undo": "Отменить это изменение. Переопределяет $1текст, $1prependtext и $1appendtext.",
        "apihelp-edit-param-redirect": "Автоматически разрешать редиректы.",
        "apihelp-edit-param-contentformat": "Формат сериализации содержимого, используемый для ввода текста.",
+       "apihelp-edit-param-contentmodel": "Модель содержимого нового содержимого.",
+       "apihelp-edit-param-token": "Маркер всегда должен быть послан в качестве последнего параметра, или, по крайней мере, после $1текстовый параметр.",
        "apihelp-edit-example-edit": "Редактировать страницу",
        "apihelp-edit-example-prepend": "Добавить магическое слово <kbd>_&#95;NOTOC_&#95;</kbd> в начало страницы.",
        "apihelp-edit-example-undo": "Отменить изменения с 13579 по 13585 с добавлением автоматического описания правки.",
        "apihelp-emailuser-param-text": "Содержание письма",
        "apihelp-emailuser-param-ccme": "Отправить копию этого сообщения мне.",
        "apihelp-emailuser-example-email": "Отправить письмо пользователю <kbd>WikiSysop</kbd> с текстом <kbd>Content</kbd>.",
-       "apihelp-expandtemplates-description": "Разворачивает все шаблоны в wikitext.",
+       "apihelp-expandtemplates-description": "Расширяет все шаблоны в тексте.",
        "apihelp-expandtemplates-param-title": "Заголовок страницы.",
        "apihelp-expandtemplates-param-text": "Викитекст для конвертирования",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Расширенный викитекст",
        "apihelp-filerevert-description": "Файлды иҫке версияға ҡайтарырға.",
        "apihelp-filerevert-param-filename": "Целевое имя файла без префикса File:.",
        "apihelp-filerevert-param-comment": "Загрузить комментарий.",
+       "apihelp-filerevert-example-revert": "<kbd>Wiki.png</kbd>на версии <kbd>2011-03-05T15:27:40Z</kbd> сброса.",
        "apihelp-help-param-helpformat": "Белешмә яҙыу форматы.",
        "apihelp-help-example-main": "Помощь по главному модулю.",
        "apihelp-help-example-recursive": "Вся справка в одном разделе.",
        "apihelp-options-example-reset": "Сбросить все настройки.",
        "apihelp-paraminfo-description": "Получить информацию о модулях API.",
        "apihelp-paraminfo-param-helpformat": "Формат строк справки.",
+       "apihelp-parse-param-prop": "Какие части информации получить:",
+       "apihelp-parse-paramvalue-prop-text": "Дает разобранного текста в тексте.",
+       "apihelp-parse-paramvalue-prop-langlinks": "Возвращает язык ссылки в анализируемой wikitext.",
+       "apihelp-parse-paramvalue-prop-categorieshtml": "Возвращает HTML-версию категорий.",
        "apihelp-parse-param-disablepp": "Урынына <var>$1disablelimitreport</var> ҡулланырға.",
        "apihelp-parse-param-preview": "Алдан ҡарау режимында синтаксик анализ",
        "apihelp-parse-param-disabletoc": "Не включать в вывод таблицу содержания.",
        "apihelp-protect-example-unprotect2": "Бер ниндәй сикләүҙәр ҡуймай биттән һаҡлауҙы алырға.",
        "apihelp-purge-param-forcelinkupdate": "Обновление связей таблиц.",
        "apihelp-purge-param-forcerecursivelinkupdate": "Һылтанманы һәм таблицаны яңыртығыҙ һәм был битте шаблон итеп ҡулланған башҡа биттәр өсөн һылтанмаларҙы ла яңыртығыҙ.",
+       "apihelp-purge-example-generator": "Продувка первые 10 страниц в основном пространстве имен.",
        "apihelp-query-param-list": "Какие списки использовать",
        "apihelp-query-param-meta": "Какие метаданные использовать",
        "apihelp-query+allcategories-description": "Перечислить все категории.",
        "apihelp-query+allmessages-description": "Был сайттан хәбәр ҡайтарыу.",
        "apihelp-query+allmessages-param-prop": "Ниндәй үҙенсәлектәрҙе ҡайтарырға.",
        "apihelp-query+allmessages-param-args": "Аргументтар Хәбәрҙәрҙә биреләсәк.",
+       "apihelp-query+allmessages-param-lang": "Вернуть сообщения на этом языке.",
        "apihelp-query+blocks-example-simple": "Список блоков.",
        "apihelp-query+categories-param-limit": "Сколько категорий на возврат.",
        "apihelp-query+categorymembers-param-sort": "Свойство для сортировки.",
index 1a079df..8b53c02 100644 (file)
@@ -21,6 +21,7 @@
        "apihelp-main-param-smaxage": "Встановити <code>s-maxage</code> HTTP кеш-контроль заголовок на стільки секунд. Помилки ніколи не кешуються.",
        "apihelp-main-param-maxage": "Встановити <code>max-age</code> HTTP кеш-контроль заголовок на стільки секунд. Помилки ніколи не кешуються.",
        "apihelp-main-param-assert": "Перевірити, що користувач увійшов у систему, якщо задано <kbd>user</kbd>, або має права бота, якщо задано <kbd>bot</kbd>.",
+       "apihelp-main-param-assertuser": "Перевірити, чи поточний користувач є найменованим користувачем.",
        "apihelp-main-param-requestid": "Будь-яке значення, вказане тут, буде включене у відповідь. Може використовуватися, щоб відрізняти запити.",
        "apihelp-main-param-servedby": "Включити в результати ім'я хоста, який обробив запит.",
        "apihelp-main-param-curtimestamp": "Включити в результат поточну мітку часу.",
        "apihelp-edit-param-tags": "Змінити теги для версії.",
        "apihelp-edit-param-minor": "Незначне редагування.",
        "apihelp-edit-param-notminor": "Не «незначне» редагування.",
-       "apihelp-edit-param-bot": "Ð\9fомÑ\96Ñ\82ити редагування як зроблене ботом.",
+       "apihelp-edit-param-bot": "Ð\9fознаÑ\87ити редагування як зроблене ботом.",
        "apihelp-edit-param-basetimestamp": "Мітка часу для основної версії, використовується для виявлення конфлікту редагувань. Може бути отримана через [[Special:ApiHelp/query+revisions|action=query&prop=revisions&rvprop=timestamp]].",
        "apihelp-edit-param-starttimestamp": "Мітка часу, з якого почався процес редагування, використовується для виявлення конфліктів редагувань. Відповідне значення можна отримати з допомогою <var>[[Special:ApiHelp/main|curtimestamp]]</var> на початку процесу редагування (напр., коли завантажується вміст сторінки для редагування).",
        "apihelp-edit-param-recreate": "Відкинути будь-які помилки щодо цієї сторінки, вилучені нещодавно.",
        "apihelp-emailuser-param-text": "Тіло листа.",
        "apihelp-emailuser-param-ccme": "Надіслати копію цього повідомлення мені.",
        "apihelp-emailuser-example-email": "Відправити листа користувачу <kbd>WikiSysop</kbd> з текстом <kbd>Content</kbd>.",
-       "apihelp-expandtemplates-description": "Розгортає усі шаблони у вікітекст.",
+       "apihelp-expandtemplates-description": "Розгортає усі шаблони в межах вікірозмітки.",
        "apihelp-expandtemplates-param-title": "Заголовок сторінки.",
        "apihelp-expandtemplates-param-text": "Вікітекст для перетворення.",
        "apihelp-expandtemplates-param-revid": "ID версії, для <nowiki>{{REVISIONID}}</nowiki> і подібних змінних.",
index 4117204..105639a 100644 (file)
@@ -21,7 +21,8 @@
                        "PhiLiP",
                        "Arthur2e5",
                        "損齋",
-                       "Myy730"
+                       "Myy730",
+                       "D41D8CD98F"
                ]
        },
        "apihelp-main-description": "<div class=\"hlist plainlinks api-main-links\">\n* [[mw:API:Main_page|文档]]\n* [[mw:API:FAQ|常见问题]]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api 邮件列表]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-api-announce API公告]\n* [https://phabricator.wikimedia.org/maniphest/query/GebfyV4uCaLd/#R 程序错误与功能请求]\n</div>\n<strong>状态信息:</strong>本页所展示的所有特性都应正常工作,但是API仍在开发当中,将会随时变化。请订阅[https://lists.wikimedia.org/pipermail/mediawiki-api-announce/ mediawiki-api-announce 邮件列表]以便获得更新通知。\n\n<strong>错误请求:</strong>当API收到错误请求时,HTTP header将会返回一个包含\"MediaWiki-API-Error\"的值,随后header的值与error code将会送回并设置为相同的值。详细信息请参阅[[mw:API:Errors_and_warnings|API: 错误与警告]]。\n\n<strong>测试中:</strong>测试API请求的易用性,请参见[[Special:ApiSandbox]]。",
        "apihelp-options-description": "更改当前用户的偏好设置。\n\n只有注册在核心或者已安装扩展中的选项,或者具有<code>userjs-</code>键值前缀(旨在被用户脚本使用)的选项可被设置。",
        "apihelp-options-param-reset": "将参数设置重置为网站默认值。",
        "apihelp-options-param-resetkinds": "当<var>$1reset</var>选项被设置时,要重置的选项类型列表。",
-       "apihelp-options-param-change": "æ\9b´æ\94¹å\88\97表ï¼\8c以name=valueæ ¼å¼\8få\8c\96ï¼\88ä¾\8bå¦\82skin=vectorï¼\89ã\80\82å\80¼ä¸\8dè\83½å\8c\85å\90«ç®¡é\81\93å­\97符ã\80\82å¦\82æ\9e\9c没æ\8f\90ä¾\9bå\80¼ï¼\88ç\94\9aè\87³æ²¡æ\9c\89ç­\89å\8f·ï¼\89ï¼\8cä¾\8bå¦\82optionname|otheroption|...ï¼\8cé\80\89项å°\86é\87\8d置为é»\98认å\80¼。",
+       "apihelp-options-param-change": "æ\9b´æ\94¹å\88\97表ï¼\8c以name=valueæ ¼å¼\8få\8c\96ï¼\88ä¾\8bå¦\82skin=vectorï¼\89ã\80\82å¦\82æ\9e\9c没æ\8f\90ä¾\9bå\80¼ï¼\88ç\94\9aè\87³æ²¡æ\9c\89ç­\89å\8f·ï¼\89ï¼\8cä¾\8bå¦\82optionname|otheroption|...ï¼\8cé\80\89项å°\86é\87\8d置为é»\98认å\80¼ã\80\82å¦\82æ\9e\9cä»»ä½\95é\80\9aè¿\87ç\9a\84å\80¼å\8c\85å\90«ç®¡é\81\93å­\97符ï¼\88<kbd>|</kbd>ï¼\89ï¼\8c请æ\94¹ç\94¨[[Special:ApiHelp/main#main/datatypes|æ\9b¿ä»£å¤\9aå\80¼å\88\86é\9a\94符]]以正确æ\93\8dä½\9c。",
        "apihelp-options-param-optionname": "应设置为由<var>$1optionvalue</var>提供值的选项名称。",
-       "apihelp-options-param-optionvalue": "用于由<var>$1optionname</var>指定的选项的值,可以包含管道字符。",
+       "apihelp-options-param-optionvalue": "用于由<var>$1optionname</var>指定的选项的值。",
        "apihelp-options-example-reset": "重置所有用户设置。",
        "apihelp-options-example-change": "更改<kbd>skin</kbd>和<kbd>hideminor</kbd>设置。",
        "apihelp-options-example-complex": "重置所有设置,然后设置<kbd>skin</kbd>和<kbd>nickname</kbd>。",
        "apihelp-query+logevents-paramvalue-prop-ids": "添加日志活动的ID。",
        "apihelp-query+logevents-paramvalue-prop-title": "为日志事件添加页面标题。",
        "apihelp-query+logevents-paramvalue-prop-type": "添加日志活动的类型。",
-       "apihelp-query+logevents-paramvalue-prop-user": "为日志事件添加用户责任。",
-       "apihelp-query+logevents-paramvalue-prop-userid": "为日志事件添加对此负责的用户ID。",
+       "apihelp-query+logevents-paramvalue-prop-user": "添加对此日志事件负责的用户。",
+       "apihelp-query+logevents-paramvalue-prop-userid": "添加对此日志事件负责的用户的ID。",
        "apihelp-query+logevents-paramvalue-prop-timestamp": "为日志活动添加时间戳。",
        "apihelp-query+logevents-paramvalue-prop-comment": "添加日志活动的摘要。",
        "apihelp-query+logevents-paramvalue-prop-parsedcomment": "添加被解析的日志活动的摘要。",
        "apihelp-query+recentchanges-param-excludeuser": "不要列出此用户的更改。",
        "apihelp-query+recentchanges-param-tag": "只列出带此标签的更改。",
        "apihelp-query+recentchanges-param-prop": "包含的额外信息束:",
-       "apihelp-query+recentchanges-paramvalue-prop-user": "为编辑和标签添加用户责任,如果它们是IP的话。",
+       "apihelp-query+recentchanges-paramvalue-prop-user": "添加造成编辑的用户,并标出它们是否是IP。",
        "apihelp-query+recentchanges-paramvalue-prop-userid": "为编辑添加用户ID责任。",
        "apihelp-query+recentchanges-paramvalue-prop-comment": "为编辑添加摘要。",
        "apihelp-query+recentchanges-paramvalue-prop-parsedcomment": "为编辑添加解析的摘要。",
        "api-help-right-apihighlimits": "在API查询中使用更高的上限(慢查询:$1;快查询:$2)。慢查询的限制也适用于多值参数。",
        "api-help-open-in-apisandbox": "<small>[在沙盒中打开]</small>",
        "api-help-authmanager-general-usage": "使用此模块的一般程序是:\n# 通过<kbd>amirequestsfor=$4</kbd>取得来自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的可用字段,和来自<kbd>[[Special:ApiHelp/query+tokens|action=query&meta=tokens]]</kbd>的<kbd>$5</kbd>令牌。\n# 向用户显示字段,并获得其提交内容。\n# 发送至此模块,提供<var>$1returnurl</var>及任何相关字段。\n# 在响应中检查<samp>status</samp>。\n#* 如果您收到了<samp>PASS</samp>或<samp>FAIL</samp>,您已经完成。操作要么成功,要么不成功。\n#* 如果您收到了<samp>UI</samp>,present the new fields to the user and obtain their submission. Then post to this module with <var>$1continue</var> and the relevant fields set, and repeat step 4.\n#* 如果您收到了<samp>REDIRECT</samp>,direct the user to the <samp>redirecttarget</samp> and wait for the return to <var>$1returnurl</var>. Then post to this module with <var>$1continue</var> and any fields passed to the return URL, and repeat step 4.\n#* 如果您收到了<samp>RESTART</samp>,that means the authentication worked but we don't have a linked user account. You might treat this as <samp>UI</samp> or as <samp>FAIL</samp>.",
+       "api-help-authmanagerhelper-requests": "只使用这些身份验证请求,通过返回自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的<samp>id</samp>与<kbd>amirequestsfor=$1</kbd>,或来自此模块之前的响应。",
        "api-help-authmanagerhelper-request": "使用此身份验证请求,通过返回自<kbd>[[Special:ApiHelp/query+authmanagerinfo|action=query&meta=authmanagerinfo]]</kbd>的<samp>id</samp>与<kbd>amirequestsfor=$1</kbd>。",
        "api-help-authmanagerhelper-messageformat": "返回消息使用的格式。",
        "api-help-authmanagerhelper-mergerequestfields": "合并用于所有身份验证请求的字段信息至一个数组中。",
diff --git a/includes/api/i18n/zu.json b/includes/api/i18n/zu.json
new file mode 100644 (file)
index 0000000..f9a5eb6
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Irus"
+               ]
+       },
+       "apihelp-block-description": "Vimbela umsebenzisi",
+       "apihelp-block-param-user": "Igama lomsebenzisi, ikheli le-IP, noma ikheli le-IP uhla ukuvimba.",
+       "apihelp-block-param-reblock": "Uma umsebenzisi usevele ivinjiwe, isula block ekhona."
+}
index eeb233e..d88a5b2 100644 (file)
@@ -2382,7 +2382,7 @@ class AuthManager implements LoggerAwareInterface {
                $session->set( 'AuthManager:lastAuthTimestamp', time() );
                $session->persist();
 
-               \ScopedCallback::consume( $delay );
+               \Wikimedia\ScopedCallback::consume( $delay );
 
                \Hooks::run( 'UserLoggedIn', [ $user ] );
        }
index 6834ac0..dc8c589 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Cache
  */
 use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
 
 /**
  * MediaWiki message cache structure version.
@@ -227,17 +228,14 @@ class MessageCache {
         * or false if populating empty cache fails. Also returns true if MessageCache
         * is disabled.
         *
-        * @param bool|string $code Language to which load messages
-        * @param integer $mode Use MessageCache::FOR_UPDATE to skip process cache
+        * @param string $code Language to which load messages
+        * @param integer $mode Use MessageCache::FOR_UPDATE to skip process cache [optional]
         * @throws MWException
         * @return bool
         */
-       function load( $code = false, $mode = null ) {
+       protected function load( $code, $mode = null ) {
                if ( !is_string( $code ) ) {
-                       # This isn't really nice, so at least make a note about it and try to
-                       # fall back
-                       wfDebug( __METHOD__ . " called without providing a language code\n" );
-                       $code = 'en';
+                       throw new InvalidArgumentException( "Missing language code" );
                }
 
                # Don't do double loading...
@@ -864,6 +862,8 @@ class MessageCache {
                                }
                                $alreadyTried[ $langcode ] = true;
                        }
+               } else {
+                       $uckey = null;
                }
 
                // Check the CDB cache
@@ -881,7 +881,8 @@ class MessageCache {
                                        continue;
                                }
 
-                               $message = $this->getMsgFromNamespace( $this->getMessagePageName( $code, $uckey ), $code );
+                               $message = $this->getMsgFromNamespace(
+                                       $this->getMessagePageName( $code, $uckey ), $code );
 
                                if ( $message !== false ) {
                                        return $message;
@@ -946,28 +947,47 @@ class MessageCache {
                        return false;
                }
 
-               # Try the individual message cache
+               // Try the individual message cache
                $titleKey = wfMemcKey( 'messages', 'individual', $title );
-               $entry = $this->wanCache->get( $titleKey );
+
+               $curTTL = null;
+               $entry = $this->wanCache->get(
+                       $titleKey,
+                       $curTTL,
+                       [ wfMemcKey( 'messages', $code ) ]
+               );
+               $entry = ( $curTTL >= 0 ) ? $entry : false;
+
                if ( $entry ) {
                        if ( substr( $entry, 0, 1 ) === ' ' ) {
                                $this->mCache[$code][$title] = $entry;
-
-                               // The message exists, so make sure a string
-                               // is returned.
+                               // The message exists, so make sure a string is returned
                                return (string)substr( $entry, 1 );
                        } elseif ( $entry === '!NONEXISTENT' ) {
                                $this->mCache[$code][$title] = '!NONEXISTENT';
 
                                return false;
                        } else {
-                               # Corrupt/obsolete entry, delete it
+                               // Corrupt/obsolete entry, delete it
                                $this->wanCache->delete( $titleKey );
                        }
                }
 
-               # Try loading it from the database
-               $revision = Revision::newFromTitle( Title::makeTitle( NS_MEDIAWIKI, $title ) );
+               // Try loading it from the database
+               $dbr = wfGetDB( DB_REPLICA );
+               $cacheOpts = Database::getCacheSetOptions( $dbr );
+               // Use newKnownCurrent() to avoid querying revision/user tables
+               $titleObj = Title::makeTitle( NS_MEDIAWIKI, $title );
+               if ( $titleObj->getLatestRevID() ) {
+                       $revision = Revision::newKnownCurrent(
+                               $dbr,
+                               $titleObj->getArticleID(),
+                               $titleObj->getLatestRevID()
+                       );
+               } else {
+                       $revision = false;
+               }
+
                if ( $revision ) {
                        $content = $revision->getContent();
                        if ( !$content ) {
@@ -994,7 +1014,7 @@ class MessageCache {
                                        $message = false; // negative caching
                                } else {
                                        $this->mCache[$code][$title] = ' ' . $message;
-                                       $this->wanCache->set( $titleKey, ' ' . $message, $this->mExpiry );
+                                       $this->wanCache->set( $titleKey, ' ' . $message, $this->mExpiry, $cacheOpts );
                                }
                        }
                } else {
@@ -1003,7 +1023,7 @@ class MessageCache {
 
                if ( $message === false ) { // negative caching
                        $this->mCache[$code][$title] = '!NONEXISTENT';
-                       $this->wanCache->set( $titleKey, '!NONEXISTENT', $this->mExpiry );
+                       $this->wanCache->set( $titleKey, '!NONEXISTENT', $this->mExpiry, $cacheOpts );
                }
 
                return $message;
index 76dd754..993f0b7 100644 (file)
@@ -63,7 +63,7 @@ class ChangeTags {
                        if ( !$tag ) {
                                continue;
                        }
-                       $description = self::tagDescription( $tag );
+                       $description = self::tagDescription( $tag, $context );
                        if ( $description === false ) {
                                continue;
                        }
@@ -98,11 +98,12 @@ class ChangeTags {
         * we consider the tag hidden, and return false.
         *
         * @param string $tag Tag
+        * @param IContextSource $context
         * @return string|bool Tag description or false if tag is to be hidden.
         * @since 1.25 Returns false if tag is to be hidden.
         */
-       public static function tagDescription( $tag ) {
-               $msg = wfMessage( "tag-$tag" );
+       public static function tagDescription( $tag, IContextSource $context ) {
+               $msg = $context->msg( "tag-$tag" );
                if ( !$msg->exists() ) {
                        // No such message, so return the HTML-escaped tag name.
                        return htmlspecialchars( $tag );
index 4bf2f73..d15daec 100644 (file)
@@ -36,11 +36,13 @@ class NumericUppercaseCollation extends UppercaseCollation {
                // shorter numbers before longer ones; if identical, then the characters will be compared, which
                // generates the correct results for numbers of equal length.
                $sortkey = preg_replace_callback( '/\d+/', function ( $matches ) {
-                       $len = strlen( $matches[0] );
+                       // Strip any leading zeros
+                       $number = ltrim( $matches[0], '0' );
+                       $len = strlen( $number );
                        // This allows sequences of up to 65536 numeric characters to be handled correctly. One byte
                        // would allow only for 256, which doesn't feel future-proof.
                        $prefix = chr( floor( $len / 256 ) ) . chr( $len % 256 );
-                       return '0' . $prefix . $matches[0];
+                       return '0' . $prefix . $number;
                }, $sortkey );
 
                return $sortkey;
index feef87d..4d6c68c 100644 (file)
@@ -67,7 +67,7 @@ class HashConfig implements Config, MutableConfig {
        }
 
        /**
-        * @see Config::set
+        * @see MutableConfig::set
         */
        public function set( $name, $value ) {
                $this->settings[$name] = $value;
index a8cad9f..ebedb7e 100644 (file)
@@ -25,6 +25,7 @@
 use Liuggio\StatsdClient\Factory\StatsdDataFactory;
 use MediaWiki\Logger\LoggerFactory;
 use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
 
 /**
  * Group all the pieces relevant to the context of a request into one instance
index 93b3ef6..6aa3831 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  */
 use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
 
 /**
  * Update object handling the cleanup of links tables after a page was deleted.
index 8954304..c7d378e 100644 (file)
@@ -21,6 +21,7 @@
  */
 
 use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
 
 /**
  * Class the manages updates of *_link tables as well as similar extension-managed tables
index 4a1f190..736cb06 100644 (file)
@@ -87,7 +87,12 @@ class MWExceptionHandler {
         * @param Exception|Throwable $e
         */
        public static function rollbackMasterChangesAndLog( $e ) {
-               $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+               $services = MediaWikiServices::getInstance();
+               if ( $services->isServiceDisabled( 'DBLoadBalancerFactory' ) ) {
+                       return; // T147599
+               }
+
+               $lbFactory = $services->getDBLoadBalancerFactory();
                if ( $lbFactory->hasMasterChanges() ) {
                        $logger = LoggerFactory::getInstance( 'Bug56269' );
                        $logger->warning(
index bd0b120..e31374c 100644 (file)
@@ -29,12 +29,19 @@ class PermissionsError extends ErrorPageError {
        public $permission, $errors;
 
        /**
-        * @param string $permission A permission name.
-        * @param string[] $errors Error message keys
+        * @param string|null $permission A permission name or null if unknown
+        * @param array $errors Error message keys or [key, param...] arrays; must not be empty if
+        *   $permission is null
+        * @throws \InvalidArgumentException
         */
        public function __construct( $permission, $errors = [] ) {
                global $wgLang;
 
+               if ( $permission === null && !$errors ) {
+                       throw new \InvalidArgumentException( __METHOD__ .
+                               ': $permission and $errors cannot both be empty' );
+               }
+
                $this->permission = $permission;
 
                if ( !count( $errors ) ) {
index 9df9360..d3a14fa 100644 (file)
@@ -2234,12 +2234,7 @@ class LocalFileDeleteBatch {
 
                // Bitfields to further suppress the content
                if ( $this->suppress ) {
-                       $bitfield = 0;
-                       // This should be 15...
-                       $bitfield |= Revision::DELETED_TEXT;
-                       $bitfield |= Revision::DELETED_COMMENT;
-                       $bitfield |= Revision::DELETED_USER;
-                       $bitfield |= Revision::DELETED_RESTRICTED;
+                       $bitfield = Revision::SUPPRESSED_ALL;
                } else {
                        $bitfield = 'oi_deleted';
                }
@@ -2259,7 +2254,6 @@ class LocalFileDeleteBatch {
                                        'fa_deleted_timestamp' => $encTimestamp,
                                        'fa_deleted_reason' => $encReason,
                                        'fa_deleted' => $this->suppress ? $bitfield : 0,
-
                                        'fa_name' => 'img_name',
                                        'fa_archive_name' => 'NULL',
                                        'fa_size' => 'img_size',
index 1f4d99e..cadb502 100644 (file)
@@ -147,6 +147,7 @@ class HTMLForm extends ContextSource {
                'namespaceselect' => 'HTMLSelectNamespace',
                'namespaceselectwithbutton' => 'HTMLSelectNamespaceWithButton',
                'tagfilter' => 'HTMLTagFilter',
+               'sizefilter' => 'HTMLSizeFilterField',
                'submit' => 'HTMLSubmitField',
                'hidden' => 'HTMLHiddenField',
                'edittools' => 'HTMLEditTools',
index c9fcb09..fee5d63 100644 (file)
@@ -120,6 +120,8 @@ class HTMLMultiSelectField extends HTMLFormField implements HTMLNestedFilterable
         * @return OOUI\CheckboxMultiselectInputWidget
         */
        public function getInputOOUI( $value ) {
+               $this->mParent->getOutput()->addModules( 'oojs-ui-widgets' );
+
                $attr = $this->getTooltipAndAccessKey();
                $attr['id'] = $this->mID;
                $attr['name'] = "{$this->mName}[]";
diff --git a/includes/htmlform/fields/HTMLSizeFilterField.php b/includes/htmlform/fields/HTMLSizeFilterField.php
new file mode 100644 (file)
index 0000000..c767d8f
--- /dev/null
@@ -0,0 +1,72 @@
+<?php
+
+/**
+ * A size filter field for use on query-type special pages. It looks a bit like:
+ *
+ *    (o) Min size  ( ) Max size:  [       ] bytes
+ *
+ * Minimum size limits are represented using a positive integer, while maximum
+ * size limits are represented using a negative integer.
+ */
+class HTMLSizeFilterField extends HTMLIntField {
+       function getSize() {
+               return isset( $this->mParams['size'] ) ? $this->mParams['size'] : 9;
+       }
+
+       function getInputHTML( $value ) {
+               $attribs = [];
+               if ( !empty( $this->mParams['disabled'] ) ) {
+                       $attribs['disabled'] = 'disabled';
+               }
+
+               $html = Xml::radioLabel(
+                       $this->msg( 'minimum-size' )->text(),
+                       $this->mName . '-mode',
+                       'min',
+                       $this->mID . '-mode-min',
+                       $value >= 0,
+                       $attribs
+               );
+               $html .= '&#160;' . Xml::radioLabel(
+                       $this->msg( 'maximum-size' )->text(),
+                       $this->mName . '-mode',
+                       'max',
+                       $this->mID . '-mode-max',
+                       $value < 0,
+                       $attribs
+               );
+               $html .= '&#160;' . parent::getInputHTML( $value ? abs( $value ) : '' );
+               $html .= '&#160;' . $this->msg( 'pagesize' )->parse();
+
+               return $html;
+       }
+
+       // No OOUI yet
+       function getInputOOUI( $value ) {
+               return false;
+       }
+
+       /**
+        * @param WebRequest $request
+        *
+        * @return string
+        */
+       function loadDataFromRequest( $request ) {
+               $size = $request->getInt( $this->mName );
+               if ( !$size ) {
+                       return $this->getDefault();
+               }
+               $size = abs( $size );
+
+               // negative numbers represent "max", positive numbers represent "min"
+               if ( $request->getVal( $this->mName . '-mode' ) === 'max' ) {
+                       return -$size;
+               } else {
+                       return $size;
+               }
+       }
+
+       protected function needsLabel() {
+               return false;
+       }
+}
index 6f066ce..6a702e9 100644 (file)
@@ -222,12 +222,11 @@ abstract class DatabaseUpdater {
         *
         * @since 1.17
         *
-        * @param array $update The update to run. Format is the following:
-        *                first item is the callback function, it also can be a
-        *                simple string with the name of a function in this class,
-        *                following elements are parameters to the function.
-        *                Note that callback functions will receive this object as
-        *                first parameter.
+        * @param array $update The update to run. Format is [ $callback, $params... ]
+        *   $callback is the method to call; either a DatabaseUpdater method name or a callable.
+        *   Must be serializable (ie. no anonymous functions allowed). The rest of the parameters
+        *   (if any) will be passed to the callback. The first parameter passed to the callback
+        *   is always this object.
         */
        public function addExtensionUpdate( array $update ) {
                $this->extensionUpdates[] = $update;
index 33e1a1f..6dfa28b 100644 (file)
@@ -587,9 +587,7 @@ class PostgresInstaller extends DatabaseInstaller {
                        return $status;
                }
 
-               /**
-                * @var $conn Database
-                */
+               /** @var $conn DatabasePostgres */
                $conn = $status->value;
 
                if ( $conn->tableExists( 'archive' ) ) {
@@ -606,7 +604,7 @@ class PostgresInstaller extends DatabaseInstaller {
 
                        return $status;
                }
-               $error = $conn->sourceFile( $conn->getSchemaPath() );
+               $error = $conn->sourceFile( $this->getSchemaPath( $conn ) );
                if ( $error !== true ) {
                        $conn->reportQueryError( $error, 0, '', __METHOD__ );
                        $conn->rollback( __METHOD__ );
index 6926650..d52f8f1 100644 (file)
@@ -65,6 +65,7 @@
        "config-oracle-def-ts": "পূর্বনির্ধারিত টেবিলস্পেস",
        "config-oracle-temp-ts": "সাময়কি টেবিলস্পেস:",
        "config-type-mssql": "মাইক্রোসফট এসকিউএল সার্ভার",
+       "config-dbsupport-postgres": "* MySQL-এর বিকল্প হিসেবে [{{int:version-db-postgres-url}} PostgreSQL] হচ্ছে একটি জনপ্রিয় ওপেন সোর্স ডাটাবেস ব্যবস্থা। ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL সমর্থনসহ কিভাবে PHP সঙ্কলন করবেন])",
        "config-header-mysql": "মাইএসকিউএল সেটিংস",
        "config-header-postgres": "পোস্টগ্রেএসকিউএল সেটিংস",
        "config-header-sqlite": "এসকিউলাইট সেটিংস",
index c696650..06e54e1 100644 (file)
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki podporuje následující databázové systémy:\n\n$1\n\nPokud v nabídce níže nevidíte databázový systém, který chcete použít, musíte pro zapnutí podpory následovat instrukce odkázané výše.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] je pro MediaWiki hlavní platformou a je podporováno nejlépe. MediaWiki pracuje také s [{{int:version-db-mariadb-url}} MariaDB] a [{{int:version-db-percona-url}} Percona Server], které jsou s MySQL kompatibilní. ([http://www.php.net/manual/en/mysql.installation.php Jak zkompilovat PHP s podporou MySQL])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] je populární otevřený databázový systém používaný jako alternativa k MySQL. Mohou se vyskytnout ještě nějaké menší chyby, použití ve výrobním prostředí se nedoporučuje.  ([http://www.php.net/manual/en/pgsql.installation.php Jak přeložit PHP s podporou PostgreSQL])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] je populární otevřený databázový systém používaný jako alternativa k MySQL. ([http://www.php.net/manual/en/pgsql.installation.php Jak přeložit PHP s podporou PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] je velmi dobře podporovaný odlehčený databázový systém. ([http://www.php.net/manual/en/pdo.installation.php Jak přeložit PHP s podporou SQLite], používá PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] je komerční podniková databáze. ([http://www.php.net/manual/en/oci8.installation.php Jak přeložit PHP s podporou OCI8])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] je komerční podniková databáze pro Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Jak přeložit PHP s podporou SQLSRV])",
index 2783bca..3fe893a 100644 (file)
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki unterstützt die folgenden Datenbanksysteme:\n\n$1\n\nSofern unterhalb nicht das Datenbanksystem angezeigt wird, das verwendet werden soll, muss dieses noch verfügbar gemacht werden. Oben ist zu jedem unterstützten Datenbanksystem ein Link zur entsprechenden Anleitung vorhanden.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] ist das von MediaWiki primär unterstützte Datenbanksystem. MediaWiki funktioniert auch mit [{{int:version-db-mariadb-url}} MariaDB] und [{{int:version-db-percona-url}} Percona Server], die MySQL-kompatibel sind. ([https://www.php.net/manual/en/mysqli.installation.php Anleitung zur Kompilierung von PHP mit MySQL-Unterstützung])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ist ein beliebtes Open-Source-Datenbanksystem und eine Alternative zu MySQL. Es gibt allerdings einige kleinere Implementierungsfehler, so dass von der Nutzung in einer Produktivumgebung abgeraten wird. ([https://www.php.net/manual/de/pgsql.installation.php Anleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ist ein beliebtes Open-Source-Datenbanksystem und eine Alternative zu MySQL. ([https://www.php.net/manual/de/pgsql.installation.php Anleitung zur Kompilierung von PHP mit PostgreSQL-Unterstützung])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] ist ein verschlanktes Datenbanksystem, das auch gut unterstützt wird ([https://www.php.net/manual/de/pdo.installation.php Anleitung zur Kompilierung von PHP mit SQLite-Unterstützung], verwendet PHP Data Objects (PDO))",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] ist eine kommerzielle Unternehmensdatenbank ([https://www.php.net/manual/en/oci8.installation.php Anleitung zur Kompilierung von PHP mit OCI8-Unterstützung])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ist eine gewerbliche Unternehmensdatenbank für Windows. ([https://www.php.net/manual/de/sqlsrv.installation.php Anleitung zur Kompilierung von PHP mit SQLSRV-Unterstützung])",
index 6a6c0ff..1f7333a 100644 (file)
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki supports the following database systems:\n\n$1\n\nIf you do not see the database system you are trying to use listed below, then follow the instructions linked above to enable support.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] is the primary target for MediaWiki and is best supported. MediaWiki also works with [{{int:version-db-mariadb-url}} MariaDB] and [{{int:version-db-percona-url}} Percona Server], which are MySQL compatible. ([http://www.php.net/manual/en/mysqli.installation.php How to compile PHP with MySQL support])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is a popular open source database system as an alternative to MySQL. There may be some minor outstanding bugs, and it is not recommended for use in a production environment. ([http://www.php.net/manual/en/pgsql.installation.php How to compile PHP with PostgreSQL support])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] is a popular open source database system as an alternative to MySQL. ([http://www.php.net/manual/en/pgsql.installation.php How to compile PHP with PostgreSQL support])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] is a lightweight database system that is very well supported. ([http://www.php.net/manual/en/pdo.installation.php How to compile PHP with SQLite support], uses PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] is a commercial enterprise database. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP with OCI8 support])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] is a commercial enterprise database for Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php How to compile PHP with SQLSRV support])",
index afcd9ed..4398492 100644 (file)
@@ -31,7 +31,8 @@
                        "AlvaroMolina",
                        "Indiralena",
                        "Peter Bowman",
-                       "Dgstranz"
+                       "Dgstranz",
+                       "Irus"
                ]
        },
        "config-desc": "El instalador de MediaWiki",
@@ -89,6 +90,7 @@
        "config-memory-bad": "<strong>Advertencia:</strong> el parámetro <code>memory_limit</code> de PHP es $1.\nProbablemente sea demasiado bajo.\n¡La instalación puede fallar!",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] está instalado",
        "config-apc": "[http://www.php.net/apc APC] está instalado",
+       "config-apcu": "[http://www.php.net/apcu APCu] está instalado",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] está instalado",
        "config-no-cache-apcu": "<strong>Advertencia:</strong> No se pudo encontrar [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] o [http://www.iis.net/download/WinCacheForPhp WinCache].\nEl caché de objetos no está activado.",
        "config-mod-security": "<strong>Advertencia:</strong> tu servidor web tiene activado [http://modsecurity.org/ mod_security]/mod_security2. Muchas de sus configuraciones comunes pueden causar problemas a MediaWiki u otro software que permita a los usuarios publicar contenido arbitrario. De ser posible, deberías desactivarlo. Si no, consulta la [http://modsecurity.org/documentation/ documentación de mod_security] o contacta con el administrador de tu servidor si encuentras errores aleatorios.",
        "config-cache-options": "Configuración de la caché de objetos:",
        "config-cache-help": "El almacenamiento en caché de objetos se utiliza para mejorar la velocidad de MediaWiki mediante el almacenamiento en caché los datos usados más frecuentemente.\nA los sitios medianos y grandes se les recomienda que permitirlo. También es beneficioso para los sitios pequeños.",
        "config-cache-none": "Sin almacenamiento en caché (no se pierde ninguna funcionalidad, pero la velocidad puede resentirse en sitios grandes)",
-       "config-cache-accel": "Almacenamiento en caché de objetos PHP (APC, XCache o WinCache)",
+       "config-cache-accel": "Almacenamiento en caché de objetos PHP (APC, APCu, XCache o WinCache)",
        "config-cache-memcached": "Utilizar Memcached (necesita ser instalado y configurado aparte)",
        "config-memcached-servers": "Servidores Memcached:",
        "config-memcached-help": "Lista de direcciones IP que serán usadas por Memcached.\nDeben especificarse una por cada línea y especificar el puerto a utilizar. Por ejemplo:\n127.0.0.1:11211\n192.168.1.25:1234",
index 95224e9..43a39e0 100644 (file)
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki prend en charge ces systèmes de bases de données :\n\n$1\n\nSi vous ne voyez pas le système de base de données que vous essayez d’utiliser ci-dessous, alors suivez les instructions ci-dessus (voir liens) pour activer la prise en charge.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] est le premier choix pour MediaWiki et est le mieux pris en charge. MediaWiki fonctionne aussi avec [{{int:version-db-mariadb-url}} MariaDB] et [{{int:version-db-percona-url}} Percona Server], qui sont compatibles avec MySQL. ([http://www.php.net/manual/en/mysqli.installation.php Comment compiler PHP avec le support MySQL])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] est un système de base de données populaire et ''open source'' qui peut être une alternative à MySQL. Son support peut contenir quelques bogues mineurs et n'est pas recommandé dans un environnement de production.  ([http://www.php.net/manual/en/pgsql.installation.php Comment compiler PHP avec le support de PostgreSQL])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] est un système de base de données populaire et ''open source'' qui peut être une alternative à MySQL ([http://www.php.net/manual/en/pgsql.installation.php Comment compiler PHP avec le support de PostgreSQL]).",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] est un système de base de données léger bien pris en charge. ([http://www.php.net/manual/fr/pdo.installation.php Comment compiler PHP avec la prise en charge de SQLite], en utilisant PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] est un système commercial de gestion de base de données d’entreprise. ([http://www.php.net/manual/en/oci8.installation.php Comment compiler PHP avec le support OCI8])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] est une base de données commerciale d’entreprise pour Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Comment compiler PHP avec le support de SQLSRV])",
index 64ad12a..f7d8d07 100644 (file)
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki soporta os seguintes sistemas de bases de datos:\n\n$1\n\nSe non ve listado a continuación o sistema de base de datos que intenta usar, siga as instrucións ligadas enriba para activar o soporte.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] é o obxectivo principal para MediaWiki e está mellor soportado. MediaWiki tamén funciona con [{{int:version-db-mariadb-url}} MariaDB] e [{{int:version-db-percona-url}} Percona Server], que son compatibles con MySQL. ([http://www.php.net/manual/en/mysqli.installation.php  Como compilar PHP con compatibilidade MySQL])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] é un sistema de base de datos popular e de código aberto como alternativa a MySQL. É posible que haxa algúns pequenos erros e non se recomenda o seu uso nunha contorna de produción. ([http://www.php.net/manual/en/pgsql.installation.php Como compilar PHP con compatibilidade PostgreSQL])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] é un sistema de base de datos popular e de código aberto como alternativa a MySQL. ([http://www.php.net/manual/en/pgsql.installation.php Como compilar PHP con compatibilidade PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] é un sistema de base de datos lixeiro moi ben soportado. ([http://www.php.net/manual/en/pdo.installation.php Como compilar o PHP con soporte SQLite], emprega PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] é un sistema comercial de xestión de base de datos de nivel empresarial. ([http://www.php.net/manual/en/oci8.installation.php Como compilar o PHP con compatibilidade OCI8])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] é un sistema comercial de xestión de base de datos de nivel empresarial para Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Como compilar o PHP con compatibilidade SQLSRV])",
index ac67394..e98988c 100644 (file)
@@ -67,6 +67,7 @@
        "config-memory-bad": "'''אזהרה:''' ערך האפשרות <code>memory_limit</code> של PHP הוא $1.\nזה כנראה נמוך מדי.\nההתקנה עשויה להיכשל!",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] מותקן",
        "config-apc": "[http://www.php.net/apc APC] מותקן",
+       "config-apcu": "[http://www.php.net/apcu APCu] מותקן",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] מותקן",
        "config-no-cache-apcu": "<strong>אזהרה:</strong> לא נמצא [http://www.php.net/apcu APCu]‏, [http://xcache.lighttpd.net/ XCache] או [http://www.iis.net/download/WinCacheForPhp WinCache].\nמטמון עצמים לא מופעל.",
        "config-mod-security": "'''אזהרה''': בשרת הווב שלך מופעל [http://modsecurity.org/ mod_security]. אם הוא לא מוגדר טוב, זה יכול לגרום לבעיות במדיה־ויקי ובתכנה אחרת שמאפשרת למשתמשים לשלוח תוכן שרירותי.\nיש לקרוא את [http://modsecurity.org/documentation/ התיעוד של mod_security] או ליצור קשר עם אנשי התמיכה של שירותי האירוח שלכם אם מופיעות לך שגיאות אקראיות.",
index cc197c8..069bf68 100644 (file)
        "config-type-mssql": "Microsoft SQL Szerver",
        "config-support-info": "A MediaWiki a következő adatbázisrendszereket támogatja:\n\n$1\n\nHa az alábbi listán nem találod azt a rendszert, melyet használni szeretnél, a fenti linken található instrukciókat követve engedélyezheted a támogatását.",
        "config-dbsupport-mysql": "* A [{{int:version-db-mysql-url}} MySQL] a MediaWiki elsődleges célpontja, így a legjobban támogatott. A MediaWiki elfut [{{int:version-db-mariadb-url}} MariaDB-n] és [{{int:version-db-percona-url}} Percona Serveren] is, mivel ezek MySQL-kompatibilisek. ([http://www.php.net/manual/en/mysql.installation.php Hogyan fordítható a PHP MySQL-támogatással])",
-       "config-dbsupport-postgres": "* A [{{int:version-db-postgres-url}} PostgreSQL] népszerű, nyílt forráskódú adatbázisrendszer, a MySQL alternatívája ([http://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással]). Több apró, javítatlan hiba is előfordulhat, így nem ajánlott éles környezetben használni. ([http://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással])",
+       "config-dbsupport-postgres": "* A [{{int:version-db-postgres-url}} PostgreSQL] népszerű, nyílt forráskódú adatbázisrendszer, a MySQL alternatívája. ([http://www.php.net/manual/en/pgsql.installation.php Hogyan fordítható a PHP PostgreSQL-támogatással])",
        "config-dbsupport-sqlite": "* Az [{{int:version-db-sqlite-url}} SQLite] egy könnyű, nagyon jól támogatott adatbázisrendszer. ([http://www.php.net/manual/en/pdo.installation.php Hogyan fordítható a PHP SQLite-támogatással], PDO-t használ)",
        "config-dbsupport-oracle": "* Az [{{int:version-db-oracle-url}} Oracle] kereskedelmi, vállalati adatbázisrendszer. ([http://www.php.net/manual/en/oci8.installation.php Hogyan fordítható a PHP OCI8-támogatással])",
        "config-dbsupport-mssql": "* A [{{int:version-db-mssql-url}} Microsoft SQL Server] kereskedelmi, vállalati adatbázisrendszer. ([http://www.php.net/manual/en/sqlsrv.installation.php Hogyan fordítható a PHP SQLSRV-támogatással])",
        "config-cache-options": "Objektum-gyorsítótárazás beállításai:",
        "config-cache-help": "Az objektumgyorsítótárazás célja, hogy felgyorsítsa a MediaWiki működését a gyakran használt adatok gyorsítótárazásával.\nKözepes vagy nagyobb oldalak esetén erősen ajánlott a használata, de kisebb oldalak esetén is hasznos lehet.",
        "config-cache-none": "Nincs gyorsítótárazás (minden funkció működik, de nagyobb wiki esetében lassabb működést eredményezhet)",
-       "config-cache-accel": "PHP-objektumok gyorsítótárazása (APC, XCache or WinCache)",
+       "config-cache-accel": "PHP-objektumok gyorsítótárazása (APC, APCu, XCache vagy WinCache)",
        "config-cache-memcached": "Memcached használata (további telepítés és konfigurálás szükséges)",
        "config-memcached-servers": "Memcached-szerverek:",
        "config-memcached-help": "Azon IP-címek listája, melyeket a Memcached használhat.\nVesszővel kell elválasztani őket, és meg kell adni a portot is. Például:\n 127.0.0.1:11211\n 192.168.1.25:11211",
index d6ba2fe..8ad4347 100644 (file)
@@ -2,8 +2,11 @@
        "@metadata": {
                "authors": [
                        "Умар",
-                       "ElizaMag"
+                       "ElizaMag",
+                       "Adam-Yourist"
                ]
        },
+       "config-localsettings-key": "Кердадаккхара дIоагIа:",
+       "config-localsettings-badkey": "Iа белгалдаьккхад харцахь дола кердадаккхара дIоагIа.",
        "config-help": "новкъoстал"
 }
index 0c3b2b4..8d4f8be 100644 (file)
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki supporta i seguenti sistemi di database:\n\n$1\n\nSe fra quelli elencati qui sotto non vedi il sistema di database che vorresti utilizzare, seguire le istruzioni linkate sopra per abilitare il supporto.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] è la configurazione preferibile per MediaWiki ed è quella meglio supportata. MediaWiki funziona anche con [{{int:version-db-mariadb-url}} MariaDB] e [{{int:version-db-percona-url}} Percona Server], che sono compatibili con MySQL.([http://www.php.net/manual/en/mysqli.installation.php Come compilare PHP con supporto MySQL])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] è un popolare sistema di database open source come alternativa a MySQL. Ci possono essere alcuni bug minori in sospeso, e non è raccomandato per l'uso in un ambiente di produzione. ([http://www.php.net/manual/en/pgsql.installation.php Come compilare PHP con supporto PostgreSQL])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] è un popolare sistema di database open source come alternativa a MySQL. ([http://www.php.net/manual/en/pgsql.installation.php Come compilare PHP con supporto PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]  è un sistema di database leggero, che è supportato molto bene. ([http://www.php.net/manual/en/pdo.installation.php Come compilare PHP con supporto SQLite], utilizza PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] è un database di un'impresa commerciale. ([http://www.php.net/manual/en/oci8.installation.php Come compilare PHP con supporto OCI8])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] è un database di un'impresa commerciale per Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Come compilare PHP con supporto SQLSRV])",
index 271f3d6..ce3ae88 100644 (file)
        "config-type-mssql": "Microsoft SQL 서버",
        "config-support-info": "미디어위키는 다음의 데이터베이스 시스템을 지원합니다:\n\n$1\n\n데이터베이스 시스템이 표시되지 않을 때 아래에 나열된 다음 지원을 활성화하려면 위의 링크된 지시에 따라 설치해볼 수 있습니다.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]은 미디어위키의 기본 대상이며 가장 잘 지원됩니다. 미디어위키는 또한 MySQL와 호환되는 [{{int:version-db-mariadb-url}} MariaDB]와 [{{int:version-db-percona-url}} Percona 서버]에서도 작동합니다. ([http://www.php.net/manual/en/mysql.installation.php MySQL 지원으로 PHP를 컴파일하는 방법])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]은 MySQL의 대안으로서 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL 지원으로 PHP를 컴파일하는 방법]) 몇 가지 해결하지 못한 사소한 버그가 있을 수 있으며, 이를 제작 환경에서 사용하지 않는 것이 좋습니다.",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]은 MySQL의 대안으로서 인기 있는 오픈 소스 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pgsql.installation.php PostgreSQL 지원으로 PHP를 컴파일하는 방법])",
        "config-dbsupport-sqlite": "*  [{{int:version-db-sqlite-url}} SQLite]는 매우 잘 지원되고 가벼운 데이터베이스 시스템입니다. ([http://www.php.net/manual/en/pdo.installation.php SQLite 지원으로 PHP를 컴파일하는 방법], PDO 사용)",
        "config-dbsupport-oracle": "*  [{{int:version-db-oracle-url}} Oracle]은 상용 기업 데이터베이스입니다. ([http://www.php.net/manual/en/oci8.installation.php OCI8 지원으로 PHP를 컴파일하는 방법])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL 서버]는 Windows용 상용 기업 데이터베이스입니다. ([http://www.php.net/manual/en/sqlsrv.installation.php SQLSRV 지원으로 PHP를 컴파일하는 방법])",
        "config-cache-options": "개체 캐싱을 위한 설정:",
        "config-cache-help": "개체 캐싱은 자주 사용하는 데이터를 캐싱하여 미디어위키의 속도를 개선하는 데 사용합니다.\n큰 규모의 사이트는 이를 많이 사용하도록 권장하고 있으며, 소규모 사이트들도 물론 혜택을 볼 수 있습니다.",
        "config-cache-none": "캐시하지 않음 (기능이 삭제되지는 않지만 큰 위키 사이트에 속도가 영향을 받을 수 있습니다)",
-       "config-cache-accel": "PHP 개체 캐싱 (APC, XCache 또는 WinCache)",
+       "config-cache-accel": "PHP 개체 캐싱 (APC, APCu, XCache 또는 WinCache)",
        "config-cache-memcached": "Memcached 사용 (추가적인 설치와 설정이 필요합니다)",
        "config-memcached-servers": "Memcached 서버:",
        "config-memcached-help": "Memcached의 사용하기 위한 IP 주소 목록입니다.\n한 줄에 하나씩 사용할 포트를 지정해야 합니다. 예를 들어:\n 127.0.0.1:11211\n 192.168.1.25:1234",
index d0490b4..b23288c 100644 (file)
@@ -84,7 +84,7 @@
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ass e beléiften Open-Source-Datebanksystem an eng Alternativ zu MySQL. Et gëtt awer e puer kleng Implementatiounsfeeler, dofir gëtt vun der Notzung an engem Produktivsystem ofgeroden. ([http://www.php.net/manual/de/pgsql.installation.php Uleedung fir d'Kompilatoun vu PHP mat PostgreSQL-Ënnerstëtzung])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] ass e beléiften Open-Source-Datebanksystem an eng Alternativ zu MySQL. ([http://www.php.net/manual/de/pgsql.installation.php Uleedung fir d'Kompilatoun vu PHP mat PostgreSQL-Ënnerstëtzung])",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] ass eng kommerziell Datebank-Software. ([http://www.php.net/manual/en/oci8.installation.php How to compile PHP mat OCI8 Ënnerstëtzung])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] ass eng kommerziell Datebank-Software fir Windows. ([http://www.php.net/manual/en/sqlsrv.installation.php Wéi PHP mat SQLSRV Ënnerstëtzung kompiléieren])",
        "config-header-mysql": "MySQL-Astellungen",
index 41e526a..3660b82 100644 (file)
@@ -70,7 +70,7 @@
        "config-db-install-account": "Vartotojo paskyra diegimui",
        "config-db-username": "Duomenų bazės vartotojo vardas:",
        "config-db-password": "Duomenų bazės slaptažodis:",
-       "config-db-wiki-account": "Vartotojo paskyra normaliai operacijai",
+       "config-db-wiki-account": "Naudotojo paskyra įprastai operacijai",
        "config-db-prefix": "Duomenų bazės lentelės priešdėlis:",
        "config-mysql-old": "MySQL $1 ar vėlesnė yra reikalinga. Jūs turite $2.",
        "config-db-port": "Duomenų bazės prievadas:",
index 2847efc..3ee33c1 100644 (file)
@@ -57,7 +57,7 @@
        "config-ns-other": "अन्य(खुलाउनुहोस)",
        "config-ns-other-default": "MyWiki",
        "config-admin-box": "प्रवन्धक खाता",
-       "config-admin-name": "तपाà¤\88à¤\81को प्रयोगकर्ता नाम:",
+       "config-admin-name": "तपाà¤\88à¤\82को प्रयोगकर्ता नाम:",
        "config-admin-password": "पासवर्ड:",
        "config-admin-email": "इमेल ठेगाना:",
        "config-optional-continue": "मलाई थप प्रश्नहरू सोध्नुहोस् ।",
index 434201d..52b4ca5 100644 (file)
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki może współpracować z następującymi systemami baz danych:\n\n$1\n\nPoniżej wyświetlone są systemy baz danych gotowe do użycia. Jeżeli poniżej brakuje bazy danych, z której chcesz skorzystać, oznacza to, że brakuje odpowiedniego oprogramowania lub zostało ono niepoprawnie skonfigurowane. Powyżej znajdziesz odnośniki do dokumentacji, która pomoże w konfiguracji odpowiednich komponentów.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] jest bazą danych, na której rozwijane jest oprogramowanie MediaWiki. MediaWiki działa również z [{{int:version-db-mariadb-url}} MariaDB] i [{{int:version-db-percona-url}} Percona Server], które są zgodne z MySQL. ([http://www.php.net/manual/en/mysqli.installation.php Zobacz, jak skompilować PHP ze wsparciem dla MySQL])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] jest popularnym systemem baz danych, często stosowanym zamiast MySQL. Z powodu możliwości wystąpienia drobnych błędów, nie jest zalecana do wymagających wdrożeń. ([http://www.php.net/manual/en/pgsql.installation.php Zobacz, jak skompilować PHP ze wsparciem dla PostgreSQL])",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] jest popularnym systemem baz danych, często stosowanym zamiast MySQL. ([http://www.php.net/manual/pl/pgsql.installation.php Zobacz, jak skompilować PHP z obsługą PostgreSQL])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] jest niewielkim systemem bazy danych, z którym MediaWiki bardzo dobrze współpracuje. ([http://www.php.net/manual/en/pdo.installation.php Zobacz, jak skompilować PHP ze wsparciem dla SQLite], korzystając z PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] jest komercyjną profesjonalną bazą danych. ([http://www.php.net/manual/en/oci8.installation.php Jak skompilować PHP ze wsparciem dla OCI8])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] jest komercyjną profesjonalną bazą danych. ([http://www.php.net/manual/pl/sqlsrv.installation.php Jak skompilować PHP ze wsparciem dla SQLSRV])",
index 38e4976..32794b4 100644 (file)
@@ -55,7 +55,7 @@
        "config-page-existingwiki": "Wiki existente",
        "config-help-restart": "Deseja limpar todos os dados gravados que introduziu e reiniciar o processo de instalação?",
        "config-restart": "Sim, reiniciar",
-       "config-welcome": "=== Verificações do ambiente ===\nSão realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki.\nSe necessitar de pedir ajuda durante a instalação, deve fornecer os resultados destas verificações.",
+       "config-welcome": "=== Verificações do ambiente ===\nSerão agora realizadas verificações básicas para determinar se este ambiente é apropriado para instalação do MediaWiki.\nLembre-se de fornecer esta informação se necessitar de pedir ajuda para concluir a instalação.",
        "config-copyright": "=== Direitos de autor e Condições de uso ===\n\n$1\n\nEste programa é software livre; pode redistribuí-lo e/ou modificá-lo nos termos da licença GNU General Public License, tal como publicada pela Free Software Foundation; tanto a versão 2 da Licença, como (por opção sua) qualquer versão posterior.\n\nEste programa é distribuído na esperança de que seja útil, mas '''sem qualquer garantia'''; inclusive, sem a garantia implícita da '''possibilidade de ser comercializado''' ou de '''adequação para qualquer finalidade específica'''.\nConsulte a licença GNU General Public License para mais detalhes.\n\nEm conjunto com este programa deve ter recebido <doclink href=Copying>uma cópia da licença GNU General Public License</doclink>; se não a recebeu, peça-a por escrito a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA ou [http://www.gnu.org/copyleft/gpl.html leia-a na internet].",
        "config-sidebar": "* [https://www.mediawiki.org/wiki/MediaWiki/pt Página principal do MediaWiki]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Contents/pt Ajuda]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Contents/pt Manual técnico]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ FAQ]\n----\n* <doclink href=Readme>Leia-me</doclink>\n* <doclink href=ReleaseNotes>Notas de lançamento</doclink>\n* <doclink href=Copying>Cópia</doclink>\n* <doclink href=UpgradeDoc>Atualização</doclink>",
        "config-env-good": "O ambiente foi verificado.\nPode instalar o MediaWiki.",
        "config-imagemagick": "Foi encontrado o ImageMagick: <code>$1</code>.\nSe possibilitar uploads, a miniaturização de imagens será ativada.",
        "config-gd": "Foi encontrada a biblioteca gráfica GD.\nSe possibilitar uploads, a miniaturização de imagens será ativada.",
        "config-no-scaling": "Não foi encontrada a biblioteca gráfica GD nem o ImageMagick.\nA miniaturização de imagens será desativada.",
-       "config-no-uri": "'''Erro:''' Não foi possível determinar a URI atual.\nA instalação foi abortada.",
+       "config-no-uri": "<strong>Erro:</strong> Não foi possível determinar o URI atual.\nA instalação foi abortada.",
        "config-no-cli-uri": "'''Aviso''':  Não foi especificado um <code>--scriptpath</code>; por omissão, será usado: <code>$1</code>.",
        "config-using-server": "Será usado o nome do servidor \"<nowiki>$1</nowiki>\".",
-       "config-using-uri": "Será usada a URL do servidor \"<nowiki>$1$2</nowiki>\".",
+       "config-using-uri": "Será usado o URL do servidor \"<nowiki>$1$2</nowiki>\".",
        "config-uploads-not-safe": "'''Aviso:''' O diretório por omissão para carregamentos <code>$1</code>, está vulnerável à execução arbitrária de scripts.\nEmbora o MediaWiki verifique a existência de ameaças de segurança em todos os ficheiros enviados, é altamente recomendado que [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Security#Upload_security vede esta vulnerabilidade de segurança] antes de possibilitar uploads.",
        "config-no-cli-uploads-check": "'''Aviso:''' O diretório por omissão para carregamentos, <code>$1</code>, não é verificado para determinar se é vulnerável à execução de código arbitrário durante a instalação por CLI (\"Command-line Interface\").",
        "config-brokenlibxml": "O seu sistema tem uma combinação de versões do PHP e do libxml2 conhecida por ser problemática, podendo causar corrupção de dados no MediaWiki e noutras aplicações da internet.\nAtualize para a versão 2.7.3 ou posterior do libxml2 ([https://bugs.php.net/bug.php?id=45996 incidência reportada no PHP]).\nInstalação cancelada.",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "O MediaWiki suporta as seguintes plataformas de base de dados:\n\n$1\n\nSe a plataforma que pretende usar não está listada abaixo, siga as instruções nos links acima para ativar o suporte.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] é a plataforma primária do MediaWiki e é a melhor suportada. O MediaWiki também trabalha com [{{int:version-db-mariadb-url}} MariaDB] e [{{int:version-db-percona-url}} Percona Server], que são compatíveis com MySQL. ([http://www.php.net/manual/en/mysql.installation.php Como compilar PHP com suporte a MySQL])",
-       "config-dbsupport-postgres": "* O [{{int:version-db-postgres-url}} PostgreSQL] é uma plataforma popular de base de dados de fonte aberta, alternativa ao MySQL. Poderá conter pequenos defeitos e o seu uso em ambientes de exploração/produção não é recomendado. ([http://www.php.net/manual/en/pgsql.installation.php Como compilar o PHP com suporte PostgreSQL])",
+       "config-dbsupport-postgres": "* O [{{int:version-db-postgres-url}} PostgreSQL] é uma plataforma popular de base de dados de código aberto, alternativa ao MySQL. ([http://www.php.net/manual/en/pgsql.installation.php Como compilar o PHP com suporte PostgreSQL])",
        "config-dbsupport-sqlite": "* O [{{int:version-db-sqlite-url}} SQLite] é uma plataforma de base de dados ligeira muito bem suportada. ([http://www.php.net/manual/en/pdo.installation.php Como compilar o PHP com suporte SQLite], usa PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] é uma base de dados comercial para empresas. ([http://www.php.net/manual/en/oci8.installation.php Como compilar o PHP com suporte OCI8])",
        "config-dbsupport-mssql": "* O [{{int:version-db-mssql-url}} Microsoft SQL Server] é uma base de dados comercial do Windows para empresas. ([http://www.php.net/manual/en/sqlsrv.installation.php Como compilar o PHP com suporte SQLSRV])",
        "config-upload-deleted": "Diretório para os ficheiros apagados:",
        "config-upload-deleted-help": "Escolha um diretório onde serão arquivados os ficheiros apagados.\nO ideal é que este diretório não possa ser diretamente acedido a partir da internet.",
        "config-logo": "URL do logótipo:",
-       "config-logo-help": "O tema padrão do MediaWiki inclui espaço para um logótipo de 135x160 pixels acima do menu da barra lateral.\nColoque na wiki uma imagem com estas dimensões e introduza aqui a URL dessa imagem.\n\nSe não pretende usar um logótipo, deixe este campo em branco.",
+       "config-logo-help": "O tema padrão do MediaWiki inclui espaço para um logótipo de 135x160 píxeis acima do menu da barra lateral.\nColoque na wiki uma imagem com estas dimensões e introduza aqui o URL dessa imagem.\n\nSe não pretende usar um logótipo, deixe este campo em branco.",
        "config-instantcommons": "Ativar Instant Commons",
        "config-instantcommons-help": "O [https://www.mediawiki.org/wiki/InstantCommons Instant Commons] é uma funcionalidade que permite que as wikis usem imagens, áudio e outros ficheiros multimédia disponíveis no sítio [https://commons.wikimedia.org/ Wikimedia Commons].\nPara poder usá-los, o MediaWiki necessita de acesso à Internet.\n\nPara mais informações sobre esta funcionalidade, incluindo instruções sobre como configurá-la para usar outras wikis em vez da Wikimedia Commons, consulte o [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgForeignFileRepos Manual Técnico].",
        "config-cc-error": "O auxiliar de escolha de licenças da Creative Commons não produziu resultados.\nIntroduza o nome da licença manualmente.",
index bead2f1..1ae87d0 100644 (file)
@@ -21,7 +21,8 @@
                        "Striking Blue",
                        "Ильнар",
                        "Macofe",
-                       "StasR"
+                       "StasR",
+                       "Irus"
                ]
        },
        "config-desc": "Инсталлятор MediaWiki",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki поддерживает следующие СУБД:\n\n$1\n\nЕсли вы не видите своей системы хранения данных в этом списке, следуйте инструкциям, на которые есть ссылка выше, чтобы получить поддержку.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] — основная база данных для MediaWiki, которая поддерживается лучше всего. MediaWiki также работает с [{{int:version-db-mariadb-url}} MariaDB] и [{{int:version-db-percona-url}} Percona Server], которые являются MySQL-совместимым. ([http://www.php.net/manual/ru/mysql.installation.php инструкция, как собрать PHP с поддержкой MySQL])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] — популярная открытая СУБД, альтернатива MySQL\nМогут встречаться небольшие неисправленные ошибки, не рекомендуется для использования в рабочей системе. ([http://www.php.net/manual/ru/pgsql.installation.php инструкция, как собрать PHP с поддержкой PostgreSQL]).",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL] — популярная открытая СУБД, альтернатива MySQL. ([http://www.php.net/manual/ru/pgsql.installation.php инструкция, как собрать PHP с поддержкой PostgreSQL]).",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite] — это легковесная система баз данных, имеющая очень хорошую поддержку. ([http://www.php.net/manual/ru/pdo.installation.php инструкция, как собрать PHP с поддержкой SQLite], работающей посредством PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle] — это коммерческая база данных масштаба предприятия. ([http://www.php.net/manual/ru/oci8.installation.php Как собрать PHP с поддержкой OCI8])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] — это коммерческое база данных база данных для Windows масштаба предприятия. ([http://www.php.net/manual/ru/sqlsrv.installation.php Как собрать PHP с поддержкой SQLSRV])",
index 2c5b8ce..f434356 100644 (file)
@@ -52,7 +52,7 @@
        "config-type-oracle": "Oracle",
        "config-type-mssql": "Microsoft SQL Server",
        "config-header-mysql": "MySQL подешавања",
-       "config-header-mssql": "Поставке Microsoft SQL Server-а",
+       "config-header-mssql": "Подешавања Microsoft SQL Server-а",
        "config-invalid-db-type": "Неважећи тип базе података.",
        "config-mssql-old": "Потребан је Microsoft SQL Server $1 или новији. Ви имате $2.",
        "config-mysql-innodb": "InnoDB",
index 20c2877..e0c5408 100644 (file)
@@ -1,7 +1,8 @@
 {
        "@metadata": {
                "authors": [
-                       "Milicevic01"
+                       "Milicevic01",
+                       "Сербијана"
                ]
        },
        "config-session-error": "Greška pri započinjanju sesije: $1",
        "config-type-postgres": "PostgreSQL",
        "config-type-sqlite": "SQLite",
        "config-type-oracle": "Oracle",
+       "config-header-mssql": "Podešavanja Microsoft SQL Server-a",
        "config-site-name": "Ime vikija:",
+       "config-admin-email": "Imejl adresa:",
        "config-license-cc-0": "Creative Commons Zero (javno vlasništvo)",
+       "config-email-settings": "Podešavanja imejla",
        "config-skins": "Teme",
        "mainpagetext": "<strong>Medijaviki je uspešno instaliran.</strong>",
        "mainpagedocfooter": "Molimo vidite [https://meta.wikimedia.org/wiki/Help:Contents korisnički vodič] za informacije o upotrebi viki softvera.\n\n== Za početak ==\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Configuration_settings Pomoć u vezi sa podešavanjima]\n* [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:FAQ Najčešće postavljena pitanja]\n* [https://lists.wikimedia.org/mailman/listinfo/mediawiki-announce Mejling lista o izdanjima MedijaVikija]"
index 5240f13..556b182 100644 (file)
@@ -70,6 +70,7 @@
        "config-memory-bad": "'''Увага:''' Розмір пам'яті PHP (<code>memory_limit</code>) становить $1.\nІмовірно, це замало.\nВстановлення може не вдатись!",
        "config-xcache": "[http://xcache.lighttpd.net/ XCache] встановлено",
        "config-apc": "[http://www.php.net/apc APC] встановлено",
+       "config-apcu": "[http://www.php.net/apcu APCu] встановлено",
        "config-wincache": "[http://www.iis.net/download/WinCacheForPhp WinCache] встановлено",
        "config-no-cache-apcu": "<strong>Увага:</strong> Не вдалося знайти [http://www.php.net/apcu APCu], [http://xcache.lighttpd.net/ XCache] чи [http://www.iis.net/download/WinCacheForPhp WinCache].\nКешування об'єктів не ввімкнено.",
        "config-mod-security": "'''Увага''': на Вашому веб-сервері увімкнено [http://modsecurity.org/ mod_security]. У разі неправильних налаштувать, він може викликати проблеми MediaWiki або іншого ПЗ, яке дозволяє користувачам надсилати довільний вміст.\nЗверніться до [http://modsecurity.org/documentation/ документації mod_security] або підтримки Вашого хостера, якщо під час роботи виникають незрозумілі помилки.",
        "config-type-mssql": "Microsoft SQL Server",
        "config-support-info": "MediaWiki підтримує такі системи баз даних:\n\n$1\n\nЯкщо Ви не бачите серед перерахованих систему баз даних, яку використовуєте, виконайте вказівки, вказані вище, щоб увімкнути підтримку.",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL] є основною для MediaWiki і найкраще підтримується.  MediaWiki також працює із [{{int:version-db-mariadb-url}} MariaDB] та [{{int:version-db-percona-url}} Percona Server], які сумісні з MySQL.  ([http://www.php.net/manual/en/mysqli.installation.php як зібрати PHP з допомогою MySQL])",
-       "config-dbsupport-postgres": "*  [{{int:version-db-postgres-url}} PostgreSQL] — популярна відкрита СУБД, альтернатива MySQL. Можуть зустрічатись деякі невеликі невиправлені помилки, не рекомендується використовувати у робочій системі.([http://www.php.net/manual/en/pgsql.installation.php як зібрати PHP з допомогою PostgreSQL]).",
+       "config-dbsupport-postgres": "*  [{{int:version-db-postgres-url}} PostgreSQL] — популярна відкрита СУБД, альтернатива MySQL. ([http://www.php.net/manual/en/pgsql.installation.php як зібрати PHP з допомогою PostgreSQL]).",
        "config-dbsupport-sqlite": "*  [{{int:version-db-sqlite-url}} SQLite] — легка система баз даних, яка дуже добре підтримується. ([http://www.php.net/manual/en/pdo.installation.php Як зібрати PHP з допомогою SQLite], що використовує PDO)",
        "config-dbsupport-oracle": "*  [{{int:version-db-oracle-url}} Oracle] — комерційна база даних масштабу підприємства. ([http://www.php.net/manual/en/oci8.installation.php Як зібрати PHP з підтримкою OCI8])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server] — це комерційна база даних для Windows масштабу підприємства. ([http://www.php.net/manual/ru/sqlsrv.installation.php Як зібрати PHP з підтримкою SQLSRV])",
        "config-cache-options": "Налаштування кешування об'єктів:",
        "config-cache-help": "Кешування об'єктів використовується для покращення швидкодії MediaWiki методом кешування часто використовуваних даних.\nЗаохочується увімкнення цієї можливості для середніх і великих сайтів, малі сайти також можуть відчути її перевагу.",
        "config-cache-none": "Без кешування (жодні функції не втрачаються, але впливає на швидкодію великих вікі-сайтів)",
-       "config-cache-accel": "PHP кешування об'єктів (APC, XCache чи WinCache)",
+       "config-cache-accel": "PHP кешування об'єктів (APC, APCu, XCache чи WinCache)",
        "config-cache-memcached": "Використовувати Memcached (вимагає додаткової установки і налаштування)",
        "config-memcached-servers": "Сервери Memcached:",
        "config-memcached-help": "Список IP-адрес, що викоритовує Memcached.\nВкажіть по одному в рядку, разом з портами. Наприклад:\n 127.0.0.1:11211\n 192.168.1.25:1234",
index 1410ae7..5d99079 100644 (file)
        "config-type-mssql": "微软SQL服务器",
        "config-support-info": "MediaWiki支持以下数据库系统:\n\n$1\n\n如果您在下面列出的数据库系统中没有找到您希望使用的系统,请根据上方链向的指引启用支持。",
        "config-dbsupport-mysql": "* [{{int:version-db-mysql-url}} MySQL]是MediaWiki的首选数据库,对它的支持最为完备。MediaWiki也可以在[{{int:version-db-mariadb-url}} MariaDB]和[{{int:version-db-percona-url}} Percona Server]下工作,它们与MySQL兼容。([http://www.php.net/manual/en/mysql.installation.php 如何将对MySQL的支持编译进PHP中])",
-       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]是一种流行的开源数据库系统,可作为MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何将对PostgreSQL的支持编译进PHP中])。本程序中可能依然存在一些小而明显的错误,因此并不建议在生产环境中使用该数据库系统。",
+       "config-dbsupport-postgres": "* [{{int:version-db-postgres-url}} PostgreSQL]是一种流行的开源数据库系统,可作为MySQL的替代([http://www.php.net/manual/en/pgsql.installation.php 如何将对PostgreSQL的支持编译进PHP中])",
        "config-dbsupport-sqlite": "* [{{int:version-db-sqlite-url}} SQLite]是一种轻量级的数据库系统,能被良好地支持。([http://www.php.net/manual/en/pdo.installation.php 如何将对SQLite的支持编译进PHP中],须使用PDO)",
        "config-dbsupport-oracle": "* [{{int:version-db-oracle-url}} Oracle]是一种商用企业级的数据库。([http://www.php.net/manual/en/oci8.installation.php 如何将对OCI8的支持编译进PHP中])",
        "config-dbsupport-mssql": "* [{{int:version-db-mssql-url}} Microsoft SQL Server]是一个适用于Windows的商业性企业数据库。([http://www.php.net/manual/en/sqlsrv.installation.php 如何编译带有SQLSRV支持的PHP])",
diff --git a/includes/interwiki/InterwikiLookupAdapter.php b/includes/interwiki/InterwikiLookupAdapter.php
new file mode 100644 (file)
index 0000000..a17bdd9
--- /dev/null
@@ -0,0 +1,175 @@
+<?php
+namespace MediaWiki\Interwiki;
+
+/**
+ * InterwikiLookupAdapter on top of SiteLookup
+ *
+ * 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
+ *
+ * @since 1.28
+ * @ingroup InterwikiLookup
+ *
+ * @license GNU GPL v2+
+ */
+
+use Interwiki;
+use Site;
+use SiteLookup;
+use MediawikiSite;
+
+class InterwikiLookupAdapter implements InterwikiLookup {
+
+       /**
+        * @var SiteLookup
+        */
+       private $siteLookup;
+
+       /**
+        * @var Interwiki[]|null associative array mapping interwiki prefixes to Interwiki objects
+        */
+       private $interwikiMap;
+
+       function __construct(
+               SiteLookup $siteLookup,
+               array $interwikiMap = null
+       ) {
+               $this->siteLookup = $siteLookup;
+               $this->interwikiMap = $interwikiMap;
+       }
+
+       /**
+        * See InterwikiLookup::isValidInterwiki
+        * It loads the whole interwiki map.
+        *
+        * @param string $prefix Interwiki prefix to use
+        * @return bool Whether it exists
+        */
+       public function isValidInterwiki( $prefix ) {
+
+               return array_key_exists( $prefix, $this->getInterwikiMap() );
+       }
+
+       /**
+        * See InterwikiLookup::fetch
+        * It loads the whole interwiki map.
+        *
+        * @param string $prefix Interwiki prefix to use
+        * @return Interwiki|null|bool
+        */
+       public function fetch( $prefix ) {
+               if ( $prefix == '' ) {
+                       return null;
+               }
+
+               if ( !$this->isValidInterwiki( $prefix ) ) {
+                       return false;
+               }
+
+               return $this->interwikiMap[$prefix];
+       }
+
+       /**
+        * See InterwikiLookup::getAllPrefixes
+        *
+        * @param string|null $local If set, limits output to local/non-local interwikis
+        * @return string[] List of prefixes
+        */
+       public function getAllPrefixes( $local = null ) {
+               if ( $local === null ) {
+                       return array_keys( $this->getInterwikiMap() );
+               }
+               $res = [];
+               foreach ( $this->getInterwikiMap() as $interwikiId => $interwiki ) {
+                       if ( $interwiki->isLocal() === $local ) {
+                               $res[] = $interwikiId;
+                       }
+               }
+               return $res;
+       }
+
+       /**
+        * See InterwikiLookup::invalidateCache
+        *
+        * @param string $prefix
+        */
+       public function invalidateCache( $prefix ) {
+               if ( !isset( $this->interwikiMap[$prefix] ) ) {
+                       return;
+               }
+               $globalId = $this->interwikiMap[$prefix]->getWikiID();
+               unset( $this->interwikiMap[$prefix] );
+
+               // Reload the interwiki
+               $site = $this->siteLookup->getSites()->getSite( $globalId );
+               $interwikis = $this->getSiteInterwikis( $site );
+               $this->interwikiMap = array_merge( $this->interwikiMap, [ $interwikis[$prefix] ] );
+       }
+
+       /**
+        * Load interwiki map to use as cache
+        */
+       private function loadInterwikiMap() {
+               $interwikiMap = [];
+               $siteList = $this->siteLookup->getSites();
+               foreach ( $siteList as $site ) {
+                       $interwikis = $this->getSiteInterwikis( $site );
+                       $interwikiMap = array_merge( $interwikiMap, $interwikis );
+               }
+               $this->interwikiMap = $interwikiMap;
+       }
+
+       /**
+        * Get interwikiMap attribute, load if needed.
+        *
+        * @return Interwiki[]
+        */
+       private function getInterwikiMap() {
+               if ( $this->interwikiMap === null ) {
+                       $this->loadInterwikiMap();
+               }
+               return $this->interwikiMap;
+       }
+
+       /**
+        * Load interwikis for the given site
+        *
+        * @param Site $site
+        * @return Interwiki[]
+        */
+       private function getSiteInterwikis( Site $site ) {
+               $interwikis = [];
+               foreach ( $site->getInterwikiIds() as $interwiki ) {
+                       $url = $site->getPageUrl();
+                       if ( $site instanceof MediawikiSite ) {
+                               $path = $site->getFileUrl( 'api.php' );
+                       } else {
+                               $path = '';
+                       }
+                       $local = $site->getSource() === 'local';
+                       // TODO: How to adapt trans?
+                       $interwikis[$interwiki] = new Interwiki(
+                               $interwiki,
+                               $url,
+                               $path,
+                               $site->getGlobalId(),
+                               $local
+                       );
+               }
+               return $interwikis;
+       }
+}
index 856cdfd..aa01768 100644 (file)
@@ -21,6 +21,7 @@
  * @author Aaron Schulz
  */
 use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
 
 /**
  * Class to handle job queues stored in the DB
index 84ded8d..0469eeb 100644 (file)
@@ -26,6 +26,7 @@ use MediaWiki\Logger\LoggerFactory;
 use Liuggio\StatsdClient\Factory\StatsdDataFactory;
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
+use Wikimedia\ScopedCallback;
 
 /**
  * Job queue runner utility methods
index 060cabb..e2914be 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Upload
  */
+use Wikimedia\ScopedCallback;
 
 /**
  * Assemble the segments of a chunked upload.
index 78531dc..37e80c2 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Upload
  * @ingroup JobQueue
  */
+use Wikimedia\ScopedCallback;
 
 /**
  * Upload a file from the upload stash into the local file repo.
diff --git a/includes/libs/CryptHKDF.php b/includes/libs/CryptHKDF.php
new file mode 100644 (file)
index 0000000..4c86757
--- /dev/null
@@ -0,0 +1,282 @@
+<?php
+/**
+ * Extract-and-Expand Key Derivation Function (HKDF). A cryptographicly
+ * secure key expansion function based on RFC 5869.
+ *
+ * This relies on the secrecy of $wgSecretKey (by default), or $wgHKDFSecret.
+ * By default, sha256 is used as the underlying hashing algorithm, but any other
+ * algorithm can be used. Finding the secret key from the output would require
+ * an attacker to discover the input key (the PRK) to the hmac that generated
+ * the output, and discover the particular data, hmac'ed with an evolving key
+ * (salt), to produce the PRK. Even with md5, no publicly known attacks make
+ * this currently feasible.
+ *
+ * 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
+ *
+ * @author Chris Steipp
+ * @file
+ */
+
+class CryptHKDF {
+
+       /**
+        * @var BagOStuff The persistent cache
+        */
+       protected $cache = null;
+
+       /**
+        * @var string Cache key we'll use for our salt
+        */
+       protected $cacheKey = null;
+
+       /**
+        * @var string The hash algorithm being used
+        */
+       protected $algorithm = null;
+
+       /**
+        * @var string binary string, the salt for the HKDF
+        * @see getSaltUsingCache
+        */
+       protected $salt = '';
+
+       /**
+        * @var string The pseudorandom key
+        */
+       private $prk = '';
+
+       /**
+        * The secret key material. This must be kept secret to preserve
+        * the security properties of this RNG.
+        *
+        * @var string
+        */
+       private $skm;
+
+       /**
+        * @var string The last block (K(i)) of the most recent expanded key
+        */
+       protected $lastK;
+
+       /**
+        * a "context information" string CTXinfo (which may be null)
+        * See http://eprint.iacr.org/2010/264.pdf Section 4.1
+        *
+        * @var array
+        */
+       protected $context = [];
+
+       /**
+        * Round count is computed based on the hash'es output length,
+        * which neither php nor openssl seem to provide easily.
+        *
+        * @var int[]
+        */
+       public static $hashLength = [
+               'md5' => 16,
+               'sha1' => 20,
+               'sha224' => 28,
+               'sha256' => 32,
+               'sha384' => 48,
+               'sha512' => 64,
+               'ripemd128' => 16,
+               'ripemd160' => 20,
+               'ripemd256' => 32,
+               'ripemd320' => 40,
+               'whirlpool' => 64,
+       ];
+
+       /**
+        * @var CryptRand
+        */
+       private $cryptRand;
+
+       /**
+        * @param string $secretKeyMaterial
+        * @param string $algorithm Name of hashing algorithm
+        * @param BagOStuff $cache
+        * @param string|array $context Context to mix into HKDF context
+        * @param CryptRand $cryptRand
+        * @throws InvalidArgumentException if secret key material is too short
+        */
+       public function __construct( $secretKeyMaterial, $algorithm, BagOStuff $cache, $context,
+               CryptRand $cryptRand
+       ) {
+               if ( strlen( $secretKeyMaterial ) < 16 ) {
+                       throw new InvalidArgumentException( "secret was too short." );
+               }
+               $this->skm = $secretKeyMaterial;
+               $this->algorithm = $algorithm;
+               $this->cache = $cache;
+               $this->context = is_array( $context ) ? $context : [ $context ];
+               $this->cryptRand = $cryptRand;
+
+               // To prevent every call from hitting the same memcache server, pick
+               // from a set of keys to use. mt_rand is only use to pick a random
+               // server, and does not affect the security of the process.
+               $this->cacheKey = $cache->makeKey( 'HKDF', mt_rand( 0, 16 ) );
+       }
+
+       /**
+        * Save the last block generated, so the next user will compute a different PRK
+        * from the same SKM. This should keep things unpredictable even if an attacker
+        * is able to influence CTXinfo.
+        */
+       function __destruct() {
+               if ( $this->lastK ) {
+                       $this->cache->set( $this->cacheKey, $this->lastK );
+               }
+       }
+
+       /**
+        * MW specific salt, cached from last run
+        * @return string Binary string
+        */
+       protected function getSaltUsingCache() {
+               if ( $this->salt == '' ) {
+                       $lastSalt = $this->cache->get( $this->cacheKey );
+                       if ( $lastSalt === false ) {
+                               // If we don't have a previous value to use as our salt, we use
+                               // 16 bytes from CryptRand, which will use a small amount of
+                               // entropy from our pool. Note, "XTR may be deterministic or keyed
+                               // via an optional “salt value”  (i.e., a non-secret random
+                               // value)..." - http://eprint.iacr.org/2010/264.pdf. However, we
+                               // use a strongly random value since we can.
+                               $lastSalt = $this->cryptRand->generate( 16 );
+                       }
+                       // Get a binary string that is hashLen long
+                       $this->salt = hash( $this->algorithm, $lastSalt, true );
+               }
+               return $this->salt;
+       }
+
+       /**
+        * Produce $bytes of secure random data. As a side-effect,
+        * $this->lastK is set to the last hashLen block of key material.
+        *
+        * @param int $bytes Number of bytes of data
+        * @param string $context Context to mix into CTXinfo
+        * @return string Binary string of length $bytes
+        */
+       public function generate( $bytes, $context = '' ) {
+               if ( $this->prk === '' ) {
+                       $salt = $this->getSaltUsingCache();
+                       $this->prk = self::HKDFExtract(
+                               $this->algorithm,
+                               $salt,
+                               $this->skm
+                       );
+               }
+
+               $CTXinfo = implode( ':', array_merge( $this->context, [ $context ] ) );
+
+               return self::HKDFExpand(
+                       $this->algorithm,
+                       $this->prk,
+                       $CTXinfo,
+                       $bytes,
+                       $this->lastK
+               );
+       }
+
+       /**
+        * RFC5869 defines HKDF in 2 steps, extraction and expansion.
+        * From http://eprint.iacr.org/2010/264.pdf:
+        *
+        * The scheme HKDF is specifed as:
+        *      HKDF(XTS, SKM, CTXinfo, L) = K(1) || K(2) || ... || K(t)
+        * where the values K(i) are defined as follows:
+        *      PRK = HMAC(XTS, SKM)
+        *      K(1) = HMAC(PRK, CTXinfo || 0);
+        *      K(i+1) = HMAC(PRK, K(i) || CTXinfo || i), 1 <= i < t;
+        * where t = [L/k] and the value K(t) is truncated to its first d = L mod k bits;
+        * the counter i is non-wrapping and of a given fixed size, e.g., a single byte.
+        * Note that the length of the HMAC output is the same as its key length and therefore
+        * the scheme is well defined.
+        *
+        * XTS is the "extractor salt"
+        * SKM is the "secret keying material"
+        *
+        * N.B. http://eprint.iacr.org/2010/264.pdf seems to differ from RFC 5869 in that the test
+        * vectors from RFC 5869 only work if K(0) = '' and K(1) = HMAC(PRK, K(0) || CTXinfo || 1)
+        *
+        * @param string $hash The hashing function to use (e.g., sha256)
+        * @param string $ikm The input keying material
+        * @param string $salt The salt to add to the ikm, to get the prk
+        * @param string $info Optional context (change the output without affecting
+        *      the randomness properties of the output)
+        * @param int $L Number of bytes to return
+        * @return string Cryptographically secure pseudorandom binary string
+        */
+       public static function HKDF( $hash, $ikm, $salt, $info, $L ) {
+               $prk = self::HKDFExtract( $hash, $salt, $ikm );
+               $okm = self::HKDFExpand( $hash, $prk, $info, $L );
+               return $okm;
+       }
+
+       /**
+        * Extract the PRK, PRK = HMAC(XTS, SKM)
+        * Note that the hmac is keyed with XTS (the salt),
+        * and the SKM (source key material) is the "data".
+        *
+        * @param string $hash The hashing function to use (e.g., sha256)
+        * @param string $salt The salt to add to the ikm, to get the prk
+        * @param string $ikm The input keying material
+        * @return string Binary string (pseudorandm key) used as input to HKDFExpand
+        */
+       private static function HKDFExtract( $hash, $salt, $ikm ) {
+               return hash_hmac( $hash, $ikm, $salt, true );
+       }
+
+       /**
+        * Expand the key with the given context
+        *
+        * @param string $hash Hashing Algorithm
+        * @param string $prk A pseudorandom key of at least HashLen octets
+        *    (usually, the output from the extract step)
+        * @param string $info Optional context and application specific information
+        *    (can be a zero-length string)
+        * @param int $bytes Length of output keying material in bytes
+        *    (<= 255*HashLen)
+        * @param string &$lastK Set by this function to the last block of the expansion.
+        *    In MediaWiki, this is used to seed future Extractions.
+        * @return string Cryptographically secure random string $bytes long
+        * @throws InvalidArgumentException
+        */
+       private static function HKDFExpand( $hash, $prk, $info, $bytes, &$lastK = '' ) {
+               $hashLen = self::$hashLength[$hash];
+               $rounds = ceil( $bytes / $hashLen );
+               $output = '';
+
+               if ( $bytes > 255 * $hashLen ) {
+                       throw new InvalidArgumentException( 'Too many bytes requested from HDKFExpand' );
+               }
+
+               // K(1) = HMAC(PRK, CTXinfo || 1);
+               // K(i) = HMAC(PRK, K(i-1) || CTXinfo || i); 1 < i <= t;
+               for ( $counter = 1; $counter <= $rounds; ++$counter ) {
+                       $lastK = hash_hmac(
+                               $hash,
+                               $lastK . $info . chr( $counter ),
+                               $prk,
+                               true
+                       );
+                       $output .= $lastK;
+               }
+
+               return substr( $output, 0, $bytes );
+       }
+}
index bff9abd..db085da 100644 (file)
@@ -88,7 +88,7 @@ class StatusValue {
         *         1 => object(StatusValue) # The StatusValue with warning messages, only
         * ]
         *
-        * @return array
+        * @return StatusValue[]
         */
        public function splitByErrorType() {
                $errorsOnlyStatusValue = clone $this;
@@ -160,7 +160,7 @@ class StatusValue {
         * @param mixed $value
         */
        public function setResult( $ok, $value = null ) {
-               $this->ok = $ok;
+               $this->ok = (bool)$ok;
                $this->value = $value;
        }
 
index 311508f..62231a8 100644 (file)
@@ -12,14 +12,9 @@ class ComposerJson {
         * @param string $location
         */
        public function __construct( $location ) {
-               $this->hash = md5_file( $location );
                $this->contents = json_decode( file_get_contents( $location ), true );
        }
 
-       public function getHash() {
-               return $this->hash;
-       }
-
        /**
         * Dependencies as specified by composer.json
         *
index e93127c..818ccdf 100644 (file)
@@ -15,10 +15,6 @@ class ComposerLock {
                $this->contents = json_decode( file_get_contents( $location ), true );
        }
 
-       public function getHash() {
-               return $this->contents['hash'];
-       }
-
        /**
         * Dependencies currently installed according to composer.lock
         *
diff --git a/includes/libs/filebackend/FSFile.php b/includes/libs/filebackend/FSFile.php
deleted file mode 100644 (file)
index dacad1c..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-<?php
-/**
- * Non-directory file on the file system.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup FileBackend
- */
-
-/**
- * Class representing a non-directory file on the file system
- *
- * @ingroup FileBackend
- */
-class FSFile {
-       /** @var string Path to file */
-       protected $path;
-
-       /** @var string File SHA-1 in base 36 */
-       protected $sha1Base36;
-
-       /**
-        * Sets up the file object
-        *
-        * @param string $path Path to temporary file on local disk
-        */
-       public function __construct( $path ) {
-               $this->path = $path;
-       }
-
-       /**
-        * Returns the file system path
-        *
-        * @return string
-        */
-       public function getPath() {
-               return $this->path;
-       }
-
-       /**
-        * Checks if the file exists
-        *
-        * @return bool
-        */
-       public function exists() {
-               return is_file( $this->path );
-       }
-
-       /**
-        * Get the file size in bytes
-        *
-        * @return int|bool
-        */
-       public function getSize() {
-               return filesize( $this->path );
-       }
-
-       /**
-        * Get the file's last-modified timestamp
-        *
-        * @return string|bool TS_MW timestamp or false on failure
-        */
-       public function getTimestamp() {
-               MediaWiki\suppressWarnings();
-               $timestamp = filemtime( $this->path );
-               MediaWiki\restoreWarnings();
-               if ( $timestamp !== false ) {
-                       $timestamp = wfTimestamp( TS_MW, $timestamp );
-               }
-
-               return $timestamp;
-       }
-
-       /**
-        * Get an associative array containing information about
-        * a file with the given storage path.
-        *
-        * Resulting array fields include:
-        *   - fileExists
-        *   - size (filesize in bytes)
-        *   - mime (as major/minor)
-        *   - file-mime (as major/minor)
-        *   - sha1 (in base 36)
-        *   - major_mime
-        *   - minor_mime
-        *
-        * @param string|bool $ext The file extension, or true to extract it from the filename.
-        *             Set it to false to ignore the extension. Currently unused.
-        * @return array
-        */
-       public function getProps( $ext = true ) {
-               $info = self::placeholderProps();
-               $info['fileExists'] = $this->exists();
-
-               if ( $info['fileExists'] ) {
-                       $info['size'] = $this->getSize(); // bytes
-                       $info['sha1'] = $this->getSha1Base36();
-
-                       $mime = mime_content_type( $this->path );
-                       # MIME type according to file contents
-                       $info['file-mime'] = ( $mime === false ) ? 'unknown/unknown' : $mime;
-                       # logical MIME type
-                       $info['mime'] = $mime;
-
-                       if ( strpos( $mime, '/' ) !== false ) {
-                               list( $info['major_mime'], $info['minor_mime'] ) = explode( '/', $mime, 2 );
-                       } else {
-                               list( $info['major_mime'], $info['minor_mime'] ) = [ $mime, 'unknown' ];
-                       }
-               }
-
-               return $info;
-       }
-
-       /**
-        * Placeholder file properties to use for files that don't exist
-        *
-        * Resulting array fields include:
-        *   - fileExists
-        *   - size (filesize in bytes)
-        *   - mime (as major/minor)
-        *   - file-mime (as major/minor)
-        *   - sha1 (in base 36)
-        *   - major_mime
-        *   - minor_mime
-        *
-        * @return array
-        */
-       public static function placeholderProps() {
-               $info = [];
-               $info['fileExists'] = false;
-               $info['size'] = 0;
-               $info['file-mime'] = null;
-               $info['major_mime'] = null;
-               $info['minor_mime'] = null;
-               $info['mime'] = null;
-               $info['sha1'] = '';
-
-               return $info;
-       }
-
-       /**
-        * Get a SHA-1 hash of a file in the local filesystem, in base-36 lower case
-        * encoding, zero padded to 31 digits.
-        *
-        * 160 log 2 / log 36 = 30.95, so the 160-bit hash fills 31 digits in base 36
-        * fairly neatly.
-        *
-        * @param bool $recache
-        * @return bool|string False on failure
-        */
-       public function getSha1Base36( $recache = false ) {
-               if ( $this->sha1Base36 !== null && !$recache ) {
-                       return $this->sha1Base36;
-               }
-
-               MediaWiki\suppressWarnings();
-               $this->sha1Base36 = sha1_file( $this->path );
-               MediaWiki\restoreWarnings();
-
-               if ( $this->sha1Base36 !== false ) {
-                       $this->sha1Base36 = Wikimedia\base_convert( $this->sha1Base36, 16, 36, 31 );
-               }
-
-               return $this->sha1Base36;
-       }
-
-       /**
-        * Get the final file extension from a file system path
-        *
-        * @param string $path
-        * @return string
-        */
-       public static function extensionFromPath( $path ) {
-               $i = strrpos( $path, '.' );
-
-               return strtolower( $i ? substr( $path, $i + 1 ) : '' );
-       }
-
-       /**
-        * Get an associative array containing information about a file in the local filesystem.
-        *
-        * @param string $path Absolute local filesystem path
-        * @param string|bool $ext The file extension, or true to extract it from the filename.
-        *   Set it to false to ignore the extension.
-        * @return array
-        */
-       public static function getPropsFromPath( $path, $ext = true ) {
-               $fsFile = new self( $path );
-
-               return $fsFile->getProps( $ext );
-       }
-
-       /**
-        * Get a SHA-1 hash of a file in the local filesystem, in base-36 lower case
-        * encoding, zero padded to 31 digits.
-        *
-        * 160 log 2 / log 36 = 30.95, so the 160-bit hash fills 31 digits in base 36
-        * fairly neatly.
-        *
-        * @param string $path
-        * @return bool|string False on failure
-        */
-       public static function getSha1Base36FromPath( $path ) {
-               $fsFile = new self( $path );
-
-               return $fsFile->getSha1Base36();
-       }
-}
index f33f522..5764cc3 100644 (file)
@@ -30,6 +30,7 @@
  */
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
+use Wikimedia\ScopedCallback;
 
 /**
  * @brief Base class for all file backend classes (including multi-write backends).
index b1b7652..bd2ce5d 100644 (file)
@@ -1098,9 +1098,9 @@ abstract class FileBackendStore extends FileBackend {
 
                // Build the list of paths involved
                $paths = [];
-               foreach ( $performOps as $op ) {
-                       $paths = array_merge( $paths, $op->storagePathsRead() );
-                       $paths = array_merge( $paths, $op->storagePathsChanged() );
+               foreach ( $performOps as $performOp ) {
+                       $paths = array_merge( $paths, $performOp->storagePathsRead() );
+                       $paths = array_merge( $paths, $performOp->storagePathsChanged() );
                }
 
                // Enlarge the cache to fit the stat entries of these files
diff --git a/includes/libs/filebackend/TempFSFile.php b/includes/libs/filebackend/TempFSFile.php
deleted file mode 100644 (file)
index fed6812..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-<?php
-/**
- * Location holder of files stored temporarily
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup FileBackend
- */
-
-/**
- * This class is used to hold the location and do limited manipulation
- * of files stored temporarily (this will be whatever wfTempDir() returns)
- *
- * @ingroup FileBackend
- */
-class TempFSFile extends FSFile {
-       /** @var bool Garbage collect the temp file */
-       protected $canDelete = false;
-
-       /** @var array Map of (path => 1) for paths to delete on shutdown */
-       protected static $pathsCollect = null;
-
-       public function __construct( $path ) {
-               parent::__construct( $path );
-
-               if ( self::$pathsCollect === null ) {
-                       self::$pathsCollect = [];
-                       register_shutdown_function( [ __CLASS__, 'purgeAllOnShutdown' ] );
-               }
-       }
-
-       /**
-        * Make a new temporary file on the file system.
-        * Temporary files may be purged when the file object falls out of scope.
-        *
-        * @param string $prefix
-        * @param string $extension Optional file extension
-        * @param string|null $tmpDirectory Optional parent directory
-        * @return TempFSFile|null
-        */
-       public static function factory( $prefix, $extension = '', $tmpDirectory = null ) {
-               $ext = ( $extension != '' ) ? ".{$extension}" : '';
-
-               $attempts = 5;
-               while ( $attempts-- ) {
-                       $hex = sprintf( '%06x%06x', mt_rand( 0, 0xffffff ), mt_rand( 0, 0xffffff ) );
-                       if ( !is_string( $tmpDirectory ) ) {
-                               $tmpDirectory = self::getUsableTempDirectory();
-                       }
-                       $path = wfTempDir() . '/' . $prefix . $hex . $ext;
-                       MediaWiki\suppressWarnings();
-                       $newFileHandle = fopen( $path, 'x' );
-                       MediaWiki\restoreWarnings();
-                       if ( $newFileHandle ) {
-                               fclose( $newFileHandle );
-                               $tmpFile = new self( $path );
-                               $tmpFile->autocollect();
-                               // Safely instantiated, end loop.
-                               return $tmpFile;
-                       }
-               }
-
-               // Give up
-               return null;
-       }
-
-       /**
-        * @return string Filesystem path to a temporary directory
-        * @throws RuntimeException
-        */
-       public static function getUsableTempDirectory() {
-               $tmpDir = array_map( 'getenv', [ 'TMPDIR', 'TMP', 'TEMP' ] );
-               $tmpDir[] = sys_get_temp_dir();
-               $tmpDir[] = ini_get( 'upload_tmp_dir' );
-               foreach ( $tmpDir as $tmp ) {
-                       if ( $tmp != '' && is_dir( $tmp ) && is_writable( $tmp ) ) {
-                               return $tmp;
-                       }
-               }
-
-               // PHP on Windows will detect C:\Windows\Temp as not writable even though PHP can write to
-               // it so create a directory within that called 'mwtmp' with a suffix of the user running
-               // the current process.
-               // The user is included as if various scripts are run by different users they will likely
-               // not be able to access each others temporary files.
-               if ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' ) {
-                       $tmp = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'mwtmp-' . get_current_user();
-                       if ( !file_exists( $tmp ) ) {
-                               mkdir( $tmp );
-                       }
-                       if ( is_dir( $tmp ) && is_writable( $tmp ) ) {
-                               return $tmp;
-                       }
-               }
-
-               throw new RuntimeException(
-                       'No writable temporary directory could be found. ' .
-                       'Please explicitly specify a writable directory in configuration.' );
-       }
-
-       /**
-        * Purge this file off the file system
-        *
-        * @return bool Success
-        */
-       public function purge() {
-               $this->canDelete = false; // done
-               MediaWiki\suppressWarnings();
-               $ok = unlink( $this->path );
-               MediaWiki\restoreWarnings();
-
-               unset( self::$pathsCollect[$this->path] );
-
-               return $ok;
-       }
-
-       /**
-        * Clean up the temporary file only after an object goes out of scope
-        *
-        * @param object $object
-        * @return TempFSFile This object
-        */
-       public function bind( $object ) {
-               if ( is_object( $object ) ) {
-                       if ( !isset( $object->tempFSFileReferences ) ) {
-                               // Init first since $object might use __get() and return only a copy variable
-                               $object->tempFSFileReferences = [];
-                       }
-                       $object->tempFSFileReferences[] = $this;
-               }
-
-               return $this;
-       }
-
-       /**
-        * Set flag to not clean up after the temporary file
-        *
-        * @return TempFSFile This object
-        */
-       public function preserve() {
-               $this->canDelete = false;
-
-               unset( self::$pathsCollect[$this->path] );
-
-               return $this;
-       }
-
-       /**
-        * Set flag clean up after the temporary file
-        *
-        * @return TempFSFile This object
-        */
-       public function autocollect() {
-               $this->canDelete = true;
-
-               self::$pathsCollect[$this->path] = 1;
-
-               return $this;
-       }
-
-       /**
-        * Try to make sure that all files are purged on error
-        *
-        * This method should only be called internally
-        */
-       public static function purgeAllOnShutdown() {
-               foreach ( self::$pathsCollect as $path ) {
-                       MediaWiki\suppressWarnings();
-                       unlink( $path );
-                       MediaWiki\restoreWarnings();
-               }
-       }
-
-       /**
-        * Cleans up after the temporary file by deleting it
-        */
-       function __destruct() {
-               if ( $this->canDelete ) {
-                       $this->purge();
-               }
-       }
-}
diff --git a/includes/libs/filebackend/fsfile/FSFile.php b/includes/libs/filebackend/fsfile/FSFile.php
new file mode 100644 (file)
index 0000000..dacad1c
--- /dev/null
@@ -0,0 +1,223 @@
+<?php
+/**
+ * Non-directory file on the file system.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup FileBackend
+ */
+
+/**
+ * Class representing a non-directory file on the file system
+ *
+ * @ingroup FileBackend
+ */
+class FSFile {
+       /** @var string Path to file */
+       protected $path;
+
+       /** @var string File SHA-1 in base 36 */
+       protected $sha1Base36;
+
+       /**
+        * Sets up the file object
+        *
+        * @param string $path Path to temporary file on local disk
+        */
+       public function __construct( $path ) {
+               $this->path = $path;
+       }
+
+       /**
+        * Returns the file system path
+        *
+        * @return string
+        */
+       public function getPath() {
+               return $this->path;
+       }
+
+       /**
+        * Checks if the file exists
+        *
+        * @return bool
+        */
+       public function exists() {
+               return is_file( $this->path );
+       }
+
+       /**
+        * Get the file size in bytes
+        *
+        * @return int|bool
+        */
+       public function getSize() {
+               return filesize( $this->path );
+       }
+
+       /**
+        * Get the file's last-modified timestamp
+        *
+        * @return string|bool TS_MW timestamp or false on failure
+        */
+       public function getTimestamp() {
+               MediaWiki\suppressWarnings();
+               $timestamp = filemtime( $this->path );
+               MediaWiki\restoreWarnings();
+               if ( $timestamp !== false ) {
+                       $timestamp = wfTimestamp( TS_MW, $timestamp );
+               }
+
+               return $timestamp;
+       }
+
+       /**
+        * Get an associative array containing information about
+        * a file with the given storage path.
+        *
+        * Resulting array fields include:
+        *   - fileExists
+        *   - size (filesize in bytes)
+        *   - mime (as major/minor)
+        *   - file-mime (as major/minor)
+        *   - sha1 (in base 36)
+        *   - major_mime
+        *   - minor_mime
+        *
+        * @param string|bool $ext The file extension, or true to extract it from the filename.
+        *             Set it to false to ignore the extension. Currently unused.
+        * @return array
+        */
+       public function getProps( $ext = true ) {
+               $info = self::placeholderProps();
+               $info['fileExists'] = $this->exists();
+
+               if ( $info['fileExists'] ) {
+                       $info['size'] = $this->getSize(); // bytes
+                       $info['sha1'] = $this->getSha1Base36();
+
+                       $mime = mime_content_type( $this->path );
+                       # MIME type according to file contents
+                       $info['file-mime'] = ( $mime === false ) ? 'unknown/unknown' : $mime;
+                       # logical MIME type
+                       $info['mime'] = $mime;
+
+                       if ( strpos( $mime, '/' ) !== false ) {
+                               list( $info['major_mime'], $info['minor_mime'] ) = explode( '/', $mime, 2 );
+                       } else {
+                               list( $info['major_mime'], $info['minor_mime'] ) = [ $mime, 'unknown' ];
+                       }
+               }
+
+               return $info;
+       }
+
+       /**
+        * Placeholder file properties to use for files that don't exist
+        *
+        * Resulting array fields include:
+        *   - fileExists
+        *   - size (filesize in bytes)
+        *   - mime (as major/minor)
+        *   - file-mime (as major/minor)
+        *   - sha1 (in base 36)
+        *   - major_mime
+        *   - minor_mime
+        *
+        * @return array
+        */
+       public static function placeholderProps() {
+               $info = [];
+               $info['fileExists'] = false;
+               $info['size'] = 0;
+               $info['file-mime'] = null;
+               $info['major_mime'] = null;
+               $info['minor_mime'] = null;
+               $info['mime'] = null;
+               $info['sha1'] = '';
+
+               return $info;
+       }
+
+       /**
+        * Get a SHA-1 hash of a file in the local filesystem, in base-36 lower case
+        * encoding, zero padded to 31 digits.
+        *
+        * 160 log 2 / log 36 = 30.95, so the 160-bit hash fills 31 digits in base 36
+        * fairly neatly.
+        *
+        * @param bool $recache
+        * @return bool|string False on failure
+        */
+       public function getSha1Base36( $recache = false ) {
+               if ( $this->sha1Base36 !== null && !$recache ) {
+                       return $this->sha1Base36;
+               }
+
+               MediaWiki\suppressWarnings();
+               $this->sha1Base36 = sha1_file( $this->path );
+               MediaWiki\restoreWarnings();
+
+               if ( $this->sha1Base36 !== false ) {
+                       $this->sha1Base36 = Wikimedia\base_convert( $this->sha1Base36, 16, 36, 31 );
+               }
+
+               return $this->sha1Base36;
+       }
+
+       /**
+        * Get the final file extension from a file system path
+        *
+        * @param string $path
+        * @return string
+        */
+       public static function extensionFromPath( $path ) {
+               $i = strrpos( $path, '.' );
+
+               return strtolower( $i ? substr( $path, $i + 1 ) : '' );
+       }
+
+       /**
+        * Get an associative array containing information about a file in the local filesystem.
+        *
+        * @param string $path Absolute local filesystem path
+        * @param string|bool $ext The file extension, or true to extract it from the filename.
+        *   Set it to false to ignore the extension.
+        * @return array
+        */
+       public static function getPropsFromPath( $path, $ext = true ) {
+               $fsFile = new self( $path );
+
+               return $fsFile->getProps( $ext );
+       }
+
+       /**
+        * Get a SHA-1 hash of a file in the local filesystem, in base-36 lower case
+        * encoding, zero padded to 31 digits.
+        *
+        * 160 log 2 / log 36 = 30.95, so the 160-bit hash fills 31 digits in base 36
+        * fairly neatly.
+        *
+        * @param string $path
+        * @return bool|string False on failure
+        */
+       public static function getSha1Base36FromPath( $path ) {
+               $fsFile = new self( $path );
+
+               return $fsFile->getSha1Base36();
+       }
+}
diff --git a/includes/libs/filebackend/fsfile/TempFSFile.php b/includes/libs/filebackend/fsfile/TempFSFile.php
new file mode 100644 (file)
index 0000000..fed6812
--- /dev/null
@@ -0,0 +1,196 @@
+<?php
+/**
+ * Location holder of files stored temporarily
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup FileBackend
+ */
+
+/**
+ * This class is used to hold the location and do limited manipulation
+ * of files stored temporarily (this will be whatever wfTempDir() returns)
+ *
+ * @ingroup FileBackend
+ */
+class TempFSFile extends FSFile {
+       /** @var bool Garbage collect the temp file */
+       protected $canDelete = false;
+
+       /** @var array Map of (path => 1) for paths to delete on shutdown */
+       protected static $pathsCollect = null;
+
+       public function __construct( $path ) {
+               parent::__construct( $path );
+
+               if ( self::$pathsCollect === null ) {
+                       self::$pathsCollect = [];
+                       register_shutdown_function( [ __CLASS__, 'purgeAllOnShutdown' ] );
+               }
+       }
+
+       /**
+        * Make a new temporary file on the file system.
+        * Temporary files may be purged when the file object falls out of scope.
+        *
+        * @param string $prefix
+        * @param string $extension Optional file extension
+        * @param string|null $tmpDirectory Optional parent directory
+        * @return TempFSFile|null
+        */
+       public static function factory( $prefix, $extension = '', $tmpDirectory = null ) {
+               $ext = ( $extension != '' ) ? ".{$extension}" : '';
+
+               $attempts = 5;
+               while ( $attempts-- ) {
+                       $hex = sprintf( '%06x%06x', mt_rand( 0, 0xffffff ), mt_rand( 0, 0xffffff ) );
+                       if ( !is_string( $tmpDirectory ) ) {
+                               $tmpDirectory = self::getUsableTempDirectory();
+                       }
+                       $path = wfTempDir() . '/' . $prefix . $hex . $ext;
+                       MediaWiki\suppressWarnings();
+                       $newFileHandle = fopen( $path, 'x' );
+                       MediaWiki\restoreWarnings();
+                       if ( $newFileHandle ) {
+                               fclose( $newFileHandle );
+                               $tmpFile = new self( $path );
+                               $tmpFile->autocollect();
+                               // Safely instantiated, end loop.
+                               return $tmpFile;
+                       }
+               }
+
+               // Give up
+               return null;
+       }
+
+       /**
+        * @return string Filesystem path to a temporary directory
+        * @throws RuntimeException
+        */
+       public static function getUsableTempDirectory() {
+               $tmpDir = array_map( 'getenv', [ 'TMPDIR', 'TMP', 'TEMP' ] );
+               $tmpDir[] = sys_get_temp_dir();
+               $tmpDir[] = ini_get( 'upload_tmp_dir' );
+               foreach ( $tmpDir as $tmp ) {
+                       if ( $tmp != '' && is_dir( $tmp ) && is_writable( $tmp ) ) {
+                               return $tmp;
+                       }
+               }
+
+               // PHP on Windows will detect C:\Windows\Temp as not writable even though PHP can write to
+               // it so create a directory within that called 'mwtmp' with a suffix of the user running
+               // the current process.
+               // The user is included as if various scripts are run by different users they will likely
+               // not be able to access each others temporary files.
+               if ( strtoupper( substr( PHP_OS, 0, 3 ) ) === 'WIN' ) {
+                       $tmp = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'mwtmp-' . get_current_user();
+                       if ( !file_exists( $tmp ) ) {
+                               mkdir( $tmp );
+                       }
+                       if ( is_dir( $tmp ) && is_writable( $tmp ) ) {
+                               return $tmp;
+                       }
+               }
+
+               throw new RuntimeException(
+                       'No writable temporary directory could be found. ' .
+                       'Please explicitly specify a writable directory in configuration.' );
+       }
+
+       /**
+        * Purge this file off the file system
+        *
+        * @return bool Success
+        */
+       public function purge() {
+               $this->canDelete = false; // done
+               MediaWiki\suppressWarnings();
+               $ok = unlink( $this->path );
+               MediaWiki\restoreWarnings();
+
+               unset( self::$pathsCollect[$this->path] );
+
+               return $ok;
+       }
+
+       /**
+        * Clean up the temporary file only after an object goes out of scope
+        *
+        * @param object $object
+        * @return TempFSFile This object
+        */
+       public function bind( $object ) {
+               if ( is_object( $object ) ) {
+                       if ( !isset( $object->tempFSFileReferences ) ) {
+                               // Init first since $object might use __get() and return only a copy variable
+                               $object->tempFSFileReferences = [];
+                       }
+                       $object->tempFSFileReferences[] = $this;
+               }
+
+               return $this;
+       }
+
+       /**
+        * Set flag to not clean up after the temporary file
+        *
+        * @return TempFSFile This object
+        */
+       public function preserve() {
+               $this->canDelete = false;
+
+               unset( self::$pathsCollect[$this->path] );
+
+               return $this;
+       }
+
+       /**
+        * Set flag clean up after the temporary file
+        *
+        * @return TempFSFile This object
+        */
+       public function autocollect() {
+               $this->canDelete = true;
+
+               self::$pathsCollect[$this->path] = 1;
+
+               return $this;
+       }
+
+       /**
+        * Try to make sure that all files are purged on error
+        *
+        * This method should only be called internally
+        */
+       public static function purgeAllOnShutdown() {
+               foreach ( self::$pathsCollect as $path ) {
+                       MediaWiki\suppressWarnings();
+                       unlink( $path );
+                       MediaWiki\restoreWarnings();
+               }
+       }
+
+       /**
+        * Cleans up after the temporary file by deleting it
+        */
+       function __destruct() {
+               if ( $this->canDelete ) {
+                       $this->purge();
+               }
+       }
+}
index d3deefb..d0b68bc 100644 (file)
@@ -29,6 +29,7 @@
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
+use Wikimedia\ScopedCallback;
 use Wikimedia\WaitConditionLoop;
 
 /**
index e7c4edb..8d3c6d9 100644 (file)
@@ -88,6 +88,8 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        /** @var int ERR_* constant for the "last error" registry */
        protected $lastRelayError = self::ERR_NONE;
 
+       /** @var integer Callback stack depth for getWithSetCallback() */
+       private $callbackDepth = 0;
        /** @var mixed[] Temporary warm-up cache */
        private $warmupCache = [];
 
@@ -847,8 +849,10 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
        final public function getWithSetCallback( $key, $ttl, $callback, array $opts = [] ) {
                $pcTTL = isset( $opts['pcTTL'] ) ? $opts['pcTTL'] : self::TTL_UNCACHEABLE;
 
-               // Try the process cache if enabled
-               if ( $pcTTL >= 0 ) {
+               // Try the process cache if enabled and the cache callback is not within a cache callback.
+               // Process cache use in nested callbacks is not lag-safe with regard to HOLDOFF_TTL since
+               // the in-memory value is further lagged than the shared one since it uses a blind TTL.
+               if ( $pcTTL >= 0 && $this->callbackDepth == 0 ) {
                        $group = isset( $opts['pcGroup'] ) ? $opts['pcGroup'] : self::PC_PRIMARY;
                        $procCache = $this->getProcessCache( $group );
                        $value = $procCache->get( $key );
@@ -995,7 +999,12 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
 
                // Generate the new value from the callback...
                $setOpts = [];
-               $value = call_user_func_array( $callback, [ $cValue, &$ttl, &$setOpts, $asOf ] );
+               ++$this->callbackDepth;
+               try {
+                       $value = call_user_func_array( $callback, [ $cValue, &$ttl, &$setOpts, $asOf ] );
+               } finally {
+                       --$this->callbackDepth;
+               }
                // When delete() is called, writes are write-holed by the tombstone,
                // so use a special INTERIM key to pass the new value around threads.
                if ( ( $isTombstone && $lockTSE > 0 ) && $value !== false && $ttl >= 0 ) {
index a5a170b..ba63432 100644 (file)
@@ -25,6 +25,7 @@
  */
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
+use Wikimedia\ScopedCallback;
 
 /**
  * Relational database abstraction object
@@ -78,7 +79,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        /** @var callback Error logging callback */
        protected $errorLogger;
 
-       /** @var resource Database connection */
+       /** @var resource|null Database connection */
        protected $mConn = null;
        /** @var bool */
        protected $mOpened = false;
@@ -382,7 +383,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                        }
                        if ( !isset( $p['errorLogger'] ) ) {
                                $p['errorLogger'] = function ( Exception $e ) {
-                                       trigger_error( get_class( $e ) . ': ' . $e->getMessage(), E_WARNING );
+                                       trigger_error( get_class( $e ) . ': ' . $e->getMessage(), E_USER_WARNING );
                                };
                        }
 
@@ -608,6 +609,11 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return !!( $this->mFlags & $flag );
        }
 
+       /**
+        * @param string $name Class field name
+        * @return mixed
+        * @deprecated Since 1.28
+        */
        public function getProperty( $name ) {
                return $this->$name;
        }
@@ -651,14 +657,22 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                if ( $this->htmlErrors !== false ) {
                        ini_set( 'html_errors', $this->htmlErrors );
                }
+
+               return $this->getLastPHPError();
+       }
+
+       /**
+        * @return string|bool Last PHP error for this DB (typically connection errors)
+        */
+       protected function getLastPHPError() {
                if ( $this->mPHPError ) {
                        $error = preg_replace( '!\[<a.*</a>\]!', '', $this->mPHPError );
                        $error = preg_replace( '!^.*?:\s?(.*)$!', '$1', $error );
 
                        return $error;
-               } else {
-                       return false;
                }
+
+               return false;
        }
 
        /**
@@ -773,8 +787,11 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         * @return bool
         */
        protected function isTransactableQuery( $sql ) {
-               $verb = $this->getQueryVerb( $sql );
-               return !in_array( $verb, [ 'BEGIN', 'COMMIT', 'ROLLBACK', 'SHOW', 'SET' ], true );
+               return !in_array(
+                       $this->getQueryVerb( $sql ),
+                       [ 'BEGIN', 'COMMIT', 'ROLLBACK', 'SHOW', 'SET', 'CREATE', 'ALTER' ],
+                       true
+               );
        }
 
        /**
@@ -2828,7 +2845,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                        $fnames = implode( ', ', $this->pendingWriteAndCallbackCallers() );
                        throw new DBUnexpectedError(
                                $this,
-                               "$fname: Cannot COMMIT to clear snapshot because writes are pending ($fnames)."
+                               "$fname: Cannot flush snapshot because writes are pending ($fnames)."
                        );
                }
 
@@ -3249,7 +3266,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                        $fnames = implode( ', ', $this->pendingWriteAndCallbackCallers() );
                        throw new DBUnexpectedError(
                                $this,
-                               "$fname: Cannot COMMIT to clear snapshot because writes are pending ($fnames)."
+                               "$fname: Cannot flush pre-lock snapshot because writes are pending ($fnames)."
                        );
                }
 
@@ -3368,6 +3385,28 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                return true;
        }
 
+       /**
+        * Get the underlying binding handle, mConn
+        *
+        * Makes sure that mConn is set (disconnects and ping() failure can unset it).
+        * This catches broken callers than catch and ignore disconnection exceptions.
+        * Unlike checking isOpen(), this is safe to call inside of open().
+        *
+        * @return resource|object
+        * @throws DBUnexpectedError
+        * @since 1.26
+        */
+       protected function getBindingHandle() {
+               if ( !$this->mConn ) {
+                       throw new DBUnexpectedError(
+                               $this,
+                               'DB connection was already closed or the connection dropped.'
+                       );
+               }
+
+               return $this->mConn;
+       }
+
        /**
         * @since 1.19
         * @return string
@@ -3422,8 +3461,11 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
                }
 
                if ( $this->mConn ) {
-                       // Avoid connection leaks for sanity
+                       // Avoid connection leaks for sanity. Normally, resources close at script completion.
+                       // The connection might already be closed in zend/hhvm by now, so suppress warnings.
+                       \MediaWiki\suppressWarnings();
                        $this->closeConnection();
+                       \MediaWiki\restoreWarnings();
                        $this->mConn = false;
                        $this->mOpened = false;
                }
index 9662a5b..3b7681e 100644 (file)
@@ -1204,28 +1204,6 @@ abstract class DatabaseMysqlBase extends Database {
                return $errno == 2013 || $errno == 2006;
        }
 
-       /**
-        * Get the underlying binding handle, mConn
-        *
-        * Makes sure that mConn is set (disconnects and ping() failure can unset it).
-        * This catches broken callers than catch and ignore disconnection exceptions.
-        * Unlike checking isOpen(), this is safe to call inside of open().
-        *
-        * @return resource|object
-        * @throws DBUnexpectedError
-        * @since 1.26
-        */
-       protected function getBindingHandle() {
-               if ( !$this->mConn ) {
-                       throw new DBUnexpectedError(
-                               $this,
-                               'DB connection was already closed or the connection dropped.'
-                       );
-               }
-
-               return $this->mConn;
-       }
-
        /**
         * @param string $oldName
         * @param string $newName
index c34f901..2f27ff9 100644 (file)
@@ -29,8 +29,7 @@
  * @see Database
  */
 class DatabaseMysqli extends DatabaseMysqlBase {
-       /** @var mysqli */
-       protected $mConn;
+       /** @var $mConn mysqli */
 
        /**
         * @param string $sql
index f82d76d..b72557a 100644 (file)
@@ -61,10 +61,12 @@ class DatabasePostgres extends Database {
        }
 
        function hasConstraint( $name ) {
+               $conn = $this->getBindingHandle();
+
                $sql = "SELECT 1 FROM pg_catalog.pg_constraint c, pg_catalog.pg_namespace n " .
                        "WHERE c.connamespace = n.oid AND conname = '" .
-                       pg_escape_string( $this->mConn, $name ) . "' AND n.nspname = '" .
-                       pg_escape_string( $this->mConn, $this->getCoreSchema() ) . "'";
+                       pg_escape_string( $conn, $name ) . "' AND n.nspname = '" .
+                       pg_escape_string( $conn, $this->getCoreSchema() ) . "'";
                $res = $this->doQuery( $sql );
 
                return $this->numRows( $res );
@@ -90,10 +92,6 @@ class DatabasePostgres extends Database {
                        );
                }
 
-               if ( !strlen( $user ) ) { # e.g. the class is being loaded
-                       return null;
-               }
-
                $this->mServer = $server;
                $this->mUser = $user;
                $this->mPassword = $password;
@@ -119,7 +117,8 @@ class DatabasePostgres extends Database {
                $this->installErrorHandler();
 
                try {
-                       $this->mConn = pg_connect( $this->connectString );
+                       // Use new connections to let LoadBalancer/LBFactory handle reuse
+                       $this->mConn = pg_connect( $this->connectString, PGSQL_CONNECT_FORCE_NEW );
                } catch ( Exception $ex ) {
                        $this->restoreErrorHandler();
                        throw $ex;
@@ -128,10 +127,11 @@ class DatabasePostgres extends Database {
                $phpError = $this->restoreErrorHandler();
 
                if ( !$this->mConn ) {
-                       $this->queryLogger->debug( "DB connection error\n" );
                        $this->queryLogger->debug(
+                               "DB connection error\n" .
                                "Server: $server, Database: $dbName, User: $user, Password: " .
-                               substr( $password, 0, 3 ) . "...\n" );
+                               substr( $password, 0, 3 ) . "...\n"
+                       );
                        $this->queryLogger->debug( $this->lastError() . "\n" );
                        throw new DBConnectionError( $this, str_replace( "\n", ' ', $phpError ) );
                }
@@ -185,19 +185,21 @@ class DatabasePostgres extends Database {
         * @return bool
         */
        protected function closeConnection() {
-               return pg_close( $this->mConn );
+               return $this->mConn ? pg_close( $this->mConn ) : true;
        }
 
        public function doQuery( $sql ) {
+               $conn = $this->getBindingHandle();
+
                $sql = mb_convert_encoding( $sql, 'UTF-8' );
                // Clear previously left over PQresult
-               while ( $res = pg_get_result( $this->mConn ) ) {
+               while ( $res = pg_get_result( $conn ) ) {
                        pg_free_result( $res );
                }
-               if ( pg_send_query( $this->mConn, $sql ) === false ) {
+               if ( pg_send_query( $conn, $sql ) === false ) {
                        throw new DBUnexpectedError( $this, "Unable to post new query to PostgreSQL\n" );
                }
-               $this->mLastResult = pg_get_result( $this->mConn );
+               $this->mLastResult = pg_get_result( $conn );
                $this->mAffectedRows = null;
                if ( pg_result_error( $this->mLastResult ) ) {
                        return false;
@@ -281,10 +283,11 @@ class DatabasePostgres extends Database {
 
                # @todo hashar: not sure if the following test really trigger if the object
                #          fetching failed.
-               if ( pg_last_error( $this->mConn ) ) {
+               $conn = $this->getBindingHandle();
+               if ( pg_last_error( $conn ) ) {
                        throw new DBUnexpectedError(
                                $this,
-                               'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+                               'SQL error: ' . htmlspecialchars( pg_last_error( $conn ) )
                        );
                }
 
@@ -298,10 +301,12 @@ class DatabasePostgres extends Database {
                MediaWiki\suppressWarnings();
                $row = pg_fetch_array( $res );
                MediaWiki\restoreWarnings();
-               if ( pg_last_error( $this->mConn ) ) {
+
+               $conn = $this->getBindingHandle();
+               if ( pg_last_error( $conn ) ) {
                        throw new DBUnexpectedError(
                                $this,
-                               'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+                               'SQL error: ' . htmlspecialchars( pg_last_error( $conn ) )
                        );
                }
 
@@ -315,10 +320,12 @@ class DatabasePostgres extends Database {
                MediaWiki\suppressWarnings();
                $n = pg_num_rows( $res );
                MediaWiki\restoreWarnings();
-               if ( pg_last_error( $this->mConn ) ) {
+
+               $conn = $this->getBindingHandle();
+               if ( pg_last_error( $conn ) ) {
                        throw new DBUnexpectedError(
                                $this,
-                               'SQL error: ' . htmlspecialchars( pg_last_error( $this->mConn ) )
+                               'SQL error: ' . htmlspecialchars( pg_last_error( $conn ) )
                        );
                }
 
@@ -371,9 +378,9 @@ class DatabasePostgres extends Database {
                        } else {
                                return pg_last_error();
                        }
-               } else {
-                       return 'No database connection';
                }
+
+               return $this->getLastPHPError() ?: 'No database connection';
        }
 
        function lastErrno() {
@@ -1033,7 +1040,7 @@ __INDEXATTR__;
                                $this->mCoreSchema . "\"\n" );
                }
                /* Commit SET otherwise it will be rollbacked on error or IGNORE SELECT */
-               $this->commit( __METHOD__ );
+               $this->commit( __METHOD__, self::FLUSHING_INTERNAL );
        }
 
        /**
@@ -1051,7 +1058,8 @@ __INDEXATTR__;
         */
        function getServerVersion() {
                if ( !isset( $this->numericVersion ) ) {
-                       $versionInfo = pg_version( $this->mConn );
+                       $conn = $this->getBindingHandle();
+                       $versionInfo = pg_version( $conn );
                        if ( version_compare( $versionInfo['client'], '7.4.0', 'lt' ) ) {
                                // Old client, abort install
                                $this->numericVersion = '7.3 or earlier';
@@ -1060,7 +1068,7 @@ __INDEXATTR__;
                                $this->numericVersion = $versionInfo['server'];
                        } else {
                                // Bug 16937: broken pgsql extension from PHP<5.3
-                               $this->numericVersion = pg_parameter_status( $this->mConn, 'server_version' );
+                               $this->numericVersion = pg_parameter_status( $conn, 'server_version' );
                        }
                }
 
@@ -1079,7 +1087,7 @@ __INDEXATTR__;
                if ( !is_array( $types ) ) {
                        $types = [ $types ];
                }
-               if ( !$schema ) {
+               if ( $schema === false ) {
                        $schema = $this->getCoreSchema();
                }
                $table = $this->realTableName( $table, 'raw' );
@@ -1167,8 +1175,12 @@ SQL;
         * @return bool
         */
        function schemaExists( $schema ) {
-               $exists = $this->selectField( '"pg_catalog"."pg_namespace"', 1,
-                       [ 'nspname' => $schema ], __METHOD__ );
+               if ( !strlen( $schema ) ) {
+                       return false; // short-circuit
+               }
+
+               $exists = $this->selectField(
+                       '"pg_catalog"."pg_namespace"', 1, [ 'nspname' => $schema ], __METHOD__ );
 
                return (bool)$exists;
        }
@@ -1228,8 +1240,7 @@ SQL;
 
        function strencode( $s ) {
                // Should not be called by us
-
-               return pg_escape_string( $this->mConn, $s );
+               return pg_escape_string( $this->getBindingHandle(), $s );
        }
 
        /**
@@ -1237,6 +1248,8 @@ SQL;
         * @return string|int
         */
        function addQuotes( $s ) {
+               $conn = $this->getBindingHandle();
+
                if ( is_null( $s ) ) {
                        return 'NULL';
                } elseif ( is_bool( $s ) ) {
@@ -1245,12 +1258,12 @@ SQL;
                        if ( $s instanceof PostgresBlob ) {
                                $s = $s->fetch();
                        } else {
-                               $s = pg_escape_bytea( $this->mConn, $s->fetch() );
+                               $s = pg_escape_bytea( $conn, $s->fetch() );
                        }
                        return "'$s'";
                }
 
-               return "'" . pg_escape_string( $this->mConn, $s ) . "'";
+               return "'" . pg_escape_string( $conn, $s ) . "'";
        }
 
        /**
index 3ccf3f0..46f7a5b 100644 (file)
@@ -31,20 +31,17 @@ class DatabaseSqlite extends Database {
 
        /** @var string Directory */
        protected $dbDir;
-
        /** @var string File name for SQLite database file */
        protected $dbPath;
-
        /** @var string Transaction mode */
        protected $trxMode;
 
        /** @var int The number of rows affected as an integer */
        protected $mAffectedRows;
-
        /** @var resource */
        protected $mLastResult;
 
-       /** @var PDO */
+       /** @var $mConn PDO */
        protected $mConn;
 
        /** @var FSLockManager (hopefully on the same server as the DB) */
@@ -145,7 +142,7 @@ class DatabaseSqlite extends Database {
         * @param string $dbName
         *
         * @throws DBConnectionError
-        * @return PDO
+        * @return bool
         */
        function open( $server, $user, $pass, $dbName ) {
                $this->close();
@@ -156,7 +153,7 @@ class DatabaseSqlite extends Database {
                }
                $this->openFile( $fileName );
 
-               return $this->mConn;
+               return (bool)$this->mConn;
        }
 
        /**
@@ -494,15 +491,12 @@ class DatabaseSqlite extends Database {
         * @param string $table
         * @param string $index
         * @param string $fname
-        * @return array
+        * @return array|false
         */
        function indexInfo( $table, $index, $fname = __METHOD__ ) {
                $sql = 'PRAGMA index_info(' . $this->addQuotes( $this->indexName( $index ) ) . ')';
                $res = $this->query( $sql, $fname );
-               if ( !$res ) {
-                       return null;
-               }
-               if ( $res->numRows() == 0 ) {
+               if ( !$res || $res->numRows() == 0 ) {
                        return false;
                }
                $info = [];
index c32a7ff..c80fdec 100644 (file)
@@ -23,6 +23,7 @@
  * @file
  * @ingroup Database
  */
+use Wikimedia\ScopedCallback;
 
 /**
  * Basic database interface for live and lazy-loaded relation database handles
@@ -321,14 +322,6 @@ interface IDatabase {
         */
        public function getFlag( $flag );
 
-       /**
-        * General read-only accessor
-        *
-        * @param string $name
-        * @return string
-        */
-       public function getProperty( $name );
-
        /**
         * @return string
         */
index 9c9f18d..ff1bd43 100644 (file)
@@ -86,28 +86,25 @@ interface ILBFactory {
 
        /**
         * Create a new load balancer for external storage. The resulting object will be
-        * untracked, not chronology-protected, and the caller is responsible for
-        * cleaning it up.
+        * untracked, not chronology-protected, and the caller is responsible for cleaning it up.
         *
         * This method is for only advanced usage and callers should almost always use
         * getExternalLB() instead. This method can be useful when a table is used as a
         * key/value store. In that cases, one might want to query it in autocommit mode
         * (DBO_TRX off) but still use DBO_TRX transaction rounds on other tables.
         *
-        * @param string $cluster External storage cluster, or false for core
-        * @param bool|string $domain Domain ID, or false for the current domain
+        * @param string $cluster External storage cluster name
         * @return ILoadBalancer
         */
-       public function newExternalLB( $cluster, $domain = false );
+       public function newExternalLB( $cluster );
 
        /**
         * Get a cached (tracked) load balancer for external storage
         *
-        * @param string $cluster External storage cluster, or false for core
-        * @param bool|string $domain Domain ID, or false for the current domain
+        * @param string $cluster External storage cluster name
         * @return ILoadBalancer
         */
-       public function getExternalLB( $cluster, $domain = false );
+       public function getExternalLB( $cluster );
 
        /**
         * Execute a function for each tracked load balancer
index 929bd4d..d21289b 100644 (file)
@@ -22,6 +22,7 @@
  */
 
 use Psr\Log\LoggerInterface;
+use Wikimedia\ScopedCallback;
 
 /**
  * An interface for generating database load balancers
@@ -96,7 +97,7 @@ abstract class LBFactory implements ILBFactory {
                $this->errorLogger = isset( $conf['errorLogger'] )
                        ? $conf['errorLogger']
                        : function ( Exception $e ) {
-                               trigger_error( E_WARNING, get_class( $e ) . ': ' . $e->getMessage() );
+                               trigger_error( E_USER_WARNING, get_class( $e ) . ': ' . $e->getMessage() );
                        };
 
                $this->profiler = isset( $params['profiler'] ) ? $params['profiler'] : null;
@@ -152,18 +153,16 @@ abstract class LBFactory implements ILBFactory {
        /**
         * @see ILBFactory::newExternalLB()
         * @param string $cluster
-        * @param bool $domain
         * @return LoadBalancer
         */
-       abstract public function newExternalLB( $cluster, $domain = false );
+       abstract public function newExternalLB( $cluster );
 
        /**
         * @see ILBFactory::getExternalLB()
         * @param string $cluster
-        * @param bool $domain
         * @return LoadBalancer
         */
-       abstract public function getExternalLB( $cluster, $domain = false );
+       abstract public function getExternalLB( $cluster );
 
        /**
         * Call a method of each tracked load balancer
index 83ca650..a7cc16c 100644 (file)
@@ -255,13 +255,7 @@ class LBFactoryMulti extends LBFactory {
                return $this->mainLBs[$section];
        }
 
-       /**
-        * @param string $cluster
-        * @param DatabaseDomain|string|bool $domain Domain ID, or false for the current domain
-        * @throws InvalidArgumentException
-        * @return LoadBalancer
-        */
-       public function newExternalLB( $cluster, $domain = false ) {
+       public function newExternalLB( $cluster ) {
                if ( !isset( $this->externalLoads[$cluster] ) ) {
                        throw new InvalidArgumentException( __METHOD__ . ": Unknown cluster \"$cluster\"" );
                }
@@ -281,14 +275,9 @@ class LBFactoryMulti extends LBFactory {
                );
        }
 
-       /**
-        * @param string $cluster External storage cluster, or false for core
-        * @param DatabaseDomain|string|bool $domain Domain ID, or false for the current domain
-        * @return LoadBalancer
-        */
-       public function getExternalLB( $cluster, $domain = false ) {
+       public function getExternalLB( $cluster ) {
                if ( !isset( $this->extLBs[$cluster] ) ) {
-                       $this->extLBs[$cluster] = $this->newExternalLB( $cluster, $domain );
+                       $this->extLBs[$cluster] = $this->newExternalLB( $cluster );
                        $this->getChronologyProtector()->initLB( $this->extLBs[$cluster] );
                }
 
index 674bafd..1e69d8f 100644 (file)
@@ -91,13 +91,7 @@ class LBFactorySimple extends LBFactory {
                return $this->mainLB;
        }
 
-       /**
-        * @param string $cluster
-        * @param bool|string $domain
-        * @return LoadBalancer
-        * @throws InvalidArgumentException
-        */
-       public function newExternalLB( $cluster, $domain = false ) {
+       public function newExternalLB( $cluster ) {
                if ( !isset( $this->externalClusters[$cluster] ) ) {
                        throw new InvalidArgumentException( __METHOD__ . ": Unknown cluster \"$cluster\"." );
                }
@@ -105,14 +99,9 @@ class LBFactorySimple extends LBFactory {
                return $this->newLoadBalancer( $this->externalClusters[$cluster] );
        }
 
-       /**
-        * @param string $cluster
-        * @param bool|string $domain
-        * @return LoadBalancer
-        */
-       public function getExternalLB( $cluster, $domain = false ) {
+       public function getExternalLB( $cluster ) {
                if ( !isset( $this->extLBs[$cluster] ) ) {
-                       $this->extLBs[$cluster] = $this->newExternalLB( $cluster, $domain );
+                       $this->extLBs[$cluster] = $this->newExternalLB( $cluster );
                        $this->getChronologyProtector()->initLB( $this->extLBs[$cluster] );
                }
 
index af4a350..e116888 100644 (file)
@@ -39,7 +39,9 @@ class LBFactorySingle extends LBFactory {
                        throw new InvalidArgumentException( "Missing 'connection' argument." );
                }
 
-               $this->lb = new LoadBalancerSingle( array_merge( $this->baseLoadBalancerParams(), $conf ) );
+               $lb = new LoadBalancerSingle( array_merge( $this->baseLoadBalancerParams(), $conf ) );
+               $this->initLoadBalancer( $lb );
+               $this->lb = $lb;
        }
 
        /**
@@ -53,36 +55,34 @@ class LBFactorySingle extends LBFactory {
        }
 
        /**
-        * @param bool|string $wiki
+        * @param bool|string $domain (unused)
         * @return LoadBalancerSingle
         */
-       public function newMainLB( $wiki = false ) {
+       public function newMainLB( $domain = false ) {
                return $this->lb;
        }
 
        /**
-        * @param bool|string $wiki
+        * @param bool|string $domain (unused)
         * @return LoadBalancerSingle
         */
-       public function getMainLB( $wiki = false ) {
+       public function getMainLB( $domain = false ) {
                return $this->lb;
        }
 
        /**
-        * @param string $cluster External storage cluster, or false for core
-        * @param bool|string $wiki Wiki ID, or false for the current wiki
+        * @param string $cluster External storage cluster name (unused)
         * @return LoadBalancerSingle
         */
-       public function newExternalLB( $cluster, $wiki = false ) {
+       public function newExternalLB( $cluster ) {
                return $this->lb;
        }
 
        /**
-        * @param string $cluster External storage cluster, or false for core
-        * @param bool|string $wiki Wiki ID, or false for the current wiki
+        * @param string $cluster External storage cluster name (unused)
         * @return LoadBalancerSingle
         */
-       public function getExternalLB( $cluster, $wiki = false ) {
+       public function getExternalLB( $cluster ) {
                return $this->lb;
        }
 
index 32df19d..a86e1de 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Database
  */
 use Psr\Log\LoggerInterface;
+use Wikimedia\ScopedCallback;
 
 /**
  * Database connection, tracking, load balancing, and transaction manager for a cluster
@@ -189,7 +190,7 @@ class LoadBalancer implements ILoadBalancer {
                $this->errorLogger = isset( $params['errorLogger'] )
                        ? $params['errorLogger']
                        : function ( Exception $e ) {
-                               trigger_error( get_class( $e ) . ': ' . $e->getMessage(), E_WARNING );
+                               trigger_error( get_class( $e ) . ': ' . $e->getMessage(), E_USER_WARNING );
                        };
 
                foreach ( [ 'replLogger', 'connLogger', 'queryLogger', 'perfLogger' ] as $key ) {
@@ -552,7 +553,7 @@ class LoadBalancer implements ILoadBalancer {
                if ( $i == self::DB_REPLICA ) {
                        $this->mLastError = 'Unknown error'; // reset error string
                        # Try the general server pool if $groups are unavailable.
-                       $i = in_array( false, $groups, true )
+                       $i = ( $groups === [ false ] )
                                ? false // don't bother with this if that is what was tried above
                                : $this->getReaderIndex( false, $domain );
                        # Couldn't find a working server in getReaderIndex()?
@@ -886,7 +887,7 @@ class LoadBalancer implements ILoadBalancer {
                        // If all servers were busy, mLastError will contain something sensible
                        throw new DBConnectionError( null, $this->mLastError );
                } else {
-                       $context['db_server'] = $conn->getProperty( 'mServer' );
+                       $context['db_server'] = $conn->getServer();
                        $this->connLogger->warning(
                                "Connection error: {last_error} ({db_server})",
                                $context
index 0dec95f..0a05202 100644 (file)
@@ -68,13 +68,6 @@ class LoadBalancerSingle extends LoadBalancer {
                return new static( [ 'connection' => $db ] + $params );
        }
 
-       /**
-        *
-        * @param string $server
-        * @param bool $dbNameOverride
-        *
-        * @return IDatabase
-        */
        protected function reallyOpenConnection( array $server, $dbNameOverride = false ) {
                return $this->db;
        }
index 99c9126..da4909d 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 use Psr\Log\LoggerInterface;
+use Wikimedia\ScopedCallback;
 
 /**
  * Basic DB load monitor with no external dependencies
index 70f67b7..29bbf40 100644 (file)
@@ -24,6 +24,7 @@
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
+use Wikimedia\ScopedCallback;
 
 /**
  * Class for reading xmp data containing properties relevant to
index 9ad4097..67c957a 100644 (file)
@@ -82,9 +82,10 @@ class JpegMetadataExtractor {
                                // this is just a sanity check
                                throw new MWException( 'Too many jpeg segments. Aborting' );
                        }
-                       if ( $buffer !== "\xFF" ) {
-                               throw new MWException( "Error reading jpeg file marker. " .
-                                       "Expected 0xFF but got " . bin2hex( $buffer ) );
+                       while ( $buffer !== "\xFF" ) {
+                               // In theory JPEG files are not allowed to contain anything between the sections,
+                               // but in practice they sometimes do. It's customary to ignore the garbage data.
+                               $buffer = fread( $fh, 1 );
                        }
 
                        $buffer = fread( $fh, 1 );
index 8360920..f3b33ac 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Media
  */
+use Wikimedia\ScopedCallback;
 
 /**
  * Handler for SVG images.
index 53a474b..0a4f0ed 100644 (file)
@@ -326,9 +326,9 @@ class ObjectCache {
         * @throws UnexpectedValueException
         */
        public static function newWANCacheFromParams( array $params ) {
+               $erGroup = MediaWikiServices::getInstance()->getEventRelayerGroup();
                foreach ( $params['channels'] as $action => $channel ) {
-                       $params['relayers'][$action] = MediaWikiServices::getInstance()->getEventRelayerGroup()
-                               ->getRelayer( $channel );
+                       $params['relayers'][$action] = $erGroup->getRelayer( $channel );
                        $params['channels'][$action] = $channel;
                }
                $params['cache'] = self::newFromParams( $params['store'] );
index 548e533..15f5238 100644 (file)
@@ -706,6 +706,10 @@ class Article implements Page {
                        }
                }
 
+               # Use adaptive TTLs for CDN so delayed/failed purges are noticed less often.
+               # This could use getTouched(), but that could be scary for major template edits.
+               $outputPage->adaptCdnTTL( $this->mPage->getTimestamp(), IExpiringStore::TTL_DAY );
+
                # Check for any __NOINDEX__ tags on the page using $pOutput
                $policy = $this->getRobotPolicy( 'view', $pOutput );
                $outputPage->setIndexPolicy( $policy['index'] );
@@ -715,7 +719,6 @@ class Article implements Page {
                $this->mPage->doViewUpdates( $user, $oldid );
 
                $outputPage->addModules( 'mediawiki.action.view.postEdit' );
-
        }
 
        /**
index 865471c..6d2be51 100644 (file)
@@ -68,6 +68,10 @@ class CategoryPage extends Article {
                if ( $title->inNamespace( NS_CATEGORY ) ) {
                        $this->closeShowCategory();
                }
+
+               # Use adaptive TTLs for CDN so delayed/failed purges are noticed less often
+               $outputPage = $this->getContext()->getOutput();
+               $outputPage->adaptCdnTTL( $this->mPage->getTouched(), IExpiringStore::TTL_MINUTE );
        }
 
        function openShowCategory() {
index 3dc41fb..0b26d28 100644 (file)
@@ -2399,6 +2399,10 @@ class WikiPage implements Page, IDBAccessObject {
                } elseif ( $options['changed'] ) { // bug 50785
                        self::onArticleEdit( $this->mTitle, $revision );
                }
+
+               ResourceLoaderWikiModule::invalidateModuleCache(
+                       $this->mTitle, $options['oldrevision'], $revision, wfWikiID()
+               );
        }
 
        /**
@@ -2912,6 +2916,7 @@ class WikiPage implements Page, IDBAccessObject {
                // unless they actually try to catch exceptions (which is rare).
 
                // we need to remember the old content so we can use it to generate all deletion updates.
+               $revision = $this->getRevision();
                try {
                        $content = $this->getContent( Revision::RAW );
                } catch ( Exception $ex ) {
@@ -2921,17 +2926,13 @@ class WikiPage implements Page, IDBAccessObject {
                        $content = null;
                }
 
+               $fields = Revision::selectFields();
+               $bitfield = false;
+
                // Bitfields to further suppress the content
                if ( $suppress ) {
-                       $bitfield = 0;
-                       // This should be 15...
-                       $bitfield |= Revision::DELETED_TEXT;
-                       $bitfield |= Revision::DELETED_COMMENT;
-                       $bitfield |= Revision::DELETED_USER;
-                       $bitfield |= Revision::DELETED_RESTRICTED;
-                       $deletionFields = [ $dbw->addQuotes( $bitfield ) . ' AS deleted' ];
-               } else {
-                       $deletionFields = [ 'rev_deleted AS deleted' ];
+                       $bitfield = Revision::SUPPRESSED_ALL;
+                       $fields = array_diff( $fields, [ 'rev_deleted' ] );
                }
 
                // For now, shunt the revision data into the archive table.
@@ -2942,10 +2943,9 @@ class WikiPage implements Page, IDBAccessObject {
                // the rev_deleted field, which is reserved for this purpose.
 
                // Get all of the page revisions
-               $fields = array_diff( Revision::selectFields(), [ 'rev_deleted' ] );
                $res = $dbw->select(
                        'revision',
-                       array_merge( $fields, $deletionFields ),
+                       $fields,
                        [ 'rev_page' => $id ],
                        __METHOD__,
                        'FOR UPDATE'
@@ -2968,7 +2968,7 @@ class WikiPage implements Page, IDBAccessObject {
                                'ar_flags'      => '',
                                'ar_len'        => $row->rev_len,
                                'ar_page_id'    => $id,
-                               'ar_deleted'    => $row->deleted,
+                               'ar_deleted'    => $suppress ? $bitfield : $row->rev_deleted,
                                'ar_sha1'       => $row->rev_sha1,
                        ];
                        if ( $wgContentHandlerUseDB ) {
@@ -3011,7 +3011,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                $dbw->endAtomic( __METHOD__ );
 
-               $this->doDeleteUpdates( $id, $content );
+               $this->doDeleteUpdates( $id, $content, $revision );
 
                Hooks::run( 'ArticleDeleteComplete', [
                        &$wikiPageBeforeDelete,
@@ -3058,11 +3058,12 @@ class WikiPage implements Page, IDBAccessObject {
         * Do some database updates after deletion
         *
         * @param int $id The page_id value of the page being deleted
-        * @param Content $content Optional page content to be used when determining
+        * @param Content|null $content Optional page content to be used when determining
         *   the required updates. This may be needed because $this->getContent()
         *   may already return null when the page proper was deleted.
+        * @param Revision|null $revision The latest page revision
         */
-       public function doDeleteUpdates( $id, Content $content = null ) {
+       public function doDeleteUpdates( $id, Content $content = null, Revision $revision = null ) {
                try {
                        $countable = $this->isCountable();
                } catch ( Exception $ex ) {
@@ -3090,6 +3091,9 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Clear caches
                WikiPage::onArticleDelete( $this->mTitle );
+               ResourceLoaderWikiModule::invalidateModuleCache(
+                       $this->mTitle, $revision, null, wfWikiID()
+               );
 
                // Reset this object and the Title object
                $this->loadFromRow( false, self::READ_LATEST );
index 01cce02..ef26db6 100644 (file)
@@ -487,40 +487,58 @@ class CoreParserFunctions {
                return $mwObject->matchStartToEnd( $value );
        }
 
-       public static function formatRaw( $num, $raw ) {
+       public static function formatRaw( $num, $raw, Language $language ) {
                if ( self::matchAgainstMagicword( 'rawsuffix', $raw ) ) {
                        return $num;
                } else {
-                       global $wgContLang;
-                       return $wgContLang->formatNum( $num );
+                       return $language->formatNum( $num );
                }
        }
+
        public static function numberofpages( $parser, $raw = null ) {
-               return self::formatRaw( SiteStats::pages(), $raw );
+               return self::formatRaw( SiteStats::pages(), $raw, $parser->getFunctionLang() );
        }
+
        public static function numberofusers( $parser, $raw = null ) {
-               return self::formatRaw( SiteStats::users(), $raw );
+               return self::formatRaw( SiteStats::users(), $raw, $parser->getFunctionLang() );
        }
        public static function numberofactiveusers( $parser, $raw = null ) {
-               return self::formatRaw( SiteStats::activeUsers(), $raw );
+               return self::formatRaw( SiteStats::activeUsers(), $raw, $parser->getFunctionLang() );
        }
+
        public static function numberofarticles( $parser, $raw = null ) {
-               return self::formatRaw( SiteStats::articles(), $raw );
+               return self::formatRaw( SiteStats::articles(), $raw, $parser->getFunctionLang() );
        }
+
        public static function numberoffiles( $parser, $raw = null ) {
-               return self::formatRaw( SiteStats::images(), $raw );
+               return self::formatRaw( SiteStats::images(), $raw, $parser->getFunctionLang() );
        }
+
        public static function numberofadmins( $parser, $raw = null ) {
-               return self::formatRaw( SiteStats::numberingroup( 'sysop' ), $raw );
+               return self::formatRaw(
+                       SiteStats::numberingroup( 'sysop' ),
+                       $raw,
+                       $parser->getFunctionLang()
+               );
        }
+
        public static function numberofedits( $parser, $raw = null ) {
-               return self::formatRaw( SiteStats::edits(), $raw );
+               return self::formatRaw( SiteStats::edits(), $raw, $parser->getFunctionLang() );
        }
+
        public static function pagesinnamespace( $parser, $namespace = 0, $raw = null ) {
-               return self::formatRaw( SiteStats::pagesInNs( intval( $namespace ) ), $raw );
+               return self::formatRaw(
+                       SiteStats::pagesInNs( intval( $namespace ) ),
+                       $raw,
+                       $parser->getFunctionLang()
+               );
        }
        public static function numberingroup( $parser, $name = '', $raw = null ) {
-               return self::formatRaw( SiteStats::numberingroup( strtolower( $name ) ), $raw );
+               return self::formatRaw(
+                       SiteStats::numberingroup( strtolower( $name ) ),
+                       $raw,
+                       $parser->getFunctionLang()
+               );
        }
 
        /**
@@ -727,7 +745,7 @@ class CoreParserFunctions {
 
                $title = Title::makeTitleSafe( NS_CATEGORY, $name );
                if ( !$title ) { # invalid title
-                       return self::formatRaw( 0, $raw );
+                       return self::formatRaw( 0, $raw, $parser->getFunctionLang() );
                }
                $wgContLang->findVariantLink( $name, $title, true );
 
@@ -753,7 +771,7 @@ class CoreParserFunctions {
                }
 
                $count = $cache[$name][$type];
-               return self::formatRaw( $count, $raw );
+               return self::formatRaw( $count, $raw, $parser->getFunctionLang() );
        }
 
        /**
@@ -769,7 +787,7 @@ class CoreParserFunctions {
                $title = Title::newFromText( $page );
 
                if ( !is_object( $title ) ) {
-                       return self::formatRaw( 0, $raw );
+                       return self::formatRaw( 0, $raw, $parser->getFunctionLang() );
                }
 
                // fetch revision from cache/database and return the value
@@ -779,7 +797,7 @@ class CoreParserFunctions {
                        // We've had bugs where rev_len was not being recorded for empty pages, see T135414
                        $length = 0;
                }
-               return self::formatRaw( $length, $raw );
+               return self::formatRaw( $length, $raw, $parser->getFunctionLang() );
        }
 
        /**
index f0898ba..669e9fc 100644 (file)
@@ -22,6 +22,7 @@
  */
 use MediaWiki\Linker\LinkRenderer;
 use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
 
 /**
  * @defgroup Parser Parser
index 25c2aa4..9a10878 100644 (file)
@@ -20,6 +20,7 @@
  * @file
  * @ingroup Parser
  */
+use Wikimedia\ScopedCallback;
 
 /**
  * @brief Set options of the Parser
index db9c95b..8b4f01a 100644 (file)
@@ -21,6 +21,7 @@
  * @ingroup Profiler
  * @defgroup Profiler Profiler
  */
+use Wikimedia\ScopedCallback;
 
 /**
  * Profiler base class that defines the interface and some trivial
index 745c233..d613b2e 100644 (file)
@@ -397,7 +397,7 @@ class ExtensionProcessor implements Processor {
                if ( isset( $info['config'] ) ) {
                        foreach ( $info['config'] as $key => $data ) {
                                $value = $data['value'];
-                               if ( isset( $value['merge_strategy'] ) ) {
+                               if ( isset( $data['merge_strategy'] ) ) {
                                        $value[ExtensionRegistry::MERGE_STRATEGY] = $data['merge_strategy'];
                                }
                                if ( isset( $data['path'] ) && $data['path'] ) {
index 35044e1..0236ea2 100644 (file)
@@ -84,9 +84,8 @@ class ExtensionRegistry {
        }
 
        public function __construct() {
-               // We use a try/catch instead of the $fallback parameter because
-               // we don't want to fail here if $wgObjectCaches is not configured
-               // properly for APC setup
+               // We use a try/catch because we don't want to fail here
+               // if $wgObjectCaches is not configured properly for APC setup
                try {
                        $this->cache = MediaWikiServices::getInstance()->getLocalServerObjectCache();
                } catch ( MWException $e ) {
@@ -259,6 +258,9 @@ class ExtensionRegistry {
                                case 'array_merge_recursive':
                                        $GLOBALS[$key] = array_merge_recursive( $GLOBALS[$key], $val );
                                        break;
+                               case 'array_replace_recursive':
+                                       $GLOBALS[$key] = array_replace_recursive( $GLOBALS[$key], $val );
+                                       break;
                                case 'array_plus_2d':
                                        $GLOBALS[$key] = wfArrayPlus2d( $GLOBALS[$key], $val );
                                        break;
index 2dcc841..07649e3 100644 (file)
@@ -128,6 +128,9 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
 
        protected $targets = [ 'desktop' ];
 
+       /** @var bool Whether CSSJanus flipping should be skipped for this module */
+       protected $noflip = false;
+
        /**
         * @var bool Whether getStyleURLsForDebug should return raw file paths,
         * or return load.php urls
@@ -277,6 +280,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
                                // Single booleans
                                case 'debugRaw':
                                case 'raw':
+                               case 'noflip':
                                        $this->{$member} = (bool)$option;
                                        break;
                        }
@@ -913,7 +917,7 @@ class ResourceLoaderFileModule extends ResourceLoaderModule {
         * @return bool
         */
        public function getFlip( $context ) {
-               return $context->getDirection() === 'rtl';
+               return $context->getDirection() === 'rtl' && !$this->noflip;
        }
 
        /**
index 1630269..ef942fa 100644 (file)
@@ -41,6 +41,7 @@ class ResourceLoaderLanguageDataModule extends ResourceLoaderModule {
                        'digitTransformTable' => $language->digitTransformTable(),
                        'separatorTransformTable' => $language->separatorTransformTable(),
                        'grammarForms' => $language->getGrammarForms(),
+                       'grammarTransformations' => $language->getGrammarTransformations(),
                        'pluralRules' => $language->getPluralRules(),
                        'digitGroupingPattern' => $language->digitGroupingPattern(),
                        'fallbackLanguages' => $language->getFallbackLanguages(),
index 3e94460..796c575 100644 (file)
@@ -25,6 +25,7 @@
 use Psr\Log\LoggerAwareInterface;
 use Psr\Log\LoggerInterface;
 use Psr\Log\NullLogger;
+use Wikimedia\ScopedCallback;
 
 /**
  * Abstraction for ResourceLoader modules, with name registration and maxage functionality.
index 7cbec70..3deeb84 100644 (file)
@@ -26,7 +26,8 @@
  * Abstraction for ResourceLoader modules which pull from wiki pages
  *
  * This can only be used for wiki pages in the MediaWiki and User namespaces,
- * because of its dependence on the functionality of Title::isCssJsSubpage.
+ * because of its dependence on the functionality of Title::isCssJsSubpage
+ * and Title::isCssOrJsPage().
  *
  * This module supports being used as a placeholder for a module on a remote wiki.
  * To do so, getDB() must be overloaded to return a foreign database object that
@@ -143,7 +144,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
        }
 
        /**
-        * @param string $title
+        * @param string $titleText
         * @return null|string
         */
        protected function getContent( $titleText ) {
@@ -336,7 +337,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
         * @since 1.28
         * @param ResourceLoaderContext $context
         * @param IDatabase $db
-        * @param string[] $modules
+        * @param string[] $moduleNames
         */
        public static function preloadTitleInfo(
                ResourceLoaderContext $context, IDatabase $db, array $moduleNames
@@ -345,6 +346,7 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                // getDB() can be overridden to point to a foreign database.
                // For now, only preload local. In the future, we could preload by wikiID.
                $allPages = [];
+               /** @var ResourceLoaderWikiModule[] $wikiModules */
                $wikiModules = [];
                foreach ( $moduleNames as $name ) {
                        $module = $rl->getModule( $name );
@@ -357,9 +359,29 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                                }
                        }
                }
-               $allInfo = static::fetchTitleInfo( $db, array_keys( $allPages ), __METHOD__ );
-               foreach ( $wikiModules as $module ) {
-                       $pages = $module->getPages( $context );
+
+               $pageNames = array_keys( $allPages );
+               sort( $pageNames );
+               $hash = sha1( implode( '|', $pageNames ) );
+
+               // Avoid Zend bug where "static::" does not apply LSB in the closure
+               $func = [ static::class, 'fetchTitleInfo' ];
+               $fname = __METHOD__;
+
+               $cache = ObjectCache::getMainWANInstance();
+               $allInfo = $cache->getWithSetCallback(
+                       $cache->makeGlobalKey( 'resourceloader', 'titleinfo', $db->getWikiID(), $hash ),
+                       $cache::TTL_HOUR,
+                       function ( $curVal, &$ttl, array &$setOpts ) use ( $func, $pageNames, $db, $fname ) {
+                               $setOpts += Database::getCacheSetOptions( $db );
+
+                               return call_user_func( $func, $db, $pageNames, $fname );
+                       },
+                       [ 'checkKeys' => [ $cache->makeGlobalKey( 'resourceloader', 'titleinfo', $db->getWikiID() ) ] ]
+               );
+
+               foreach ( $wikiModules as $wikiModule ) {
+                       $pages = $wikiModule->getPages( $context );
                        // Before we intersect, map the names to canonical form (T145673).
                        $intersect = [];
                        foreach ( $pages as $page => $unused ) {
@@ -375,13 +397,41 @@ class ResourceLoaderWikiModule extends ResourceLoaderModule {
                                }
                        }
                        $info = array_intersect_key( $allInfo, $intersect );
-
                        $pageNames = array_keys( $pages );
                        sort( $pageNames );
                        $key = implode( '|', $pageNames );
-                       $module->setTitleInfo( $key, $info );
+                       $wikiModule->setTitleInfo( $key, $info );
+               }
+       }
+
+       /**
+        * Clear the preloadTitleInfo() cache for all wiki modules on this wiki on
+        * page change if it was a JS or CSS page
+        *
+        * @param Title $title
+        * @param Revision|null $old Prior page revision
+        * @param Revision|null $new New page revision
+        * @param string $wikiId
+        * @since 1.28
+        */
+       public static function invalidateModuleCache(
+               Title $title, Revision $old = null, Revision $new = null, $wikiId
+       ) {
+               static $formats = [ CONTENT_FORMAT_CSS, CONTENT_FORMAT_JAVASCRIPT ];
+
+               if ( $old && in_array( $old->getContentFormat(), $formats ) ) {
+                       $purge = true;
+               } elseif ( $new && in_array( $new->getContentFormat(), $formats ) ) {
+                       $purge = true;
+               } else {
+                       $purge = ( $title->isCssOrJsPage() || $title->isCssJsSubpage() );
+               }
+
+               if ( $purge ) {
+                       $cache = ObjectCache::getMainWANInstance();
+                       $key = $cache->makeGlobalKey( 'resourceloader', 'titleinfo', $wikiId );
+                       $cache->touchCheckKey( $key );
                }
-               return $allInfo;
        }
 
        /**
index 695ce5a..084ac05 100644 (file)
@@ -162,12 +162,39 @@ class PHPSessionHandler implements \SessionHandlerInterface {
                }
        }
 
+       /**
+        * Workaround for PHP5 bug
+        *
+        * PHP5 has a bug in handling boolean return values for
+        * SessionHandlerInterface methods, it expects 0 or -1 instead of true or
+        * false. See <https://wiki.php.net/rfc/session.user.return-value>.
+        *
+        * PHP7 and HHVM are not affected.
+        *
+        * @todo When we drop support for Zend PHP 5, this can be removed.
+        * @return bool|int
+        * @codeCoverageIgnore
+        */
+       protected static function returnSuccess() {
+               return defined( 'HHVM_VERSION' ) || version_compare( PHP_VERSION, '7.0.0', '>=' ) ? true : 0;
+       }
+
+       /**
+        * Workaround for PHP5 bug
+        * @see self::returnSuccess()
+        * @return bool|int
+        * @codeCoverageIgnore
+        */
+       protected static function returnFailure() {
+               return defined( 'HHVM_VERSION' ) || version_compare( PHP_VERSION, '7.0.0', '>=' ) ? false : -1;
+       }
+
        /**
         * Initialize the session (handler)
         * @private For internal use only
         * @param string $save_path Path used to store session files (ignored)
         * @param string $session_name Session name (ignored)
-        * @return bool Success
+        * @return bool|int Success (see self::returnSuccess())
         */
        public function open( $save_path, $session_name ) {
                if ( self::$instance !== $this ) {
@@ -176,20 +203,20 @@ class PHPSessionHandler implements \SessionHandlerInterface {
                if ( !$this->enable ) {
                        throw new \BadMethodCallException( 'Attempt to use PHP session management' );
                }
-               return true;
+               return self::returnSuccess();
        }
 
        /**
         * Close the session (handler)
         * @private For internal use only
-        * @return bool Success
+        * @return bool|int Success (see self::returnSuccess())
         */
        public function close() {
                if ( self::$instance !== $this ) {
                        throw new \UnexpectedValueException( __METHOD__ . ': Wrong instance called!' );
                }
                $this->sessionFieldCache = [];
-               return true;
+               return self::returnSuccess();
        }
 
        /**
@@ -224,7 +251,7 @@ class PHPSessionHandler implements \SessionHandlerInterface {
         * @param string $dataStr Session data. Not that you should ever call this
         *   directly, but note that this has the same issues with code injection
         *   via user-controlled data as does PHP's unserialize function.
-        * @return bool Success
+        * @return bool|int Success (see self::returnSuccess())
         */
        public function write( $id, $dataStr ) {
                if ( self::$instance !== $this ) {
@@ -243,14 +270,14 @@ class PHPSessionHandler implements \SessionHandlerInterface {
                                [
                                        'session' => $id,
                        ] );
-                       return true;
+                       return self::returnSuccess();
                }
 
                // First, decode the string PHP handed us
                $data = \Wikimedia\PhpSessionSerializer::decode( $dataStr );
                if ( $data === null ) {
                        // @codeCoverageIgnoreStart
-                       return false;
+                       return self::returnFailure();
                        // @codeCoverageIgnoreEnd
                }
 
@@ -323,14 +350,14 @@ class PHPSessionHandler implements \SessionHandlerInterface {
 
                $session->persist();
 
-               return true;
+               return self::returnSuccess();
        }
 
        /**
         * Destroy a session
         * @private For internal use only
         * @param string $id Session id
-        * @return bool Success
+        * @return bool|int Success (see self::returnSuccess())
         */
        public function destroy( $id ) {
                if ( self::$instance !== $this ) {
@@ -343,14 +370,15 @@ class PHPSessionHandler implements \SessionHandlerInterface {
                if ( $session ) {
                        $session->clear();
                }
-               return true;
+               return self::returnSuccess();
        }
 
        /**
         * Execute garbage collection.
         * @private For internal use only
         * @param int $maxlifetime Maximum session life time (ignored)
-        * @return bool Success
+        * @return bool|int Success (see self::returnSuccess())
+        * @codeCoverageIgnore See T135576
         */
        public function gc( $maxlifetime ) {
                if ( self::$instance !== $this ) {
@@ -358,6 +386,6 @@ class PHPSessionHandler implements \SessionHandlerInterface {
                }
                $before = date( 'YmdHis', time() );
                $this->store->deleteObjectsExpiringBefore( $before );
-               return true;
+               return self::returnSuccess();
        }
 }
index 31761c3..12f16b6 100644 (file)
@@ -600,7 +600,7 @@ final class Session implements \Countable, \Iterator, \ArrayAccess {
         *
         * Calls to save() or clear() will not be delayed.
         *
-        * @return \ScopedCallback When this goes out of scope, a save will be triggered
+        * @return \Wikimedia\ScopedCallback When this goes out of scope, a save will be triggered
         */
        public function delaySave() {
                return $this->backend->delaySave();
index ea811b6..8633715 100644 (file)
@@ -586,11 +586,11 @@ final class SessionBackend {
         *
         * Calls to save() will not be delayed.
         *
-        * @return \ScopedCallback When this goes out of scope, a save will be triggered
+        * @return \Wikimedia\ScopedCallback When this goes out of scope, a save will be triggered
         */
        public function delaySave() {
                $this->delaySave++;
-               return new \ScopedCallback( function () {
+               return new \Wikimedia\ScopedCallback( function () {
                        if ( --$this->delaySave <= 0 ) {
                                $this->delaySave = 0;
                                $this->save();
@@ -751,7 +751,7 @@ final class SessionBackend {
        private function checkPHPSession() {
                if ( !$this->checkPHPSessionRecursionGuard ) {
                        $this->checkPHPSessionRecursionGuard = true;
-                       $reset = new \ScopedCallback( function () {
+                       $reset = new \Wikimedia\ScopedCallback( function () {
                                $this->checkPHPSessionRecursionGuard = false;
                        } );
 
index 87fdcd3..b8e480f 100644 (file)
@@ -880,7 +880,7 @@ final class SessionManager implements SessionManagerInterface {
                        $session->resetId();
                }
 
-               \ScopedCallback::consume( $delay );
+               \Wikimedia\ScopedCallback::consume( $delay );
                return $session;
        }
 
index c28c456..66c7d47 100644 (file)
@@ -107,14 +107,15 @@ abstract class FormSpecialPage extends SpecialPage {
                        $form->addHeaderText( $headerMsg->parseAsBlock() );
                }
 
-               // Retain query parameters (uselang etc)
-               $params = array_diff_key(
-                       $this->getRequest()->getQueryValues(), [ 'title' => null ] );
-               $form->addHiddenField( 'redirectparams', wfArrayToCgi( $params ) );
-
                $form->addPreText( $this->preText() );
                $form->addPostText( $this->postText() );
                $this->alterForm( $form );
+               if ( $form->getMethod() == 'post' ) {
+                       // Retain query parameters (uselang etc) on POST requests
+                       $params = array_diff_key(
+                               $this->getRequest()->getQueryValues(), [ 'title' => null ] );
+                       $form->addHiddenField( 'redirectparams', wfArrayToCgi( $params ) );
+               }
 
                // Give hooks a chance to alter the form, adding extra fields or text etc
                Hooks::run( 'SpecialPageBeforeFormDisplay', [ $this->getName(), &$form ] );
index c4fb316..39ca8dd 100644 (file)
@@ -103,13 +103,14 @@ class SpecialBlockList extends SpecialPage {
                $context = new DerivativeContext( $this->getContext() );
                $context->setTitle( $this->getPageTitle() ); // Remove subpage
                $form = HTMLForm::factory( 'ooui', $fields, $context );
-               $form->setMethod( 'get' );
-               $form->setWrapperLegendMsg( 'ipblocklist-legend' );
-               $form->setSubmitTextMsg( 'ipblocklist-submit' );
-               $form->setSubmitProgressive();
-               $form->prepareForm();
+               $form
+                       ->setMethod( 'get' )
+                       ->setWrapperLegendMsg( 'ipblocklist-legend' )
+                       ->setSubmitTextMsg( 'ipblocklist-submit' )
+                       ->setSubmitProgressive()
+                       ->prepareForm()
+                       ->displayForm( false );
 
-               $form->displayForm( '' );
                $this->showList( $pager );
        }
 
index 0858b18..3cd4d4d 100644 (file)
@@ -554,7 +554,7 @@ class SpecialContributions extends IncludableSpecialPage {
                                $this->msg( 'namespace' )->text(),
                                'namespace',
                                ''
-                       ) .
+                       ) . '&#160;' .
                        Html::namespaceSelector(
                                [ 'selected' => $this->opts['namespace'], 'all' => '' ],
                                [
index d719e53..be8ad8f 100755 (executable)
@@ -54,6 +54,8 @@ class SpecialNewpages extends IncludableSpecialPage {
                $opts->add( 'feed', '' );
                $opts->add( 'tagfilter', '' );
                $opts->add( 'invert', false );
+               $opts->add( 'size-mode', 'max' );
+               $opts->add( 'size', 0 );
 
                $this->customFilters = [];
                Hooks::run( 'SpecialNewPagesFilters', [ $this, &$this->customFilters ] );
@@ -214,6 +216,9 @@ class SpecialNewpages extends IncludableSpecialPage {
                $tagFilterVal = $this->opts->consumeValue( 'tagfilter' );
                $nsinvert = $this->opts->consumeValue( 'invert' );
 
+               $size = $this->opts->consumeValue( 'size' );
+               $max = $this->opts->consumeValue( 'size-mode' ) === 'max';
+
                // Check username input validity
                $ut = Title::makeTitleSafe( NS_USER, $username );
                $userText = $ut ? $ut->getText() : '';
@@ -254,6 +259,11 @@ class SpecialNewpages extends IncludableSpecialPage {
                                'size' => 30,
                                'cssclass' => 'mw-autocomplete-user', // used by mediawiki.userSuggest
                        ],
+                       'size' => [
+                               'type' => 'sizefilter',
+                               'name' => 'size',
+                               'default' => -$max * $size,
+                       ],
                ];
 
                $htmlForm = new HTMLForm( $form, $this->getContext() );
index 898d170..ea40cb8 100644 (file)
@@ -176,7 +176,7 @@ class SpecialTags extends SpecialPage {
                $newRow .= Xml::tags( 'td', null, Xml::element( 'code', null, $tag ) );
 
                $linkRenderer = $this->getLinkRenderer();
-               $disp = ChangeTags::tagDescription( $tag );
+               $disp = ChangeTags::tagDescription( $tag, $this->getContext() );
                if ( $showEditLinks ) {
                        $disp .= ' ';
                        $editLink = $linkRenderer->makeLink(
index 2d39f99..e298f10 100644 (file)
@@ -48,6 +48,15 @@ class NewPagesPager extends ReverseChronologicalPager {
                $username = $this->opts->getValue( 'username' );
                $user = Title::makeTitleSafe( NS_USER, $username );
 
+               $size = abs( intval( $this->opts->getValue( 'size' ) ) );
+               if ( $size > 0 ) {
+                       if ( $this->opts->getValue( 'size-mode' ) === 'max' ) {
+                               $conds[] = 'page_len <= ' . $size;
+                       } else {
+                               $conds[] = 'page_len >= ' . $size;
+                       }
+               }
+
                $rcIndexes = [];
 
                if ( $namespace !== false ) {
index 91b4133..3422632 100644 (file)
@@ -1440,7 +1440,11 @@ abstract class UploadBase {
                        'http://www.w3.org/tr/rec-rdf-syntax/',
                ];
 
-               if ( !in_array( $namespace, $validNamespaces ) ) {
+               // Inkscape mangles namespace definitions created by Adobe Illustrator.
+               // This is nasty but harmless. (T144827)
+               $isBuggyInkscape = preg_match( '/^&(#38;)*ns_[a-z_]+;$/', $namespace );
+
+               if ( !( $isBuggyInkscape || in_array( $namespace, $validNamespaces ) ) ) {
                        wfDebug( __METHOD__ . ": Non-svg namespace '$namespace' in uploaded file.\n" );
                        /** @todo Return a status object to a closure in XmlTypeCheck, for MW1.21+ */
                        $this->mSVGNSError = $namespace;
index 00fc9be..92a65f0 100644 (file)
@@ -26,6 +26,7 @@ use MediaWiki\Session\Token;
 use MediaWiki\Auth\AuthManager;
 use MediaWiki\Auth\AuthenticationResponse;
 use MediaWiki\Auth\AuthenticationRequest;
+use Wikimedia\ScopedCallback;
 
 /**
  * String Some punctuation to prevent editing from broken text-mangling proxies.
@@ -320,7 +321,7 @@ class User implements IDBAccessObject {
         * @return string
         */
        public function __toString() {
-               return $this->getName();
+               return (string)$this->getName();
        }
 
        /**
index 602587c..ef2c14a 100644 (file)
@@ -77,6 +77,11 @@ class BatchRowIterator implements RecursiveIterator {
         */
        private $key;
 
+       /**
+        * @var array Additional query options
+        */
+       protected $options = [];
+
        /**
         * @param IDatabase $db The database to read from
         * @param string|array $table      The name or names of the table to read from
@@ -104,6 +109,14 @@ class BatchRowIterator implements RecursiveIterator {
                $this->conditions = array_merge( $this->conditions, $conditions );
        }
 
+       /**
+        * @param array $options Query options suitable for use with
+        *  IDatabase::select
+        */
+       public function addOptions( array $options ) {
+               $this->options = array_merge( $this->options, $options );
+       }
+
        /**
         * @param array $conditions Query join conditions suitable for use
         *  with IDatabase::select
@@ -199,7 +212,7 @@ class BatchRowIterator implements RecursiveIterator {
                        [
                                'LIMIT' => $this->batchSize,
                                'ORDER BY' => $this->orderBy,
-                       ],
+                       ] + $this->options,
                        $this->joinConditions
                );
 
index 2756861..3bddd77 100644 (file)
  * @author Chris Steipp
  * @file
  */
+
 use MediaWiki\MediaWikiServices;
 
 class MWCryptHKDF {
 
-       /**
-        * Singleton instance for public use
-        */
-       protected static $singleton = null;
-
-       /**
-        * The persistant cache
-        */
-       protected $cache = null;
-
-       /**
-        * Cache key we'll use for our salt
-        */
-       protected $cacheKey = null;
-
-       /**
-        * The hash algorithm being used
-        */
-       protected $algorithm = null;
-
-       /**
-        * binary string, the salt for the HKDF
-        */
-       protected $salt;
-
-       /**
-        * The pseudorandom key
-        */
-       private $prk;
-
-       /**
-        * The secret key material. This must be kept secret to preserve
-        * the security properties of this RNG.
-        */
-       private $skm;
-
-       /**
-        * The last block (K(i)) of the most recent expanded key
-        */
-       protected $lastK;
-
-       /**
-        * a "context information" string CTXinfo (which may be null)
-        * See http://eprint.iacr.org/2010/264.pdf Section 4.1
-        */
-       protected $context = [];
-
-       /**
-        * Round count is computed based on the hash'es output length,
-        * which neither php nor openssl seem to provide easily.
-        */
-       public static $hashLength = [
-               'md5' => 16,
-               'sha1' => 20,
-               'sha224' => 28,
-               'sha256' => 32,
-               'sha384' => 48,
-               'sha512' => 64,
-               'ripemd128' => 16,
-               'ripemd160' => 20,
-               'ripemd256' => 32,
-               'ripemd320' => 40,
-               'whirlpool' => 64,
-       ];
-
-       /**
-        * @param string $secretKeyMaterial
-        * @param string $algorithm Name of hashing algorithm
-        * @param BagOStuff $cache
-        * @param string|array $context Context to mix into HKDF context
-        * @throws MWException
-        */
-       public function __construct( $secretKeyMaterial, $algorithm, $cache, $context ) {
-               if ( strlen( $secretKeyMaterial ) < 16 ) {
-                       throw new MWException( "MWCryptHKDF secret was too short." );
-               }
-               $this->skm = $secretKeyMaterial;
-               $this->algorithm = $algorithm;
-               $this->cache = $cache;
-               $this->salt = ''; // Initialize a blank salt, see getSaltUsingCache()
-               $this->prk = '';
-               $this->context = is_array( $context ) ? $context : [ $context ];
-
-               // To prevent every call from hitting the same memcache server, pick
-               // from a set of keys to use. mt_rand is only use to pick a random
-               // server, and does not affect the security of the process.
-               $this->cacheKey = wfMemcKey( 'HKDF', mt_rand( 0, 16 ) );
-       }
-
-       /**
-        * Save the last block generated, so the next user will compute a different PRK
-        * from the same SKM. This should keep things unpredictable even if an attacker
-        * is able to influence CTXinfo.
-        */
-       function __destruct() {
-               if ( $this->lastK ) {
-                       $this->cache->set( $this->cacheKey, $this->lastK );
-               }
-       }
-
-       /**
-        * MW specific salt, cached from last run
-        * @return string Binary string
-        */
-       protected function getSaltUsingCache() {
-               if ( $this->salt == '' ) {
-                       $lastSalt = $this->cache->get( $this->cacheKey );
-                       if ( $lastSalt === false ) {
-                               // If we don't have a previous value to use as our salt, we use
-                               // 16 bytes from MWCryptRand, which will use a small amount of
-                               // entropy from our pool. Note, "XTR may be deterministic or keyed
-                               // via an optional “salt value”  (i.e., a non-secret random
-                               // value)..." - http://eprint.iacr.org/2010/264.pdf. However, we
-                               // use a strongly random value since we can.
-                               $lastSalt = MWCryptRand::generate( 16 );
-                       }
-                       // Get a binary string that is hashLen long
-                       $this->salt = hash( $this->algorithm, $lastSalt, true );
-               }
-               return $this->salt;
-       }
-
        /**
         * Return a singleton instance, based on the global configs.
-        * @return self
-        * @throws MWException
+        * @return CryptHKDF
         */
        protected static function singleton() {
-               global $wgHKDFAlgorithm, $wgHKDFSecret, $wgSecretKey;
-
-               $secret = $wgHKDFSecret ?: $wgSecretKey;
-               if ( !$secret ) {
-                       throw new MWException( "Cannot use MWCryptHKDF without a secret." );
-               }
-
-               // In HKDF, the context can be known to the attacker, but this will
-               // keep simultaneous runs from producing the same output.
-               $context = [];
-               $context[] = microtime();
-               $context[] = getmypid();
-               $context[] = gethostname();
-
-               // Setup salt cache
-               $cache = MediaWikiServices::getInstance()->getLocalServerObjectCache();
-               if ( $cache instanceof EmptyBagOStuff ) {
-                       // Use APC, or fallback to the main cache if it isn't setup
-                       $cache = ObjectCache::getLocalClusterInstance();
-               }
-
-               if ( is_null( self::$singleton ) ) {
-                       self::$singleton = new self( $secret, $wgHKDFAlgorithm, $cache, $context );
-               }
-
-               return self::$singleton;
-       }
-
-       /**
-        * Produce $bytes of secure random data. As a side-effect,
-        * $this->lastK is set to the last hashLen block of key material.
-        * @param int $bytes Number of bytes of data
-        * @param string $context Context to mix into CTXinfo
-        * @return string Binary string of length $bytes
-        */
-       protected function realGenerate( $bytes, $context = '' ) {
-
-               if ( $this->prk === '' ) {
-                       $salt = $this->getSaltUsingCache();
-                       $this->prk = self::HKDFExtract(
-                               $this->algorithm,
-                               $salt,
-                               $this->skm
-                       );
-               }
-
-               $CTXinfo = implode( ':', array_merge( $this->context, [ $context ] ) );
-
-               return self::HKDFExpand(
-                       $this->algorithm,
-                       $this->prk,
-                       $CTXinfo,
-                       $bytes,
-                       $this->lastK
-               );
+               return MediaWikiServices::getInstance()->getCryptHKDF();
        }
 
        /**
@@ -248,62 +72,7 @@ class MWCryptHKDF {
         * @return string Cryptographically secure pseudorandom binary string
         */
        public static function HKDF( $hash, $ikm, $salt, $info, $L ) {
-               $prk = self::HKDFExtract( $hash, $salt, $ikm );
-               $okm = self::HKDFExpand( $hash, $prk, $info, $L );
-               return $okm;
-       }
-
-       /**
-        * Extract the PRK, PRK = HMAC(XTS, SKM)
-        * Note that the hmac is keyed with XTS (the salt),
-        * and the SKM (source key material) is the "data".
-        *
-        * @param string $hash The hashing function to use (e.g., sha256)
-        * @param string $salt The salt to add to the ikm, to get the prk
-        * @param string $ikm The input keying material
-        * @return string Binary string (pseudorandm key) used as input to HKDFExpand
-        */
-       private static function HKDFExtract( $hash, $salt, $ikm ) {
-               return hash_hmac( $hash, $ikm, $salt, true );
-       }
-
-       /**
-        * Expand the key with the given context
-        *
-        * @param string $hash Hashing Algorithm
-        * @param string $prk A pseudorandom key of at least HashLen octets
-        *    (usually, the output from the extract step)
-        * @param string $info Optional context and application specific information
-        *    (can be a zero-length string)
-        * @param int $bytes Length of output keying material in bytes
-        *    (<= 255*HashLen)
-        * @param string &$lastK Set by this function to the last block of the expansion.
-        *    In MediaWiki, this is used to seed future Extractions.
-        * @return string Cryptographically secure random string $bytes long
-        * @throws MWException
-        */
-       private static function HKDFExpand( $hash, $prk, $info, $bytes, &$lastK = '' ) {
-               $hashLen = MWCryptHKDF::$hashLength[$hash];
-               $rounds = ceil( $bytes / $hashLen );
-               $output = '';
-
-               if ( $bytes > 255 * $hashLen ) {
-                       throw new MWException( "Too many bytes requested from HDKFExpand" );
-               }
-
-               // K(1) = HMAC(PRK, CTXinfo || 1);
-               // K(i) = HMAC(PRK, K(i-1) || CTXinfo || i); 1 < i <= t;
-               for ( $counter = 1; $counter <= $rounds; ++$counter ) {
-                       $lastK = hash_hmac(
-                               $hash,
-                               $lastK . $info . chr( $counter ),
-                               $prk,
-                               true
-                       );
-                       $output .= $lastK;
-               }
-
-               return substr( $output, 0, $bytes );
+               return CryptHKDF::HKDF( $hash, $ikm, $salt, $info, $L );
        }
 
        /**
@@ -314,7 +83,7 @@ class MWCryptHKDF {
         * @return string Binary string of length $bytes
         */
        public static function generate( $bytes, $context ) {
-               return self::singleton()->realGenerate( $bytes, $context );
+               return self::singleton()->generate( $bytes, $context );
        }
 
        /**
@@ -327,7 +96,7 @@ class MWCryptHKDF {
         */
        public static function generateHex( $chars, $context = '' ) {
                $bytes = ceil( $chars / 2 );
-               $hex = bin2hex( self::singleton()->realGenerate( $bytes, $context ) );
+               $hex = bin2hex( self::singleton()->generate( $bytes, $context ) );
                return substr( $hex, 0, $chars );
        }
 
index 7ef2eff..2e4ef89 100644 (file)
@@ -137,6 +137,12 @@ class Language {
         */
        static private $fallbackLanguageCache = [];
 
+       /**
+        * Cache for grammar rules data
+        * @var MapCacheLRU|null
+        */
+       static private $grammarTransformations;
+
        /**
         * Cache for language names
         * @var HashBagOStuff|null
@@ -332,7 +338,7 @@ class Language {
                        // People think language codes are html safe, so enforce it.
                        // Ideally we should only allow a-zA-Z0-9-
                        // but, .+ and other chars are often used for {{int:}} hacks
-                       // see bugs 37564, 37587, 36938
+                       // see bugs T39564, T39587, T38938
                        $cache[$code] =
                                // Protect against path traversal
                                strcspn( $code, ":/\\\000&<>'\"" ) === strlen( $code )
@@ -3730,6 +3736,7 @@ class Language {
 
                return $word;
        }
+
        /**
         * Get the grammar forms for the content language
         * @return array Array of grammar forms
@@ -3745,6 +3752,46 @@ class Language {
 
                return [];
        }
+
+       /**
+        * Get the grammar transformations data for the language.
+        * Used like grammar forms, with {{GRAMMAR}} and cases,
+        * but uses pairs of regexes and replacements instead of code.
+        *
+        * @return array[] Array of grammar transformations.
+        * @throws MWException
+        * @since 1.28
+        */
+       public function getGrammarTransformations() {
+               $languageCode = $this->getCode();
+
+               if ( self::$grammarTransformations === null ) {
+                       self::$grammarTransformations = new MapCacheLRU( 10 );
+               }
+
+               if ( self::$grammarTransformations->has( $languageCode ) ) {
+                       return self::$grammarTransformations->get( $languageCode );
+               }
+
+               $data = [];
+
+               $grammarDataFile = __DIR__ . "/data/grammarTransformations/$languageCode.json";
+               if ( is_readable( $grammarDataFile ) ) {
+                       $data = FormatJson::decode(
+                               file_get_contents( $grammarDataFile ),
+                               true
+                       );
+
+                       if ( $data === null ) {
+                               throw new MWException( "Invalid grammar data for \"$languageCode\"." );
+                       }
+
+                       self::$grammarTransformations->set( $languageCode, $data );
+               }
+
+               return $data;
+       }
+
        /**
         * Provides an alternative text depending on specified gender.
         * Usage {{gender:username|masculine|feminine|unknown}}.
index 1c003ad..5a9f652 100644 (file)
@@ -48,7 +48,9 @@ class LanguageConverter {
        ];
 
        public $mMainLanguageCode;
-       public $mVariants, $mVariantFallbacks, $mVariantNames;
+       public $mVariants;
+       public $mVariantFallbacks;
+       public $mVariantNames;
        public $mTablesLoaded = false;
        public $mTables;
        // 'bidirectional' 'unidirectional' 'disable' for each variant
index c2560a4..62de390 100644 (file)
@@ -31,7 +31,6 @@
  * @ingroup Language
  */
 class LanguageRu extends Language {
-
        /**
         * Convert from the nominative form of a noun to some other case
         * Invoked with {{grammar:case|word}}
@@ -46,19 +45,22 @@ class LanguageRu extends Language {
                        return $wgGrammarForms['ru'][$case][$word];
                }
 
-               $grammarDataFile = __DIR__ . '/data/grammar.ru.json';
-               $grammarData = FormatJson::decode( file_get_contents( $grammarDataFile ), true );
+               $grammarTransformations = $this->getGrammarTransformations();
+
+               if ( isset( $grammarTransformations[$case] ) ) {
+                       foreach ( array_values( $grammarTransformations[$case] ) as $rule ) {
+                               $form = $rule[0];
 
-               if ( array_key_exists( $case, $grammarData ) ) {
-                       foreach ( array_keys( $grammarData[$case] ) as $form ) {
                                if ( $form === '@metadata' ) {
                                        continue;
                                }
 
+                               $replacement = $rule[1];
+
                                $regex = "/$form/";
 
                                if ( preg_match( $regex, $word ) ) {
-                                       $word = preg_replace( $regex, $grammarData[$case][$form], $word );
+                                       $word = preg_replace( $regex, $replacement, $word );
 
                                        break;
                                }
diff --git a/languages/classes/data/grammar.ru.json b/languages/classes/data/grammar.ru.json
deleted file mode 100644 (file)
index 446163b..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-{
-       "@metadata": {
-               "authors": [
-                       "Alexander Sigachov (alexander.sigachov at Googgle Mail)",
-                       "Amir E. Aharoni (amir.aharoni@mail.huji.ac.il)"
-               ],
-               "comment": "These rules don't cover the whole grammar of the language, and are intended only for names of languages and Wikimedia projects."
-       },
-       "genitive": {
-               "(.+)ь$": "$1я",
-               "(.+)ия$": "$1ии",
-               "(.+)ка$": "$1ки",
-               "(.+)ти$": "$1тей",
-               "(.+)ды$": "$1дов",
-               "(.+)д$": "$1да",
-               "(.+)ник$": "$1ника",
-               "(.+)ные$": "$1ных"
-       },
-       "prepositional": {
-               "(.+)ь$": "$1е",
-               "(.+)ия$": "$1ии",
-               "(.+)ка$": "$1ке",
-               "(.+)ти$": "$1тях",
-               "(.+)ды$": "$1дах",
-               "(.+)д$": "$1де",
-               "(.+)ник$": "$1нике",
-               "(.+)ные$": "$1ных"
-       },
-       "languagegen": {
-               "@metadata": "язык в родительном падеже: '(с) русского'",
-               "(.+)кий$": "$1кого",
-               "иврит$": "иврита",
-               "идиш$": "идиша",
-               "(.+)$": "$1"
-       },
-       "languageprep": {
-               "@metadata": "язык в предложном падеже: '(на) русском'",
-               "(.+)кий$": "$1ком",
-               "иврит$": "иврите",
-               "идиш$": "идише",
-               "(.+)$": "$1"
-       },
-       "languageadverb": {
-               "@metadata": "наречие с названием языка: 'по-русски'",
-               "(.+)кий$": "по-$1ки",
-               "иврит$": "на иврите",
-               "идиш$": "на идише",
-               "(идо|урду|хинди|эсперанто)$": "на $1",
-               "(.+)$": "на языке $1"
-       }
-}
diff --git a/languages/data/grammarTransformations/ru.json b/languages/data/grammarTransformations/ru.json
new file mode 100644 (file)
index 0000000..deb58b7
--- /dev/null
@@ -0,0 +1,57 @@
+{
+       "@metadata": {
+               "authors": [
+                       "Alexander Sigachov (alexander.sigachov at Googgle Mail)",
+                       "Amir E. Aharoni (amir.aharoni@mail.huji.ac.il)"
+               ],
+               "comment": "These rules don't cover the whole grammar of the language, and are intended only for names of languages and Wikimedia projects."
+       },
+       "genitive": [
+               [ "(.+)ь$", "$1я" ],
+               [ "(.+)ия$", "$1ии" ],
+               [ "(.+)ка$", "$1ки" ],
+               [ "(.+)ти$", "$1тей" ],
+               [ "(.+)ды$", "$1дов" ],
+               [ "(.+)д$", "$1да" ],
+               [ "(.+)ник$", "$1ника" ],
+               [ "(.+)ные$", "$1ных" ]
+       ],
+       "prepositional": [
+               [ "(.+)ь$", "$1е" ],
+               [ "(.+)ия$", "$1ии" ],
+               [ "(.+)ка$", "$1ке" ],
+               [ "(.+)ти$", "$1тях" ],
+               [ "(.+)ды$", "$1дах" ],
+               [ "(.+)д$", "$1де" ],
+               [ "(.+)ник$", "$1нике" ],
+               [ "(.+)ные$", "$1ных" ]
+       ],
+       "languagegen": [
+               [ "@metadata", [
+                       "comment", "язык в родительном падеже: '(с) русского'"
+               ] ],
+               [ "(.+)кий$", "$1кого" ],
+               [ "иврит$", "иврита" ],
+               [ "идиш$", "идиша" ],
+               [ "(.+)$", "$1" ]
+       ],
+       "languageprep": [
+               [ "@metadata", [
+                       "comment", "язык в предложном падеже: '(на) русском'"
+               ] ],
+               [ "(.+)кий$", "$1ком" ],
+               [ "иврит$", "иврите" ],
+               [ "идиш$", "идише" ],
+               [ "(.+)$", "$1" ]
+       ],
+       "languageadverb": [
+               [ "@metadata", [
+                       "comment", "наречие с названием языка: 'по-русски'"
+               ] ],
+               [ "(.+)кий$", "по-$1ки" ],
+               [ "иврит$", "на иврите" ],
+               [ "идиш$", "на идише" ],
+               [ "(идо|урду|хинди|эсперанто)$", "на $1" ],
+               [ "(.+)$", "на языке $1" ]
+       ]
+}
index 5b16b7e..8c87e55 100644 (file)
        "mergehistory-from": "الصفحة المصدر:",
        "mergehistory-into": "الصفحة الهدف:",
        "mergehistory-list": "تاريخ التعديل القابل للدمج",
-       "mergehistory-merge": "المراجعات التالية من [[:$1]] يمكن دمجها إلى [[:$2]].\nاستخدم عامود الصناديق لدمج المراجعات التي تم إنشاؤها في وقبل الوقت المحدد.\nلاحظ أن استخدام وصلات التصفح سيعيد ضبط هذا العامود.",
+       "mergehistory-merge": "المراجعات التالية من [[:$1]] يمكن دمجها إلى [[:$2]].\nاستخدم عمود الصناديق لدمج المراجعات التي تم إنشاؤها في وقبل الوقت المحدد.\nلاحظ أن استخدام وصلات التصفح سيعيد ضبط هذا العمود.",
        "mergehistory-go": "عرض التعديلات القابلة للدمج",
        "mergehistory-submit": "دمج المراجعات",
        "mergehistory-empty": "لا مراجعات يمكن دمجها.",
        "mailnologin": "لا يوجد عنوان للإرسال",
        "mailnologintext": "يجب أن تقوم [[Special:UserLogin|بتسجيل الدخول]] وإدخال بريد إلكتروني صالح في صفحة [[Special:Preferences|التفضيلات]] لتتمكن من إرسال الرسائل لمستخدمين آخرين.",
        "emailuser": "مراسلة المستخدم",
-       "emailuser-title-target": "راسل بالبريد الإلكتروني هذا  {{GENDER:$1| المستخدم}}",
+       "emailuser-title-target": "راسل هذا  {{GENDER:$1| المستخدم}} بالبريد الإلكتروني",
        "emailuser-title-notarget": "مراسلة المستخدم",
        "emailpagetext": "يمكنك استخدام الاستمارة بالأسفل لإرسال رسالة بريد إلكتروني إلى {{GENDER:$1|هذا المستخدم|هذه المستخدمة}}.\n'''يمكن أن يرى المرسل إليه عنوان بريدك الإلكتروني''' الذي أدخلته في [[Special:Preferences|تفضيلاتك]] كعنوان المرسل في البريد الإلكتروني، كي يستطيع المتلقي الرد عليك مباشرة.",
        "defemailsubject": "رسالة {{SITENAME}} من المستخدم \"$1\"",
        "sp-contributions-blocked-notice-anon": "عنوان الأيبي هذا ممنوع حاليا.\nآخر مدخلة لسجل المنع معروضة هنا كمرجع:",
        "sp-contributions-search": "بحث عن مساهمات",
        "sp-contributions-username": "عنوان أيبي أو اسم مستخدم:",
-       "sp-contributions-toponly": "أظÙ\87ر Ø£Ø¹Ù\84Ù\89 Ø§Ù\84Ù\85راجعات فقط",
+       "sp-contributions-toponly": "أظÙ\87ر Ø§Ù\84Ù\86سخ Ø§Ù\84حاÙ\84Ù\8aØ© فقط",
        "sp-contributions-newonly": "أظهر إنشاء الصفحات فقط",
        "sp-contributions-hideminor": "أخف التعديلات الطفيفة",
        "sp-contributions-submit": "بحث",
        "movelogpagetext": "بالأسفل قائمة بالصفحات التي تم نقلها.",
        "movesubpage": "{{PLURAL:$1||الصفحة الفرعية|الصفحتان الفرعيتان|الصفحات الفرعية}}",
        "movesubpagetext": "لهذه الصفحة {{PLURAL:$1||صفحة فرعية واحدة معروضة|صفحتان فرعيتان معروضتان|$1 صفحات فرعية معروضة|$1 صفحة فرعية معروضة}} بالأسفل.",
+       "movesubpagetalktext": "صفحة النقاش المكافئة لديها $1 {{PLURAL:$1|صفحة فرعية|صفحات فرعية}} معروضة بالأسفل.",
        "movenosubpage": "ليس لهذه الصفحة صفحات فرعية.",
        "movereason": "السبب:",
        "revertmove": "استرجع",
        "pageinfo-category-pages": "عدد الصفحات",
        "pageinfo-category-subcats": "عدد التصنيفات الفرعية",
        "pageinfo-category-files": "عدد الملفات",
+       "pageinfo-user-id": "مُعرِّف المستخدم",
        "markaspatrolleddiff": "علم بعلامة المراجعة",
        "markaspatrolledtext": "علم هذه الصفحة بعلامة المراجعة",
        "markaspatrolledtext-file": "علم نسخة الملف هذه بعلامة المراجعة",
        "newimages-showbots": "أظهر التحميلات بواسطة البوتات",
        "newimages-hidepatrolled": "أخف المرفوعات المنظورة",
        "noimages": "لا شيء للعرض.",
+       "gallery-slideshow-toggle": "تغيير الصور المصغرة",
        "ilsubmit": "بحث",
        "bydate": "حسب التاريخ",
        "sp-newimages-showfrom": "أظهر الملفات الجديدة بدءا من $2، $1",
        "feedback-thanks": "شكرا! أُرسلت ملاحظاتك لصفحة \"[$2 $1]\".",
        "feedback-thanks-title": "شكرا لك!",
        "feedback-useragent": "وكيل المستخدم:",
-       "searchsuggest-search": "بحث",
+       "searchsuggest-search": "ابحث Ù\81Ù\8a {{SITENAME}}",
        "searchsuggest-containing": "يحتوي...",
        "api-error-autoblocked": "عنوان الأيبي الخاص بك تم منعه تلقائيا، لأنه تم استخدامه بواسطة مستخدم ممنوع",
        "api-error-badaccess-groups": "لا يسمح لك بتحميل الملفات إلى هذه الويكي.",
        "usercssispublic": "من فضل لاحظ: صفحات الCSS الفرعية لا ينبغي أن تحتوي على بيانات سرية بما أنها يمكن رؤيتها بواسطة المستخدمين الآخرين.",
        "restrictionsfield-badip": "عنوان أيبي أو نطاق غير صحيح: $1",
        "restrictionsfield-label": "نطاقات الأيبي المسموح بها:",
-       "restrictionsfield-help": "عنوان أيبي أو نطاق CIDR واحد لكل سطر. لتفعيل كل شيء، استخدم<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "عنوان أيبي أو نطاق CIDR واحد لكل سطر. لتفعيل كل شيء، استخدم<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "خطأ: $1",
+       "edit-error-long": "الأخطاء:\n\n$1"
 }
index 6ccf4bf..8a8a45a 100644 (file)
@@ -19,7 +19,8 @@
                        "Macofe",
                        "IKHazarika",
                        "Dibya Dutta",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "চাণক্য কুমাৰ দাস"
                ]
        },
        "tog-underline": "সংযোগসমূহ অধোৰেখিত কৰক:",
        "suppress": "অমনোযোগ",
        "querypage-disabled": "কাৰ্য্যগত কাৰণত এই বিশেষ পৃষ্ঠাটো নিষ্ক্ৰিয় কৰা হৈছে।",
        "apisandbox-results": "ফলাফল",
+       "apisandbox-continue": "অব্যাহত ৰাখক",
        "booksources": "গ্ৰন্থৰ উৎস সমূহ",
        "booksources-search-legend": "গ্ৰন্থ উৎস সন্ধান",
        "booksources-search": "সন্ধান",
index 6e8cdb6..78e4779 100644 (file)
        "movelogpagetext": "Esta ye la llista de páxines treslladaes.",
        "movesubpage": "{{PLURAL:$1|Subpáxina|Subpáxines}}",
        "movesubpagetext": "Esta páxina tien $1 {{PLURAL:$1|subpáxina|subpáxines}} que s'amuesen darréu.",
+       "movesubpagetalktext": "La páxina d'alderique correspondiente tien $1 {{PLURAL:$1|subpáxina|subpáxines}} que {{PLURAL:$1|s'amuesa|s'amuesen}} darréu.",
        "movenosubpage": "Esta páxina nun tien subpáxines.",
        "movereason": "Motivu:",
        "revertmove": "revertir",
        "pageinfo-category-pages": "Númberu de páxines",
        "pageinfo-category-subcats": "Númberu de subcategoríes",
        "pageinfo-category-files": "Númberu de ficheros",
+       "pageinfo-user-id": "ID d'usuariu",
        "markaspatrolleddiff": "Marcar como supervisada",
        "markaspatrolledtext": "Marcar esta páxina como supervisada",
        "markaspatrolledtext-file": "Marcar esta versión del ficheru como patrullada",
        "newimages-showbots": "Ver les xubíes de los bots",
        "newimages-hidepatrolled": "Despintar les entraes patrullaes",
        "noimages": "Nun hai nada que ver.",
+       "gallery-slideshow-toggle": "Intercambiar les miniatures",
        "ilsubmit": "Guetar",
        "bydate": "por fecha",
        "sp-newimages-showfrom": "Amosar los archivos nuevos emprimando dende'l $1 a les $2",
        "feedback-thanks": "¡Gracies! La to opinión s'espublizó na páxina «[$2  $1]».",
        "feedback-thanks-title": "¡Gracies!",
        "feedback-useragent": "Axente d'usuariu:",
-       "searchsuggest-search": "Buscar",
+       "searchsuggest-search": "Buscar en {{SITENAME}}",
        "searchsuggest-containing": "que contien...",
        "api-error-autoblocked": "La to dirección IP bloquióse automáticamente porque la usó un usuariu bloquiáu.",
        "api-error-badaccess-groups": "Nun tienes permisu pa xubir ficheros a esta wiki.",
        "usercssispublic": "Atención: les subpáxines CSS nun tendríen de contener datos acutaos porque son visibles pa otros usuarios.",
        "restrictionsfield-badip": "Direición o rangu IP inválidu: $1",
        "restrictionsfield-label": "Rangos d'IP permitíos:",
-       "restrictionsfield-help": "Una única direición IP o rangu CIDR per llinia. P'activar toos, utiliza<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Una única direición IP o rangu CIDR per llinia. P'activar toos, utiliza<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Error: $1",
+       "edit-error-long": "Errores:\n\n$1"
 }
index 733cb95..b7466f7 100644 (file)
@@ -26,7 +26,8 @@
                        "Lizalizaufa",
                        "Кутлубаева Кунсулу Закиевна",
                        "Вильданова Гюзель",
-                       "Ilmira"
+                       "Ilmira",
+                       "Irus"
                ]
        },
        "tog-underline": "Һылтанмалар аҫтына һыҙыу:",
        "changecredentials-submit": "Иҫәп мәғлүмәттәрен үҙгәртеү",
        "removecredentials": "Иҫәп мәғлүмәттәрен юйырға",
        "removecredentials-submit": "Иҫәп мәғлүмәттәрен юйырға",
-       "credentialsform-account": "Иҫәп яҙмаһы исеме:"
+       "credentialsform-account": "Иҫәп яҙмаһы исеме:",
+       "edit-error-short": "Хата: $1"
 }
index a5eecb0..57d9305 100644 (file)
@@ -37,7 +37,8 @@
                        "Ricordo.tenerissimo",
                        "Plamen",
                        "Iliev",
-                       "Spas.Z.Spasov"
+                       "Spas.Z.Spasov",
+                       "АдмиралАнимЕ"
                ]
        },
        "tog-underline": "Подчертаване на препратките:",
@@ -89,8 +90,8 @@
        "editfont-style": "Стил на шрифта в кутията за редактиране:",
        "editfont-default": "По подразбиране за браузъра",
        "editfont-monospace": "Равноширок шрифт",
-       "editfont-sansserif": "Ð\91езÑ\81еÑ\80иÑ\84ен Ñ\88Ñ\80иÑ\84Ñ\82",
-       "editfont-serif": "СеÑ\80иÑ\84ен Ñ\88Ñ\80иÑ\84Ñ\82",
+       "editfont-sansserif": "ШÑ\80иÑ\84Ñ\82 Ð±ÐµÐ· Ð¸Ð·Ð²Ð¸Ð²ÐºÐ¸",
+       "editfont-serif": "ШÑ\80иÑ\84Ñ\82 Ñ\81 Ð¸Ð·Ð²Ð¸Ð²ÐºÐ¸",
        "sunday": "неделя",
        "monday": "понеделник",
        "tuesday": "вторник",
        "october-date": "$1 октомври",
        "november-date": "$1 ноември",
        "december-date": "$1 декември",
+       "period-am": "Преди обед",
+       "period-pm": "След обед",
        "pagecategories": "{{PLURAL:$1|Категория|Категории}}",
        "category_header": "Страници в категория „$1“",
        "subcategories": "Подкатегории",
        "qbpageoptions": "Тази страница",
        "qbmyoptions": "Моите страници",
        "faq": "ЧЗВ",
-       "faqpage": "Project:ЧЗВ",
+       "faqpage": "Проект:ЧЗВ",
        "actions": "Действия",
        "namespaces": "Именни пространства",
        "variants": "Варианти",
        "talk": "Беседа",
        "views": "Прегледи",
        "toolbox": "Инструменти",
+       "tool-link-emailuser": "Писмо до {{GENDER:$1|потребителя}}",
        "userpage": "Потребителска страница",
        "projectpage": "Проектна страница",
        "imagepage": "Преглед на файла",
        "createacct-reason-ph": "Защо създавате друга сметка",
        "createacct-submit": "Създаване на сметката",
        "createacct-another-submit": "Създаване на сметка",
-       "createacct-continue-submit": "Продължаване създаването на акаунт",
-       "createacct-another-continue-submit": "Продължаване създаването на акаунт",
+       "createacct-continue-submit": "Продължаване създаването на сметка",
+       "createacct-another-continue-submit": "Продължаване създаването на сметка",
        "createacct-benefit-heading": "{{SITENAME}} се създава от хора като вас.",
        "createacct-benefit-body1": "{{PLURAL:$1|редакция|редакции}}",
        "createacct-benefit-body2": "{{PLURAL:$1|страница|страници}}",
        "passwordremindertitle": "Напомняне за парола от {{SITENAME}}",
        "passwordremindertext": "Някой (най-вероятно вие, от IP-адрес $1) е пожелал нова парола за влизане в {{SITENAME}} ($4).\nЗа потребител „$2“ е създадена временната парола „$3“.\nСега би трябвало да влезете в системата и да си изберете нова парола.\nНовата временна парола ще бъде активна {{PLURAL:$5|един ден|$5 дни}}.\n\nАко заявката е направена от друг или пък сте си спомнили паролата и не искате да я променяте, можете да пренебрегнете това съобщение и да продължите да използвате старата си парола.",
        "noemail": "Няма записана електронна поща за потребителя „$1“.",
-       "noemailcreate": "Необходимо е да въведете валиден адрес за е-поща",
+       "noemailcreate": "Необходимо е да въведете валиден адрес за ел. поща",
        "passwordsent": "Нова парола беше изпратена на електронната поща на „$1“.\nСлед като я получите, влезте отново.",
        "blocked-mailpassword": "Редактирането от Вашия IP-адрес е забранено, затова не Ви се позволява да използвате възможността за възстановяване на парола.",
        "eauthentsent": "Писмото за потвърждение е изпратено на посочения адрес. В него са описани действията, които трябва да се извършат, за да потвърдите, че този адрес за електронна поща действително е ваш.",
        "passwordreset-emailsentusername": "Ако това потребителско име е свързано с електронна поща, е изпратено писмо за възстановяване на паролата.",
        "passwordreset-invalideamil": "Неправилен email адрес",
        "changeemail": "Промяна или премахване на адреса за е-поща",
-       "changeemail-header": "Промяна на адреса за е-поща на сметката",
+       "changeemail-header": "Попълнете формуляра, за да промените адреса на електронната си поща. Ако искате да премахнете адреса на електронната си поща, при попълване на формуляра оставете полето за новия адрес празно.",
        "changeemail-no-info": "За да достъпвате тази страница директно, необходимо е да влезете в системата.",
        "changeemail-oldemail": "Текущ адрес за е-поща:",
        "changeemail-newemail": "Нов адрес за е-поща:",
        "resettokens-resetbutton": "Изчистване на избраните маркери",
        "bold_sample": "Получер текст",
        "bold_tip": "Получер (удебелен) текст",
-       "italic_sample": "Ð\9aÑ\83Ñ\80Ñ\81ивен текст",
-       "italic_tip": "Ð\9aÑ\83Ñ\80Ñ\81ивен (наклонен) текст",
+       "italic_sample": "Ð\9dаклонен текст",
+       "italic_tip": "Ð\9dаклонен текст",
        "link_sample": "Име на препратка",
        "link_tip": "Вътрешна препратка",
        "extlink_sample": "http://www.example.com Текст на външната препратка",
        "previewnote": "<strong>Обърнете внимание, че това е само предварителен преглед.</strong>\nПромените все още не са съхранени!",
        "continue-editing": "Продължаване към полето за редактиране",
        "previewconflict": "Този предварителен преглед отразява текста в горната текстова кутия така, както би се показал, ако съхраните.",
-       "session_fail_preview": "'''За съжаление редакцията ви не успя да бъде обработена поради загуба на данните за текущата сесия. Опитайте отново. Ако все още не работи, опитайте да [[Special:UserLogout|излезете]] и да влезете отново.'''",
+       "session_fail_preview": "За съжаление редакцията ви не успя да бъде обработена поради загуба на данните за текущата сесия.\n\nМоже би сте излезли от системата. <strong>Моля, уверете се, че сте влезли в профила си и опитайте отново. \nАко все още не работи, опитайте да [[Special:UserLogout|излезете]] и да влезете отново, също така проверете дали браузърът ви позволява бисквитки от този сайт.",
        "session_fail_preview_html": "'''За съжаление редакцията ви не беше записана поради изтичането на сесията ви.'''\n\n''Тъй като {{SITENAME}} приема обикновен HTML, предварителният преглед е скрит като предпазна мярка срещу атаки чрез Джаваскрипт.''\n\n'''Опитайте отново. Ако все още не сработва, пробвайте да [[Special:UserLogout|излезете]] и влезете отново.'''",
        "token_suffix_mismatch": "'''Редакцията ви беше отхвърлена, защото браузърът ви е развалил пунктуационните знаци в редакционната отметка. Евентуалното съхранение би унищожило съдържанието на страницата. Понякога това се случва при използването на грешно работещи анонимни междинни сървъри.'''",
        "edit_form_incomplete": "'''Някои части от формуляра за редактиране не достигнаха до сървъра; проверете дали редакциите ви са непокътнати и опитайте отново.'''",
        "sourcefilename": "Първоначално име:",
        "sourceurl": "Изходен адрес:",
        "destfilename": "Целево име:",
-       "upload-maxfilesize": "Ð\9cакÑ\81имален допустим размер на файла: $1",
+       "upload-maxfilesize": "Ð\9cакÑ\81имално допустим размер на файла: $1",
        "upload-description": "Описание на файла",
        "upload-options": "Настройки за качване",
        "watchthisupload": "Наблюдаване на файла",
        "mailnologin": "Няма електронна поща",
        "mailnologintext": "Необходимо е да [[Special:UserLogin|влезете]] и да посочите валидна електронна поща в [[Special:Preferences|настройките]] си, за да може да пращате писма на други потребители.",
        "emailuser": "Писмо до потребителя",
-       "emailuser-title-target": "Ð\98зпÑ\80аÑ\89ане Ð½Ð° Ðµ-пиÑ\81мо Ð½Ð° Ñ\82ози {{GENDER:$1|поÑ\82Ñ\80ебиÑ\82ел}}",
+       "emailuser-title-target": "Ð\9fиÑ\81мо Ð´Ð¾ {{GENDER:$1|поÑ\82Ñ\80ебиÑ\82елÑ\8f}}",
        "emailuser-title-notarget": "Изпращане на е-писмо на потребител",
        "emailpagetext": "Можете да използвате формуляра по-долу, за да изпратите електронно писмо на {{GENDER:$1|този потребител}}.\nАдресът, който се въвели в [[Special:Preferences|настройките си]], ще се появи в полето „От“ на писмото, така че получателят ще е в състояние да ви отговори директно.",
        "defemailsubject": "Писмо от потребител $1 в {{SITENAME}}",
        "watchlist-details": "{{PLURAL:$1|Една наблюдавана страница|$1 наблюдавани страници}} от списъка ви за наблюдение (без беседи).",
        "wlheader-enotif": "Известяването по е-поща е включено.",
        "wlheader-showupdated": "Страниците, които са били променени след последния път, когато сте ги посетили, са показани в '''получер'''.",
-       "wlnote": "{{PLURAL:$1|Показана е последната промяна|Показани са последните '''$1''' промени}} през {{PLURAL:$2|последния час|последните '''$2''' часа}}.",
+       "wlnote": "{{PLURAL:$1|Показана е последната промяна|Показани са последните '''$1''' промени}} през {{PLURAL:$2|последния час|последните '''$2''' часа}}, започвайки от от $3, $4.",
        "wlshowlast": "Показване на последните $1 часа $2 дни",
        "watchlist-hide": "Скриване",
        "watchlist-submit": "Показване",
        "wlshowhideanons": "анонимни потребители",
        "wlshowhidepatr": "патрулирани редакции",
        "wlshowhidemine": "моите редакции",
+       "wlshowhidecategorization": "категоризиране на страници",
        "watchlist-options": "Опции на списъка за наблюдение",
        "watching": "Наблюдение…",
        "unwatching": "Спиране на наблюдение…",
        "enotif_subject_changed": "Страницата „$1“ в {{SITENAME}} беше {{GENDER:$2|променена}} от $2",
        "enotif_body_intro_deleted": "Страницата „$1“ в {{SITENAME}} беше {{GENDER:$2|изтрита}} на $PAGEEDITDATE от $2. Вижте $3.",
        "enotif_body_intro_created": "Страницата „$1“ в {{SITENAME}} беше {{GENDER:$2|създадена}} на $PAGEEDITDATE от $2. За текущата версия, вижте $3",
+       "enotif_body_intro_moved": "Страницата „$1“ в {{SITENAME}} бе {{GENDER:$2|преместена}} на $PAGEEDITDATE от $2. За текущата версия, вижте $3.",
+       "enotif_body_intro_restored": "Страницата „$1“ в {{SITENAME}} бе {{GENDER:$2|възстановена}} на $PAGEEDITDATE от $2. За текущата версия, вижте $3.",
+       "enotif_body_intro_changed": "Страницата „$1“ в {{SITENAME}} бе {{GENDER:$2|променена}} на $PAGEEDITDATE от $2. За текущата версия, вижте $3.",
        "enotif_lastvisited": "Преглед на всички промени след последното ви посещение: $1.",
        "enotif_lastdiff": "Преглед на тази промяна: $1.",
        "enotif_anon_editor": "анонимен потребител $1",
        "alreadyrolled": "Редакцията на [[:$1]], направена от [[User:$2|$2]] ([[User talk:$2|Беседа]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]), не може да бъде отменена. Някой друг вече е редактирал страницата или е отменил промените.\n\nПоследната редакция е на [[User:$3|$3]] ([[User talk:$3|Беседа]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Резюмето на редакцията беше: <em>$1</em>.",
        "revertpage": "Премахване на [[Special:Contributions/$2|редакции на $2]] ([[User talk:$2|беседа]]); възвръщане към последната версия на [[User:$1|$1]]",
-       "revertpage-nouser": "Премахнати редакции на (отстранено потребителско име) и връщане към последната версия на [[User:$1|$1]]",
+       "revertpage-nouser": "Премахнати редакции на (скрито потребителско име) и връщане към последната версия на [[User:$1|$1]]",
        "rollback-success": "Отменени редакции на $1; възвръщане към последната версия на $2.",
        "sessionfailure-title": "Прекъсната сесия",
        "sessionfailure": "Изглежда има проблем със сесията ви; действието беше отказано като предпазна мярка срещу крадене на сесията. Натиснете бутона за връщане на браузъра, презаредете страницата, от която сте дошли, и опитайте отново.",
        "sp-contributions-newbies-sub": "на нови потребители",
        "sp-contributions-newbies-title": "Потребителски приноси за нови сметки",
        "sp-contributions-blocklog": "Дневник на блокиранията",
-       "sp-contributions-deleted": "изтрити приноси на потребител",
+       "sp-contributions-deleted": "изтрити приноси на {{GENDER:$1|потребител}}",
        "sp-contributions-uploads": "качвания",
        "sp-contributions-logs": "дневници",
        "sp-contributions-talk": "беседа",
        "whatlinkshere-hideredirs": "$1 пренасочвания",
        "whatlinkshere-hidetrans": "$1 включвания",
        "whatlinkshere-hidelinks": "$1 препратки",
-       "whatlinkshere-hideimages": "$1 Ð½Ð° Ð¿Ñ\80епÑ\80аÑ\82ки ÐºÑ\8aм Ñ\84айла",
+       "whatlinkshere-hideimages": "$1 препратки към файла",
        "whatlinkshere-filters": "Филтри",
        "whatlinkshere-submit": "Отваряне",
        "autoblockid": "Автоматично блокиране #$1",
        "scarytranscludefailed": "[Зареждането на шаблона за $1 не сполучи]",
        "scarytranscludetoolong": "[Адресът е твърде дълъг]",
        "deletedwhileediting": "'''Внимание''': Страницата е била изтрита, след като сте започнали да я редактирате!",
-       "confirmrecreate": "Потребител [[Потребител:$1|$1]] ([[Потребител беседа:$1|беседа]]) е {{GENDER:$1|изтрил}} страницата, откакто сте започнали да я редактирате, като е посочил следното обяснение:\n: <em>$2</em>\nПотвърдете, че наистина желаете да създадете страницата отново.",
+       "confirmrecreate": "Потребител [[User:$1|$1]] ([[User talk:$1|беседа]]) е {{GENDER:$1|изтрил}} страницата, след като сте започнали да я редактирате, като е посочил следното обяснение:\n: <em>$2</em>\nПотвърдете, че наистина желаете да създадете страницата отново.",
        "confirmrecreate-noreason": "Потребител [[User:$1|$1]] ([[User talk:$1|беседа]]) {{GENDER:$1|изтри}} тази страница след като сте започнали да я редактирате. Необходимо е потвърждение, че наистина желаете да създадете страницата отново.",
        "recreate": "Ново създаване",
        "confirm_purge_button": "Добре",
        "htmlform-chosen-placeholder": "Избиране",
        "htmlform-cloner-create": "Добавяне на още",
        "htmlform-cloner-delete": "Премахване",
+       "htmlform-cloner-required": "Изисква се поне една стойност.",
+       "htmlform-date-placeholder": "ГГГГ-ММ-ДД",
+       "htmlform-time-placeholder": "ЧЧ:ММ:СС",
+       "htmlform-datetime-placeholder": "ГГГГ-ММ-ДД ЧЧ:ММ:СС",
+       "htmlform-date-invalid": "Избраната от вас стойност за дата не е разпозната. Опитайте да използвате формат ГГГГ-ММ-ДД.",
        "htmlform-title-badnamespace": "[[:$1]] не е в именното пространство \"{{ns:$2}}\".",
        "htmlform-title-not-exists": "$1 не съществува.",
        "htmlform-user-not-exists": "<strong>$1</strong> не съществува.",
        "feedback-submit": "Изпращане",
        "feedback-thanks": "Благодарности! Вашата обратна информация е публикувана на страницата „[$2  $1]“.",
        "feedback-thanks-title": "Благодарим ви!",
-       "searchsuggest-search": "Търсене",
+       "searchsuggest-search": "Търсене в {{SITENAME}}",
        "searchsuggest-containing": "съдържа...",
+       "api-error-autoblocked": "Вашият IP адрес е блокиран автоматично, тъй като е бил използван от блокиран потребител.",
        "api-error-badaccess-groups": "Нямате необходимите права, за да качвате файлове в това уики.",
        "api-error-badtoken": "Вътрешна грешка: неправилен маркер.",
+       "api-error-blocked": "Блокирани сте да редактирате.",
        "api-error-copyuploaddisabled": "Качването през URL е забранено на този сървър.",
        "api-error-duplicate": "На сайта вече има {{PLURAL:$1|качен друг файл|качени други файлове}} с идентично съдържание.",
        "api-error-duplicate-archive": "На сайта вече е имало {{PLURAL:$1|качен друг файл|качени други файла}} с идентично съдържание, {{PLURAL:$1|който е бил изтрит|които са били изтрити}}.",
        "authmanager-provider-temporarypassword": "Временна парола",
        "authprovider-resetpass-skip-label": "Пропусни",
        "specialpage-securitylevel-not-allowed-title": "Не е позволено",
-       "cannotauth-not-allowed-title": "Достъпът е отказан"
+       "cannotauth-not-allowed-title": "Достъпът е отказан",
+       "edit-error-short": "Грешка: $1",
+       "edit-error-long": "Грешки:\n\n$1"
 }
index 2b1c8f6..61c1ed8 100644 (file)
        "userrights-removed-self": "আপনি আপনার নিজের অধিকার পরিবর্তন করেছেন। এর ফলে এখন থেকে আপনি আর এই পাতায় প্রবেশ করতে পারবেন না।",
        "group": "দল:",
        "group-user": "ব্যবহারকারীগণ",
-       "group-autoconfirmed": "সà§\8dবয়à¦\82à¦\95à§\8dরিয়ভাবà§\87 à¦¨à¦¿à¦¶à§\8dà¦\9aিতà¦\95à§\83ত à¦¬à§\8dযবহারà¦\95ারà§\80রা",
+       "group-autoconfirmed": "সà§\8dবয়à¦\82নিশà§\8dà¦\9aিতà¦\95à§\83ত à¦¬à§\8dযবহারà¦\95ারà§\80à¦\97ণ",
        "group-bot": "বট",
        "group-sysop": "প্রশাসক",
        "group-bureaucrat": "ব্যুরোক্র্যাট",
        "pageinfo-category-pages": "পাতার সংখ্যা",
        "pageinfo-category-subcats": "উপবিষয়শ্রেণীর সংখ্যা",
        "pageinfo-category-files": "ফাইলের সংখ্যা",
+       "pageinfo-user-id": "ব্যবহারকারী আইডি",
        "markaspatrolleddiff": "পরীক্ষিত হিসেবে চিহ্নিত করুন",
        "markaspatrolledtext": "এই পাতাটি পরীক্ষিত হিসেবে চিহ্নিত করুন",
        "markaspatrolledtext-file": "এই ফাইলের সংস্করণ পরীক্ষিত হিসেবে চিহ্নিত করুন",
        "newimages-showbots": "বটের আপলোড গুলো দেখাও।",
        "newimages-hidepatrolled": "টহলকৃত আপলোড আড়াল করো",
        "noimages": "দেখার মত কিছু নেই।",
+       "gallery-slideshow-toggle": "থাম্বনেল ভাসান",
        "ilsubmit": "অনুসন্ধান",
        "bydate": "তারিখ অনুযায়ী",
        "sp-newimages-showfrom": "$2, $1 এর পরের নতুন ছবিগুলো দেখাও",
        "confirmemail_body_set": "কেউ একজন, সম্ভবত আপনি, $1 আইপি ঠিকানা থেকে,\n{{SITENAME}}-এ \"$2\" অ্যকাউন্টের ইমেইল ঠিকানা নির্ধারণ করেছেন।\n\nএই অ্যাকাউন্টটি যে আসলেই আপনার তা নিশ্চিত করার জন্য এবং {{SITENAME}}-এ ইমেইল বৈশিষ্ট্যগুলো সক্রিয় করার জন্য আপনার ব্রাউজারে এই সংযোগটি খুলুন:\n\n$3\n\nযদি আপনি এই ব্যক্তি *না* হন, তাহলে ইমেইল ঠিকানা নিশ্চিতকরণ বাতিল করতে এই লিঙ্কটি অনুসরণ করুন\"\n\n$5\n\n$4-এ নিশ্চিতকরণ কোডটি মেয়াদোত্তীর্ণ হয়ে যাবে।",
        "confirmemail_invalidated": "ইমেইল ঠিকানা নিশ্চিতকরণ বাতিল হয়েছে",
        "invalidateemail": "ইমেইল নিশ্চিতকরণ বাতিল করুন",
+       "notificationemail_subject_changed": "{{SITENAME}}-এ নিবন্ধীকৃত ইমেল ঠিকানা পরিবর্তন করা হয়েছে",
+       "notificationemail_subject_removed": "{{SITENAME}}-এ নিবন্ধীকৃত ইমেল ঠিকানা সরানো হয়েছে",
        "scarytranscludedisabled": "[আন্তঃউইকি আন্তঃভুক্তি নিষ্ক্রিয়]",
        "scarytranscludefailed": "[$1 এর জন্য টেমপ্লেট আনা অসফল হয়েছে]",
        "scarytranscludefailed-httpstatus": "[$1: HTTP $2 এর জন্য টেমপ্লেট আনা বিফল হয়েছে]",
        "mediastatistics-header-drawing": "অংকন (ভেক্টর চিত্র)",
        "mediastatistics-header-audio": "অডিও",
        "mediastatistics-header-video": "ভিডিও",
+       "mediastatistics-header-multimedia": "মিডিয়া",
        "mediastatistics-header-office": "অফিস",
+       "mediastatistics-header-text": "পাঠগত",
+       "mediastatistics-header-executable": "সঞ্চালনযোগ্য",
        "mediastatistics-header-archive": "সংকুচিত বিন্যাস",
        "mediastatistics-header-total": "সকল ফাইল",
        "json-warn-trailing-comma": "JSON থেকে $1টি সর্বশেষ {{PLURAL:$1|কমা}} সরানো হয়েছে",
        "log-action-filter-patrol": "টহলের ধরন:",
        "log-action-filter-protect": "সুরক্ষার ধরন:",
        "log-action-filter-rights": "অধিকার পরিবর্তনের ধরন:",
+       "log-action-filter-suppress": "দমনের ধরন:",
        "log-action-filter-upload": "আপলোডের ধরন:",
        "log-action-filter-all": "সব",
        "log-action-filter-block-block": "বাধাদান",
        "log-action-filter-block-reblock": "বাধাদান পরিবর্তন",
        "log-action-filter-block-unblock": "বাধা অপসারণ",
+       "log-action-filter-contentmodel-change": "বিষয়বস্তুর মডেল পরিবর্তন",
        "log-action-filter-delete-delete": "পাতা অপসারণ",
        "log-action-filter-delete-restore": "পাতা পুনঃরুদ্ধার",
        "log-action-filter-delete-event": "লগ অপসারণ",
index 8537087..b8261e2 100644 (file)
@@ -7,7 +7,8 @@
                        "Huji",
                        "Meno25",
                        "Mogoeilor",
-                       "아라"
+                       "아라",
+                       "Mjbmr"
                ]
        },
        "tog-underline": "لینکهای خط به زیر",
        "thu": "پنجشنبه",
        "fri": "جمعه",
        "sat": "شنبه",
-       "january": "ژانویه",
-       "february": "فوریه",
+       "january": "جانڤیە",
+       "february": "فئڤریە",
        "march": "مارس",
-       "april": "آوریل",
-       "may_long": "مه",
-       "june": "ژوئن",
-       "july": "ژوئیه",
-       "august": "اÙ\88ت",
-       "september": "سپتامبر",
-       "october": "اکتبر",
-       "november": "نوامبر",
-       "december": "دساÙ\85بر",
+       "april": "آڤریل",
+       "may_long": "مە",
+       "june": "جوٙأن",
+       "july": "جوٙئیە",
+       "august": "Ø¢Ú¯Ù\88ست",
+       "september": "سئپتامر",
+       "october": "ئÙ\88کتÙ\88بر",
+       "november": "نوڤامر",
+       "december": "دئساÙ\85ر",
        "january-gen": "ژانویه",
        "february-gen": "فوریه",
        "march-gen": "مارس",
        "october-gen": "اکتبر",
        "november-gen": "نوامبر",
        "december-gen": "دسامبر",
-       "jan": "ژانویه",
-       "feb": "فوریه",
+       "jan": "جانڤیە",
+       "feb": "فئڤریە",
        "mar": "مارس",
-       "apr": "آوریل",
-       "may": "مه",
-       "jun": "ژوئن",
-       "jul": "ژوئیه",
-       "aug": "اÙ\88ت",
-       "sep": "سپتامبر",
-       "oct": "اکتبر",
-       "nov": "نوامبر",
-       "dec": "دساÙ\85بر",
+       "apr": "آڤریل",
+       "may": "مە",
+       "jun": "جوٙأن",
+       "jul": "جوٙئیە",
+       "aug": "Ø¢Ú¯Ù\88ست",
+       "sep": "سئپتامر",
+       "oct": "ئÙ\88کتÙ\88بر",
+       "nov": "نوڤامر",
+       "dec": "دئساÙ\85ر",
        "pagecategories": "{{PLURAL:$1|دسته|دسته ها}}",
        "category_header": "صفحات دردسته \"$1\"",
        "subcategories": "دسته های فرعی",
        "newwindow": "(پنجره تازه واز کن)",
        "cancel": "لغو",
        "mytalk": "صحبت مو",
+       "navigation": "ناڤجوری",
+       "and": "&#32;و",
        "qbfind": "پیدا کردن",
        "qbedit": "اصلاح",
        "faq": "اف ای کیو",
        "faqpage": "Project:اف ای کیو",
+       "namespaces": "نوم ڤأرگأ آ",
+       "variants": "آلشدگأرا",
        "errorpagetitle": "خطا",
        "returnto": "بازگشت به $1.",
        "tagline": "از {{SITENAME}}",
        "help": "راهنما",
-       "search": "جستن",
-       "searchbutton": "جستن",
+       "search": "پئی جوٙری",
+       "searchbutton": "پئی جوٙری",
        "searcharticle": "برو",
        "history": "گزارش صفحه",
        "history_short": "گزارش تاریخی",
-       "printableversion": "نسخه قابل چاپ",
+       "printableversion": "نوسقئ پئلا ڤابیدٙئنی",
        "permalink": "لینک دایمی",
+       "view": "ديئن",
+       "view-foreign": "مئن $1 نه بوینین",
        "edit": "اصلاح",
        "editthispage": "اصلاح ای صفحه",
        "delete": "حذف",
        "protect": "حفاظت وحمایت",
        "newpage": "صفحه تازه",
        "talkpage": "بحث ای صفحه",
-       "talkpagelinktext": "صحبت",
+       "talkpagelinktext": "چأک چئنە",
        "specialpage": "صفحه مخصوص",
        "personaltools": "ابزارهای شخصی",
        "articlepage": "دیدن صفحه محتوا",
        "jumpto": "پریدن به:",
        "jumptonavigation": "راندن یا هدایت کردن",
        "jumptosearch": "جستن",
-       "aboutsite": "دربارÙ\87 {{SITENAME}}",
-       "aboutpage": "Project:دربارÙ\87",
+       "aboutsite": "راجÙ\88Ú¤ Ø¨Ø¦ {{SITENAME}}",
+       "aboutpage": "Project:راجڤ Ø¨Ø¦",
        "copyright": "محتوا باای شماره قابل دسترسیه\n $1.",
        "copyrightpage": "{{ns:project}}:کپی رایت",
        "currentevents": "اتفاقات جاری",
        "currentevents-url": "Project:اتفاقات جاری",
-       "disclaimers": "اÙ\86کار Ú©Ù\86Ù\86دÙ\87 Ù\87ا",
-       "disclaimerpage": "Project:انکار کاربران",
+       "disclaimers": "تÛ\8cÛ\95 Ù¾Ù\88Ù\99Ø´Ù\86ا",
+       "disclaimerpage": "Project: تیە پوشنیدٙئنئ کولی",
        "edithelp": "کمک برای اصلاح",
-       "mainpage": "صÙ\81Ø­Ù\87 Ø§ØµÙ\84Û\8c",
+       "mainpage": "سأرآسÙ\88Ù\99Ù\86Û\95",
        "mainpage-description": "صفحه اصلی",
        "policy-url": "Project:خط مشی",
        "portal": "درگاه کاربران",
        "portal-url": "Project:درگاه کاربران",
-       "privacy": "خط Ù\85Ø´Û\8c Ø±Ø§Ø²Ø¯اری",
-       "privacypage": "Project:خط Ù\85Ø´Û\8c Ø±Ø§Ø²داری",
+       "privacy": "رأدÛ\8cارکÙ\88Ù\86Û\8c Ø±Ø§Ø²Ú¤Ø§Ø¯Ù\99اری",
+       "privacypage": "Project:رأدÛ\8cارکÙ\88Ù\86Û\8c Ø±Ø§Ø²Ú¤Ø§داری",
        "badaccess": "خطا :اجازه بگیر",
        "badaccess-group0": "ایسا اجازه انجام کاری که خواستین را ندارین",
        "badaccess-groups": "او کاری که ایسا درخواست کردین فقط سی کاربرانیه که من ای  گروهن\n{{PLURAL:$2|آن گروه|یکی زه گروهها}}: $1.",
        "versionrequiredtext": "یه نسخه زه ویکی مدیا($1) نیازمند ه به استفاده زه ای صفحه\nبوین :[[Special:Version|version page]].",
        "ok": "خووه",
        "pagetitle-view-mainpage": "سرصفحه",
-       "retrievedfrom": "بازÛ\8cاÙ\81ت Ø§Ø²\"$1\"",
+       "retrievedfrom": "دÙ\88ڤارتئ Ø¬Ù\88Ù\99رÛ\8c Ø² \"$1\"",
        "youhavenewmessages": "پیام تاره داری $1 ($2).",
        "youhavenewmessagesmulti": "ایسا پیام تازه دارین منه\n$1",
-       "editsection": "اصلاح",
+       "editsection": "ڤیرایئشت کاری",
        "editold": "اصلاح",
        "viewsourceold": "دیدن منبع",
-       "editsectionhint": "اصلاح یه قسمت: $1",
+       "editlink": "ڤیرایئشت",
+       "viewsourcelink": "سئیل سرچشمه کنین",
+       "editsectionhint": "ڤیرایئشت بأرجا: $1",
        "toc": "محتواها",
        "showtoc": "نمایش",
        "hidetoc": "قایم",
        "feedlinks": "تغذیه:",
        "feed-invalid": "اشتراک  زه راه  تایپ باطله",
        "site-rss-feed": "خبرخو RSS سی $1",
-       "site-atom-feed": "خبرخÙ\88 Atom سی $1",
+       "site-atom-feed": "حأڤاÙ\84 Ø®Ù\88Ù\99Ù\86ئ Atom سی $1",
        "page-rss-feed": "خبرخو RSS سی «$1»",
+       "red-link-title": "$1 (چونو بألگئ یی نیدٙئس)",
+       "nstab-main": "بلگه",
        "nstab-user": "صفحه کاربر",
+       "nstab-special": "بألگه ڤیجه",
        "nstab-project": "صفحه پروژه",
        "nstab-image": "فایل",
        "nstab-template": "قالب یا الگو",
        "nstab-category": "دسته",
+       "mainpage-nstab": "سأرآسوٙنە",
        "badtitle": "عنوان بد",
        "badtitletext": "عنوان درخواستی نامعتبر، خالی، یا عنوانی بین زبانی یا بین‌ویکی‌ای با پیوند نادرسته\nو ممکنه دارای یک یا چند کاراکتر بوه که در عنوان مربوط نوا زش استفاده کنین",
        "viewsource": "مشاهده منبع",
        "viewsourcetext": "ایسا ترین بوینین وکپی کنین منبع ای صفحه را:",
        "yourname": "نام کاربر:",
        "yourpassword": "رمز:",
-       "remembermypassword": "رمز اویدن به سیستم را دراین رایانه به خاطر بسپار (for a maximum of $1 {{PLURAL:$1|day|days}})",
        "login": "اویدن به سیستم",
        "nav-login-createaccount": "اویدن به سیستم",
        "userlogin": "اویدن به سیستم / درست کردن حساب کاربری",
        "gotaccountlink": "اویدن به",
        "loginsuccesstitle": "اویدن با بخت وتوفیق به سیستم",
        "loginsuccess": "''' ایسا اویدن به داخل سایت {{SITENAME}} بعنوان \"$1\".'''",
-       "nosuchuser": "کاربری به ای نام وجود نداره \"$1\".\nحروف نام را چک کنین, یا [[Special:UserLogin/signup|درست کنین یه حساب کاربری تازه]].",
+       "nosuchuser": "کاربری به ای نام وجود نداره \"$1\".\nحروف نام را چک کنین, یا [[Special:CreateAccount|درست کنین یه حساب کاربری تازه]].",
        "nosuchusershort": "کاربری به ای نام وجود نداره\"$1\".\nحروف نام راچک کنین.",
        "nouserspecified": "ایسا دارین یه نام کاربر ذکر اکنین.",
        "wrongpassword": "رمز وارد وابیده درست نه.\nلطفا دوباره سعی کنین.",
        "passwordremindertext": "یه نفر (شاید خودتو, زه نشانی آی پی$1) درخواست یه رمز تازه کرده سی {{SITENAME}} ($4). یه رمز موقتی سی کاربر\n\"$2\" درست شده وگذاشته وابیده به\"$3\". ایر مطابق میل ایسا بوه, نیازه که داخل سیستم بوین ویه رمز تازه انتخاب کنین.\n\nایر آن فرد همچنین درخواست کرده بوه  یونه, یا ایر ایسا رمزتو را به خاط داشته این ,\nوسی مدت طولانی نه خوین هونه تغییر بدین, ایسا وا نادیده بگیرین ای پیام  را وهمچنان زه رمز قدیمی خوتو استفاده کنین",
        "noemail": "وجود نداره نشانی امیل ضبط وابده زه کاریر \"$1\".",
        "passwordsent": "یه رمز تازه ارسال وابید به نشانی امیل ثبت وابده سی \"$1\".\nلطفا بعد از دریافت آن داخل سیستم بوین.",
-       "eauthentsent": "یه نامه الکترونیکی سی تایید نشانی پست الکترونیکی به نشانی مورنظر ارسال وابید. قبل زه یو که نامه دیگری قابل ارسال به این نشانی بوه، وا دستورهایی که در آن نامه اویده را جهت تأیید ای مساله که ای نشانی مال ایسانه اجرا کنین.",
+       "eauthentsent": "یه ایمیل سی تایید آدرس ایمیل به آدرس مورنظر ارسال وابید. قبل زه یو که ایمیل دیگری قابل ارسال به این آدرس بوه، وا دستورهایی که در آن ایمیل اویده را جهت تأیید ای مساله که ای آدرس مال ایسانه اجرا کنین.",
+       "pt-login": "ڤامین اوڤیڌن",
+       "pt-createaccount": "راسد کردن هساڤ کارياري",
        "retypenew": "تایپ دوباره رمز:",
        "bold_sample": "متن گپ نما",
        "bold_tip": "متن گپ نما",
        "anoneditwarning": "'''توجه:''' ایسا داخل سیستم نوابیدین.\nآی پی آدرستو درگزارش اصلاح صفحه ضبط ابوه.",
        "summary-preview": "پیش نمایش - خلاصه:",
        "blockedtext": " \"'''دسترسی نام کاربری یا نشانی اینترنتی ایسا بسته وابیده.'''\nای کار توسط $1 انجام شده‌است.\nدلیلی که گده اینه: $2''\n* آغاز قطع دسترسی: $8\n* زمان اتمام ای قطع دسترسی: $6\n* کاربری که قطع دسترسی‌اش در نظر بیده: $7\nایساترین با $1 یا یکی از [[{{MediaWiki:Grouppage-sysop}}|مدیران]] تماس بگیرین و در ای باره صحبت کنین.\nتوجه کنین که ایسا نترین زه امکان «ارسال پست الکترونیکی به ای کاربر» استفاده کنین مگر این که نشانی پست الکترونیکی معتبری در [[Special:Preferences|اولویتهای کاربری]]خود ثبت کرده بوین.\nنشانی IP ایسا $3 و شماره قطع دسترسی ایسا $5 است. لطفاً ای شماره‌ها را در همه کاوشهاتون ذکر کنین.\nایسا ترین با $1 یا یکی دیه زه [[{{MediaWiki:Grouppage-sysop}}|مدیران]] تماس بگیرین، تا در باره ای قطع دسترسی صحبت کنین.\nدقت کنین که سی ارسال پست الکترونیکی در ویکی، وا پست الکترونیکی خود را زه طریق صفحه[[Special:Preferences|تنظیمات]] فعال کرده بوین، و نیز، وا امکان استفاده زه ای ویژگی سی ایساقطع نبوه.\nنشانی اینترنتی الان ایسا $3 است و شماره قطع دسترسی $5 است.\nلطفاً ای شماره را در هر درخواستی که در ای مورد مطرح اکنین ذکر کنین",
+       "loginreqlink": "ڤامین اوڤیڌن",
        "newarticle": "(تازه)",
        "newarticletext": "ایسا لینکی را دنبال کردین و به صفحه‌ای رسیدین که هنی درست نوابیده.\nسی ایجاد صفحه، داخل مستطیل زیر شروع به تایپ کنین (سی اطلاعات بیشتر به [[{{ns:project}}:راهنما|صفحه راهنما] برین).\nایر اشتباهی ایچو اویدین دکمه «برگشت» مرورگرتو را بزنین.",
        "noarticletext": " الان ای صفحه متنی نداره، ایسا ترین [[Special:Search/{{PAGENAME}}عنوان ای صفحه را در صفحه‌های دیگر جستجو کنین]] یا [{{fullurl:{{FULLPAGENAME}}|action=edit}} ای صفحه را اصلاح کنین].",
        "prevn": "قبلی {{PLURAL:$1|$1}}",
        "nextn": "بعدی {{PLURAL:$1|$1}}",
        "viewprevnext": "مشاهده ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchprofile-articles": "بلگه آ مینونه دار",
+       "searchprofile-everything": "همه چی",
+       "searchprofile-advanced": "پیشکرده",
+       "searchprofile-articles-tooltip": "بگرد مئن $1",
+       "searchprofile-images-tooltip": "جانیاانه پی جوری کو",
+       "search-result-size": "$1 ({{PLURAL:$2|1 ڤاجه یل|$2 ڤاجه یل}})",
+       "searchall": "همه",
+       "search-nonefound": "هیژ نتیجه یی وا پی جست تو یکی نئ.",
        "preferences": "اولویتها",
-       "mypreferences": "اÙ\88Ù\84Ù\88Û\8cتÙ\87اÛ\8c Ù\85Ù\88",
+       "mypreferences": "Ø®Ù\88صÙ\88Ù\99Û\8cات Ù\87Ø£Ù\86Û\8c",
        "yourrealname": "نام واقعی:",
        "prefs-help-realname": "ذکر نام واقعی اختیاریه ایر تصمیم به گدن بگیرین هنگام ارجاع به آثارتو و انتساب هونو به ایسا زه نام واقعیتو استفاده ابوه",
        "grouppage-sysop": "{{ns:project}}:مدیران",
+       "newuserlogpage": "راسد ڤابیه وا کاریار",
        "rightslog": "نمایه حقوق کاربر",
        "nchanges": "$1 {{PLURAL:$1|تغییر|تغییرات}}",
+       "enhancedrc-history": "ڤیرگار",
        "recentchanges": "تغییرات اخیر",
        "recentchanges-feed-description": "ردیابی آخرین تغییرات  ویکی در ای خورد",
+       "recentchanges-label-minor": "یو یه ويرايشت کوچيره",
+       "recentchanges-label-unpatrolled": "ای ويرايشت هنی تيه واداشت نوابيه",
        "rcnotefrom": "در زیر تغییرات زه تاریخ <b>$2</b> آمده‌اند (تا <b>$1</b> مورد نشو داده ابوه).",
        "rclistfrom": "نشودادن تغییرات تازه با شروع زه $3 $2",
        "rcshowhideminor": "اصلاحات کوچیک $1",
+       "rcshowhideminor-hide": "قام کردن",
        "rcshowhidebots": "$1 ربات‌ها یا بوتها",
-       "rcshowhideliu": "$1 کاربران داخل وابیده",
+       "rcshowhidebots-show": "نشون دائن",
+       "rcshowhideliu": "$1 کاریارا ثوت نام کرده",
+       "rcshowhideliu-hide": "قام کئردئن",
        "rcshowhideanons": "$1 کاربران داخل نوابیده",
+       "rcshowhideanons-hide": "قام کئردئن",
        "rcshowhidepatr": "$1 اصلاحات پاسداری شده",
        "rcshowhidemine": "$1 اصلاحات مو",
+       "rcshowhidemine-hide": "قام کئردئن",
        "rclinks": "نشودادن آخرین $1 تغییر در $2 روز اخیر؛ $3",
        "diff": "تفاوت",
        "hist": "گزارش",
        "minoreditletter": "رز",
        "newpageletter": "تا",
        "boteditletter": "ر",
+       "rc-change-size-new": "$1 {{PLURAL:$1|بایت|بایتا}} بئ نیا آلئشتکاری",
        "recentchangeslinked": "تغییرات مرتبط",
        "recentchangeslinked-feed": "تغییرات مرتبط",
        "recentchangeslinked-toolbox": "تغییرات مرتبط",
        "recentchangeslinked-title": "تغییرهای مرتبط با $1",
        "recentchangeslinked-summary": " ای صفحه خاص تغییرات اخیر در صفحه‌های لینک داده شده به این صفحه را نشو اده.\nصفحه‌هایی که در لیست پی‌گیریهای ایسا بون به شکل '''سیاه''' نشو داده ابون.",
+       "recentchangeslinked-page": "نوم بألگە:",
        "upload": "آپلود فایل",
        "uploadbtn": "آپلود فایل",
        "uploadlogpage": "نمایه آپلود",
        "filehist-help": "رو تاریخ‌ها کلیک کنید تا نسخه مرتبط را ببینین.",
        "filehist-current": "جاری",
        "filehist-datetime": "تاریخ/زمان",
+       "filehist-thumb": "عسگ کۈچير وابيه",
        "filehist-user": "کاربر",
        "filehist-dimensions": "ابعاد",
        "filehist-filesize": "اندازه فایل",
        "filehist-comment": "توضیح",
-       "imagelinks": "لینکها",
+       "imagelinks": "به کار گرهڌن جانيا",
        "linkstoimage": "ذیل الذکر {{PLURAL:$1|لینکهای صفحه|$1 لینک صفحات}} به ای فایل:",
        "nolinkstoimage": "هیچ صفحه ای نه که لینک وابیده بوه به ای فایل",
        "sharedupload": "ای فایل یک آپلود اشتراکی هده و ممکنه زه طریق  پروژه‌های دیگه  هم قابل دسترسی بوه",
        "namespace": "فضای نام:",
        "invert": "انتخاب برعکس بوه",
        "blanknamespace": "(اصلی)",
-       "contributions": "شراکتهای کاربر",
+       "contributions": "{{GENDER:$1|کاریار}} هومیاریا",
        "mycontris": "شراکتهای مو",
        "contribsub2": "سی $1 ($2)",
        "uctop": "(بالا)",
        "sp-contributions-talk": "صحبت",
        "whatlinkshere": "لینک های ای صفحه",
        "whatlinkshere-title": "صفحات آن لینک به \"$1\"",
+       "whatlinkshere-page": "بألگە",
        "linkshere": "لینک صفحات ذیل الذکر به '''[[:$1]]''':",
        "nolinkshere": "هیچ صفحه ای پیوند نداردبه '''[[:$1]]'''.",
        "isredirect": "صفحه تغییر مسیر",
        "ipblocklist": "آدرسهای  آی پی وکاربران بسته وابیدند",
        "blocklink": "بسته بوه !",
        "unblocklink": "باز بوه",
-       "contribslink": "شراکت",
+       "contribslink": "ھأیاری",
        "blocklogpage": "نمایه _ بسته‌وابیده‌ها",
        "blocklogentry": "بسته وابید [[$1]] با سپری وابیدن وقت زه $2 $3",
        "movepagetext": "با استفاده زه فرم زیر نام صفحه تغییر اکنه و همه گزارش تاریخی هو به نام تازه جابجا ابوه.\nعنوان کهنه تبدیل به یک صفحه تغییر مسیر به عنوان جدید ابوه.\nایسا ترین بطور اتوماتیک تغییر مسیر های مربوط به عنوان اصلی رو به روز رسانی کنین. ایر ایسا مطمئن نهدین با دیدن یونو مطمئن بوین:\n[[Special:تغییر مسیر دوبل|دوبل ]] یا[[Special:تغییرمسیر خروا یا اشکسته|تغییرمسیرهای خراو یا اشکسته]].\n\nلینکهایی که به عنوان صفحه قدیمی هدن تغییر نه کنن حتماً تغییر مسیرهای دوبل یا اشکسته و خراو را بررسی کنین.\n'''ایسا''' مسئول اطمینان زه یو هدین که لینکها هنی به همان‌جایی که قرار هده برن.\n\nتوجه کنین که ایر زه قبل صفحه‌ای در عنوان تازه وجود داشته بوه صفحه منتقل '''نه بوه'''،\nمیر یو که آن صفحه خالی یا تغییر مسیر بوه و گزارش تاریخی اصلاح نداشته بوه.\n یعنی ایر اشتباه کردین ترین صفحه را به همان جایی که زه هو جابجا وابیدین برگردانین، و  نترین رو صفحات موجود بنویسین\n\n'''هشدار!'''\nجابجایی صفحات به نام تازه ممکنه  تغییر کلی و غیرمنتظره‌ای سی\n صفحات دوست داشتنی داشته بوه ؛\nلطفاً مطمئن بوین که قبل زه جابجا کردن صفحه، عواقب ای کار را درک اکنین.",
        "movepagetalktext": "صفحه صحبت مربوط، ایر وجود داشته بوه، بطور اتوماتیک همراه با صفحه اصلی\n جابجا ابوه '''میر یو که''' :\n* در حال جابجایی صفحه زه ای فضای نام به فضای نام دیگری بوین،\n* یه صفحه صحبت غیرخالی تحت ای نام تازه وجود داشته بوه، یا\n* کادر زیر را تیک نزده بوین.\n\nدر ای موارد، وا صفحه را بطور دستی جابجا کرده و یا محتویات دو صفحه را با اصلاح ادغام کنین.",
-       "movearticle": "جابجایی صفحه:",
        "newtitle": "به عنوان تازه:",
        "move-watch": "پیگیری ای صفحه",
        "movepagebtn": "جابجایی صفحه",
        "tooltip-pt-login": "توصیه ابوه که به سیستم داخل بوین اما اجباری نه.",
        "tooltip-pt-logout": "رهدن زه سیستم",
        "tooltip-ca-talk": "صحبت درباره صفحه محتوا",
-       "tooltip-ca-edit": "ایسا ترین ای  صفحه را اصلاح کنین. لطفاً قبل  ذخیره کردن زه دکمه پیش‌ نمایش استفاده کنین",
-       "tooltip-ca-addsection": "اضاÙ\81 Ú©Ø±Ø¯Ù\86 Û\8cÙ\87 ØªÙ\88ضÛ\8cØ­ Ø¨Ù\87 Ø§Û\8c Ù\85بحث",
+       "tooltip-ca-edit": "ڤيرایشت اي بلگه",
+       "tooltip-ca-addsection": "Ø´Ù\88رÛ\88 Ú©Ø±Ø¯Ù\86 Û\8cÙ\87 Ø¨Ù\87رجا Ø¯Û\8cÙ\87",
        "tooltip-ca-viewsource": "ای صفحه  تحت حمایته ایساترین منبعسه بوینین",
+       "tooltip-ca-history": "دوواره ديئن ای بلگه",
        "tooltip-ca-protect": "حفاظت وحمایت زه ای صفحه",
        "tooltip-ca-delete": "حذف ای صفحه",
        "tooltip-ca-move": "جابجاکردن ای صفحه",
        "tooltip-ca-watch": "اضاف کردن ای صفحه به لیست پیگیریهاتو",
        "tooltip-ca-unwatch": "حذف ای صفحه زه لیست پی‌گیری‌های ایسا",
        "tooltip-search": "جستن {{SITENAME}}",
+       "tooltip-search-fulltext": "بألگأ آنأ سي چونو نإڤشدإیي پإی جۈري کو",
        "tooltip-n-mainpage": "دیدن صفحه اصلی",
+       "tooltip-n-mainpage-description": "بإنیرين به سرآسونه",
        "tooltip-n-portal": "درباره ای پروژه چه ترین  کنین و  کیه  ترین آن جیزها رو پیدا کنین",
        "tooltip-n-currentevents": "پیداکردن اطلاعات زمینه یاسابقه اطلاعات در اتفاقات جاری",
        "tooltip-n-recentchanges": "فهرست  تغییرات آخری درویکی",
        "tooltip-ca-nstab-main": "دیدن آن صفحه محتوا",
        "tooltip-ca-nstab-user": "دیدن صفحه کاربر",
        "tooltip-ca-nstab-media": "دیدن صفحه مدیا",
-       "tooltip-ca-nstab-special": "ای صفحه مخصوصه وایسا نترین خود ای صفحه رااصلاح کنین",
+       "tooltip-ca-nstab-special": "اي بلگه بلگه ویجه و ايسا نترين هونه ڤیرایشت کونین",
        "tooltip-ca-nstab-project": "دیدن صفحه پروژه",
        "tooltip-ca-nstab-image": "دیدن صفحه فایل",
        "tooltip-ca-nstab-mediawiki": "دیدن پیام سیستم",
        "tooltip-recreate": "دوباره درست کردن صفحه ای که زه رو کینه وغرض پاک وابیده",
        "tooltip-upload": "شروع آپلود",
        "tooltip-rollback": "\"اعاده\" برگرداندن به وضع اولیه سی ای صفحه که بخاطر مشارکت  آخر اصلاح وابیده بایک کلیک",
+       "pageinfo-toolboxlink": "دونسمندیا بلگه",
        "previousdiff": "← اصلاح قدیمی",
        "nextdiff": "تفاوت بعدی→",
        "file-info-size": "$1 × $2 پیکسل, اندازه فایل: $3, MIME نوع: $4",
        "file-nohires": "قابلیت تفکیک بالاتری در دسترس نه.",
        "svg-long-desc": "SVG فایل, تقریبا$1 × $2 پیکسل, اندازه فایل: $3",
-       "show-big-image": "تصÙ\88Û\8cر Ø¨Ø§ Ù\82ابÙ\84Û\8cت ØªÙ\81Ú©Û\8cÚ© Ú©Ø§Ù\85Ù\84",
+       "show-big-image": "جاÙ\86Û\8cا Ø§ØµÙ\84Û\8c",
        "newimages": "گالری فایلهای تازه",
        "bad_image_list": "اطلاعات را وا به ای شکل وارد کنین:\n\nفقط سطرهایی که با * آغاز ابون در نظر گریده ابون. اولین لینک در هر سطر، باید لینکی به یک تصویر بد باشد.\nلینکهای بعدی در همان سطر، به عنوان موارد استثنا در نظر گریده ابون",
        "metadata": "فراداده",
        "metadata-fields": "فراداده EXIF نشو داده وابیده در این پیام وقتی جدول فراداده‌های تصویر جمع وابیده بوه هم نمایش داده ابوه.\nبقیه موارد فقط وقتی نشوداده ابوه که جدول یادشده واز بوه.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "namespacesall": "همه",
        "monthsall": "همه ماهها",
+       "semicolon-separator": "؛&#32;",
        "watchlisttools-view": "نشودادن تغییرات مربوطه",
        "watchlisttools-edit": "نشودادن واصلاح کردن لیست پیگیریها",
        "watchlisttools-raw": "اصلاح لیست خام پی‌گیری‌ها",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|چک چنه]])",
        "version": "ترجمه یا تفسیر",
-       "specialpages": "صفحات ویژه"
+       "specialpages": "صفحات ویژه",
+       "searchsuggest-search": "جستن {{SITENAME}}"
 }
index 371a669..2e65260 100644 (file)
        "pageswithprop-prophidden-long": "sakriveno dugo tekstualno svojstvo ($1)",
        "pageswithprop-prophidden-binary": "sakriveno dugo binarno svojstvo ($1)",
        "doubleredirects": "Dvostruka preusmjerenja",
-       "doubleredirectstext": "Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja.\nSvaki red sadrži veze na prvo i drugo preusmjerenje, kao i na prvu liniju teksta drugog preusmjerenja, što obično daje \"pravi\" ciljni članak, na koji bi prvo preusmjerenje i trebalo da pokazuje.\n<del>Precrtane</del> stavke su riješene.",
+       "doubleredirectstext": "Ova stranica prikazuje stranice koje preusmjeravaju na druga preusmjerenja.\nSvaki red sadrži linkove na prvo i drugo preusmjerenje, kao i na odredišnu stranicu drugog preusmjerenja koja je obično \"pravi\" članak na koji bi prvo preusmjerenje trebalo upućivati.\n<del>Precrtane</del> stavke su riješene.",
        "double-redirect-fixed-move": "[[$1]] je premješten.\nAutomatski je ažuriran i sada preusmjerava na [[$2]].",
        "double-redirect-fixed-maintenance": "Automatsko ospravljanje dvostrukih preusmjerenja sa [[$1]] na [[$2]] je posao održavanja.",
        "double-redirect-fixer": "Popravljač preusmjerenja",
        "withoutinterwiki-legend": "Prefiks",
        "withoutinterwiki-submit": "Prikaži",
        "fewestrevisions": "Stranice sa najmanje izmjena",
-       "nbytes": "$1 {{PLURAL:$1|bajt|bajtova}}",
+       "nbytes": "$1 {{PLURAL:$1|bajt|bajta|bajtova}}",
        "ncategories": "$1 {{PLURAL:$1|kategorija|kategorije}}",
        "ninterwikis": "$1 {{PLURAL:$1|međujezična veza|međujezične veze}}",
        "nlinks": "$1 {{PLURAL:$1|veza|veze}}",
        "restriction-level-all": "svi nivoi",
        "undelete": "Pregled obrisanih stranica",
        "undeletepage": "Pregled i vraćanje obrisanih stranica",
-       "undeletepagetitle": "<strong>Sljedeći sadržaj prikazuje obrisane izmjene stranice [[:$1|$1]]<strong>.",
+       "undeletepagetitle": "<strong>Sljedeći sadržaj prikazuje obrisane izmjene stranice [[:$1|$1]]</strong>.",
        "viewdeletedpage": "Pregled obrisanih stranica",
        "undeletepagetext": "{{PLURAL:$1|Slijedeća $1 stranica je obrisana|Slijedeće $1 stranice su obrisane|Slijedećih $1 je obrisano}} ali su još uvijek u arhivi i mogu biti vraćene.\nArhiva moše biti periodično čišćena.",
        "undelete-fieldset-title": "Vraćanje izmjena",
        "movenosubpage": "Ova stranica nema podstranica.",
        "movereason": "Razlog:",
        "revertmove": "vrati",
-       "delete_and_move_text": "==Potebno brisanje==\nOdredišna stranica \"[[:$1]]\" već postoji.\nDa li je želite obrisati kako bi ste mogli izvršiti premještanje?",
+       "delete_and_move_text": "Odredišna stranica \"[[:$1]]\" već postoji.\nŽelite li je obrisati da biste oslobodili mjesto za premještanje?",
        "delete_and_move_confirm": "Da, obriši stranicu",
        "delete_and_move_reason": "Obrisano da se oslobodi mjesto za premještanje iz \"[[$1]]\"",
        "selfmove": "Izvorni i ciljani naziv su isti; strana ne može da se premjesti preko same sebe.",
index 6a5d333..00bb056 100644 (file)
        "searchprofile-advanced-tooltip": "Cerca als espais de noms personalitzats",
        "search-result-size": "$1 ({{PLURAL:$2|1 paraula|$2 paraules}})",
        "search-result-category-size": "{{PLURAL:$1|1 membre|$1 membres}} ({{PLURAL:$2|1 subcategoria|$2 subcategories}}, {{PLURAL:$3|1 fitxer|$3 fitxers}})",
-       "search-redirect": "(redirigit des de $1)",
+       "search-redirect": "(redirecció des de $1)",
        "search-section": "(secció $1)",
        "search-category": "(categoria $1)",
        "search-file-match": "(coincideix amb el contingut del fitxer)",
        "grant-group-file-interaction": "Interacció amb fitxes multimèdia",
        "grant-group-watchlist-interaction": "Interacció amb la vostra llista de seguiment",
        "grant-group-email": "Enviament de correu",
+       "grant-group-high-volume": "Realitzeu activat d'alt volum",
        "grant-group-customization": "Personalització i preferències",
        "grant-group-administration": "Realitza accions administratives",
+       "grant-group-private-information": "Accedeix a les vostres dades privades",
        "grant-group-other": "Activitat miscel·lània",
        "grant-blockusers": "Bloca i desbloca usuaris",
        "grant-createaccount": "Crea comptes",
        "grant-createeditmovepage": "Crea, modifica i reanomena pàgines",
        "grant-delete": "Suprimeix pàgines, revisions i entrades de registre",
        "grant-editinterface": "Modifica l'espai de noms MediaWiki i els CSS/JavaScript d'usuari",
+       "grant-editmycssjs": "Modifiqueu el vostre CSS/JavaScript d'usuari",
        "grant-editmyoptions": "Editeu les vostres preferències d'usuari",
        "grant-editmywatchlist": "Modifica la llista de seguiment",
        "grant-editpage": "Modifica les pàgines existents",
        "grant-highvolume": "Edició d'alt volum",
        "grant-oversight": "Amaga usuaris i suprimeix revisions",
        "grant-patrol": "Patrulla els canvis de les pàgines",
+       "grant-privateinfo": "Accedeix a informació privada",
        "grant-protect": "Protecció i desprotecció de pàgines",
        "grant-rollback": "Reversió de canvis en pàgines",
        "grant-sendemail": "Enviament de correus a altres usuaris",
        "file-thumbnail-no": "El nom del fitxer comença per <strong>$1</strong>.\nSembla una imatge de mida reduïda <em>(miniatura)</em>.\nSi teniu la imatge en alta resolució, pugeu-la. Si no, mireu de canviar-li el nom.",
        "fileexists-forbidden": "Ja hi existeix un fitxer amb aquest nom i no es pot sobreescriure.\nSi us plau, torneu enrere i carregueu aquest fitxer sota un altre nom. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Ja hi ha un fitxer amb aquest nom en el fons comú de fitxers.\nSi encara voleu pujar el fitxer, torneu enrere i pugeu-ne una còpia amb un altre nom. [[File:$1|thumb|center|$1]]",
+       "fileexists-no-change": "La càrrega és un duplicat exacte de la versió actual de <strong>[[:$1]]</strong>.",
        "file-exists-duplicate": "Aquest fitxer és un duplicat {{PLURAL:$1|del fitxer |dels següents fitxers:}}",
        "file-deleted-duplicate": "S'ha suprimit anteriorment un fitxer idèntic a aquest ([[:$1]]). Hauríeu de comprovar el registre de supressions del fitxer abans de tornar-lo a carregar.",
        "file-deleted-duplicate-notitle": "Un fitxer idèntic a aquest fitxer havia estat suprimit abans, i també el títol. Hauríeu de demanar a algú que pugui veure les dades suprimides del fitxer que revisi la situació abans de procedir a tornar a carregar-lo.",
        "apisandbox-deprecated-parameters": "Paràmetres obsolets",
        "apisandbox-submit-invalid-fields-title": "Alguns camps no són vàlids",
        "apisandbox-results": "Resultats",
+       "apisandbox-sending-request": "S'està enviant una sol·licitud API...",
        "apisandbox-request-url-label": "Sol·licita URL:",
        "apisandbox-request-time": "Temps de sol·licitud: {{PLURAL:$1|$1 ms}}",
        "apisandbox-continue": "Continua",
        "block-log-flags-hiddenname": "nom d'usuari ocult",
        "range_block_disabled": "La facultat dels administradors per a crear bloquejos de rang està desactivada.",
        "ipb_expiry_invalid": "Data d'acabament no vàlida.",
+       "ipb_expiry_old": "El temps de vençuda és en el passat.",
        "ipb_expiry_temp": "Els blocatges amb ocultació de nom d'usuari haurien de ser permanents.",
        "ipb_hide_invalid": "No s'ha pogut eliminar el compte; té més {{PLURAL:$1|d'una edició|de $1 edicions}}.",
        "ipb_already_blocked": "«$1» ja està blocat",
        "pageinfo-category-pages": "Nombre de pàgines",
        "pageinfo-category-subcats": "ombre de subcategories",
        "pageinfo-category-files": "Nombre d'arxius",
+       "pageinfo-user-id": "ID d'usuari",
        "markaspatrolleddiff": "Marca com a supervisat",
        "markaspatrolledtext": "Marca la pàgina com a supervisada",
        "markaspatrolledtext-file": "Marc la versió del fitxer com patrullada",
        "tag-filter": "Filtre d'[[Special:Tags|etiquetes]]:",
        "tag-filter-submit": "Filtra",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Etiqueta|Etiquetes}}]]: $2)",
+       "tag-mw-contentmodelchange": "canvi de model de contingut",
        "tags-title": "Etiquetes",
        "tags-intro": "Aquesta pàgina llista les etiquetes amb què el programari pot marcar una modificació, i el seu significat.",
        "tags-tag": "Nom de l'etiqueta",
        "htmlform-cloner-create": "Afegeix més",
        "htmlform-cloner-delete": "Suprimeix",
        "htmlform-cloner-required": "Cal com a mínim un valor.",
+       "htmlform-time-placeholder": "HH:MM:SS",
        "htmlform-title-badnamespace": "[[:$1]] no es troba en l'espai de noms \"{{ns:$2}}\".",
        "htmlform-title-not-creatable": "\"$1\" és un títol de pàgina no editable",
        "htmlform-title-not-exists": "$1 no existeix.",
        "feedback-thanks": "Gràcies! S'ha publicat la vostra opinió a la pàgina «[$2 $1]».",
        "feedback-thanks-title": "Gràcies!",
        "feedback-useragent": "Agent d'usuari:",
-       "searchsuggest-search": "Cerca",
+       "searchsuggest-search": "Cerca a {{SITENAME}}",
        "searchsuggest-containing": "que conté ...",
+       "api-error-autoblocked": "S'ha blocat la vostra IP automàticament perquè la va utilitzar un usuari blocat.",
        "api-error-badaccess-groups": "No teniu permís per a carregar fitxers en aquest wiki.",
        "api-error-badtoken": "Error intern: argument incorrecte.",
        "api-error-copyuploaddisabled": "Les càrregues via URL estan desactivades en aquest servidor.",
        "log-action-filter-protect-protect": "Protecció",
        "log-action-filter-protect-modify": "Modificació de la protecció",
        "log-action-filter-protect-unprotect": "Desprotecció",
+       "log-action-filter-rights-rights": "Canvi manual",
+       "log-action-filter-rights-autopromote": "Canvi automàtic",
+       "log-action-filter-suppress-event": "Supressió de registres",
+       "log-action-filter-suppress-revision": "Supressió de revisions",
+       "log-action-filter-suppress-delete": "Supressió de pàgines",
        "log-action-filter-upload-upload": "Nova càrrega",
        "log-action-filter-upload-overwrite": "Torna a carregar",
        "authmanager-authn-not-in-progress": "L'autenticació no està en curs o les dades de sessió s'han perdut. Comenceu de nou des del principi.",
        "authmanager-authn-no-primary": "Les dades credencials no s'han pogut autenticar.",
        "authmanager-authn-autocreate-failed": "Ha fallat la creació automàtica d'un compte local: $1",
+       "authmanager-create-disabled": "S'ha inhabilitat la creació de comptes.",
+       "authmanager-create-from-login": "Per crear un compte, ompliu els camps de sota.",
+       "authmanager-authplugin-setpass-bad-domain": "Domini invàlid.",
+       "authmanager-retype-help": "Contrasenya de nou per confirmar",
+       "authmanager-email-label": "Correu electrònic",
+       "authmanager-email-help": "Adreça electrònica",
        "authmanager-realname-label": "Nom real",
        "authmanager-realname-help": "Nom real de l'usuari",
+       "authmanager-provider-password": "Autenticació basada en contrasenya",
+       "authmanager-provider-password-domain": "Autenticació basada en contrasenya i en domini",
        "authmanager-provider-temporarypassword": "Contrasenya temporal",
        "authprovider-resetpass-skip-label": "Omet",
+       "specialpage-securitylevel-not-allowed-title": "No permès",
+       "authpage-cannot-login": "No s'ha pogut iniciar la sessió.",
        "authpage-cannot-login-continue": "No es pot continuar amb l'inicio de sessió. Probablement la vostra sessió ha expirat.",
+       "authpage-cannot-create": "No s'ha pogut iniciar la creació del compte.",
        "authpage-cannot-create-continue": "No es pot prosseguir la creació del compte. Probablement la vostra sessió ha expirat.",
+       "authpage-cannot-link": "No s'ha pogut iniciar l'enllaç del compte.",
+       "cannotauth-not-allowed-title": "S'ha denegat el permís",
+       "cannotauth-not-allowed": "No teniu permisos per utilitzar la pàgina",
        "changecredentials": "Canvi de dades credencials",
        "changecredentials-submit": "Canvia les dades credencials",
        "credentialsform-provider": "Tipus de dades credencials:",
        "credentialsform-account": "Nom del compte:",
+       "cannotlink-no-provider-title": "No hi ha cap compte enllaçable",
+       "cannotlink-no-provider": "No hi ha cap compte enllaçable.",
+       "linkaccounts": "Enllaça els comptes",
+       "linkaccounts-success-text": "S'ha enllaçat el compte.",
        "linkaccounts-submit": "Enllaça els comptes",
        "unlinkaccounts": "Desenllaça els comptes",
        "unlinkaccounts-success": "El compte s'ha desenllaçat.",
-       "authenticationdatachange-ignored": "No s'ha gestionat el canvi de dades d'autenticació. Potser no s'ha configurat cap proveïdor?"
+       "authenticationdatachange-ignored": "No s'ha gestionat el canvi de dades d'autenticació. Potser no s'ha configurat cap proveïdor?",
+       "edit-error-short": "Error: $1",
+       "edit-error-long": "Errors:\n\n$1"
 }
index 1f83b9d..e4ed07f 100644 (file)
        "site-atom-feed": "$1 Atom déng-iŏk",
        "page-rss-feed": "「$1」RSS訂閱",
        "page-atom-feed": "$1 Atom déng-iŏk",
-       "red-link-title": "$1 (mò̤ hī hiĕh)",
+       "red-link-title": "$1 (mò̤ hī hiĕk)",
        "sort-descending": "降序排序",
        "sort-ascending": "升序排序",
        "nstab-main": "Ùng-ciŏng",
index e96da64..695b726 100644 (file)
        "movelogpagetext": "Toto je záznam všech přesunů stránek.",
        "movesubpage": "{{PLURAL:$1|Podstránka|Podstránky}}",
        "movesubpagetext": "Tato stránka má $1 {{PLURAL:$1|podstránku uvedenou|podstránky vypsané|podstránek vypsaných}} níže.",
+       "movesubpagetalktext": "Odpovídající diskusní stránka má {{PLURAL:$1|jednu podstránku, zobrazenou|$1 podstránky, zobrazené|$1 podstránek, zobrazených}} níže.",
        "movenosubpage": "Tato stránka nemá žádné podstránky.",
        "movereason": "Důvod:",
        "revertmove": "vrátit",
        "pageinfo-category-pages": "Počet stránek",
        "pageinfo-category-subcats": "Počet podkategorií",
        "pageinfo-category-files": "Počet souborů",
+       "pageinfo-user-id": "ID uživatele",
        "markaspatrolleddiff": "Označit jako prověřené",
        "markaspatrolledtext": "Označit tuto stránku jako prověřenou",
        "markaspatrolledtext-file": "Označit tuto verzi souboru jako prověřenou",
        "newimages-showbots": "Zobrazit soubory načtené boty",
        "newimages-hidepatrolled": "Skrýt prověřená načtení souborů",
        "noimages": "Není co zobrazit.",
+       "gallery-slideshow-toggle": "Přepnout náhledy",
        "ilsubmit": "Hledat",
        "bydate": "podle data",
        "sp-newimages-showfrom": "Zobrazit nové soubory počínaje od $2, $1",
        "usercssispublic": "Uvědomte si prosím, že podstránky s CSS by neměly obsahovat tajné údaje, protože jsou viditelné ostatním uživatelům.",
        "restrictionsfield-badip": "Neplatná IP adresa nebo rozsah: $1",
        "restrictionsfield-label": "Povolené rozsahy IP adres:",
-       "restrictionsfield-help": "Jedna IP adresa nebo CIDR rozsah na řádek. Všechno povolíte pomocí<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Jedna IP adresa nebo CIDR rozsah na řádek. Všechno povolíte pomocí<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Chyba: $1",
+       "edit-error-long": "Chyby:\n\n$1"
 }
index aca71bb..ceb726e 100644 (file)
@@ -18,7 +18,8 @@
                        "Diafol",
                        "Nemo bis",
                        "Dafyddt",
-                       "Jdforrester"
+                       "Jdforrester",
+                       "Irus"
                ]
        },
        "tog-underline": "Tanlinellu cysylltiadau:",
@@ -36,6 +37,7 @@
        "tog-watchdefault": "Ychwanegu tudalennau a ffeiliau at fy rhestr wylio wrth i mi eu golygu",
        "tog-watchmoves": "Ychwanegu tudalennau a ffeiliau at fy rhestr wylio wrth i mi eu symud",
        "tog-watchdeletion": "Ychwanegu tudalennau a ffeiliau at fy rhestr wylio wrth i mi eu dileu",
+       "tog-watchuploads": "Ychwanegu ffeiliau newydd gan rhestr gwylio",
        "tog-watchrollback": "Ychwanegwch ddalennau dw i wedi perfformio 'rollback' i fy ffefrynnau",
        "tog-minordefault": "Marcio pob golygiad fel un bach yn ddiofyn",
        "tog-previewontop": "Dangos y rhagolwg cyn y blwch golygu",
        "yourpasswordagain": "Ail-deipiwch y cyfrinair:",
        "createacct-yourpasswordagain": "Gwirwch eich cyfrinair",
        "createacct-yourpasswordagain-ph": "Rhowch eich cyfrinair eto",
-       "remembermypassword": "Y porwr hwn i gofio'r manylion mewngofnodi (am hyd at $1 {{PLURAL:$1||diwrnod|ddiwrnod|diwrnod}})",
        "userlogin-remembermypassword": "Cadw'r sesiwn yn fyw tan i mi allgofnodi",
        "userlogin-signwithsecure": "Defnyddio cysylltiad diogel",
+       "cannotcreateaccount-title": "Yn methu creu cyfrif",
        "yourdomainname": "Eich parth:",
        "password-change-forbidden": "Ni allwch newid cyfrineiriau ar y wici hwn.",
        "externaldberror": "Naill ai: cafwyd gwall dilysu allanol ar databas neu: ar y llaw arall efallai nad oes hawl gennych chi i ddiwygio'ch cyfrif allanol.",
        "createacct-reason": "Rheswm",
        "createacct-reason-ph": "Pam ydych yn creu cyfrif arall?",
        "createacct-submit": "Creer y cyfrif",
-       "createacct-another-submit": "Creer y cyfrif ychwanegol",
+       "createacct-another-submit": "Creu cyfrif",
+       "createacct-continue-submit": "Parhau i greu cyfrif",
        "createacct-benefit-heading": "Ffrwyth llafur pobl fel chi yw {{SITENAME}}.",
        "createacct-benefit-body1": "{{PLURAL:$1|golygiad|golygiad|olygiad|golygiad}}",
        "createacct-benefit-body2": "{{PLURAL:$1|tudalen|dudalen|dudalen|tudalen|thudalen|tudalen}}",
        "resetpass_submit": "Gosod y cyfrinair a mewngofnodi",
        "changepassword-success": "Newidiwyd eich cyfrinair!",
        "changepassword-throttled": "Rydych wedi ceisio logio mewn yn rhy aml.\nArhoswch am $1 cyn trio eto.",
+       "botpasswords-label-create": "Dechrau",
+       "botpasswords-label-update": "Diweddaru",
+       "botpasswords-label-cancel": "Canslo",
        "botpasswords-label-delete": "Diddymu neu ddileu",
        "botpasswords-label-resetpassword": "Ailosod y cyfrinair",
        "botpasswords-label-grants": "Nawdd perthnasol:",
+       "botpasswords-label-grants-column": "Ganiataol",
+       "botpasswords-not-exist": "Defnyddiwr \"$1\" nad oes gyfrinair bot enw \"$2\".",
        "resetpass_forbidden": "Ni ellir newid cyfrineiriau",
+       "resetpass_forbidden-reason": "Ni allwn newid cyfrinair: $1",
        "resetpass-no-info": "Ni allwch fynd at y dudalen hon yn uniongyrchol heblaw eich bod wedi mewngofnodi.",
        "resetpass-submit-loggedin": "Newidier y cyfrinair",
        "resetpass-submit-cancel": "Diddymu",
        "passwordreset-emailtext-user": "Gofynodd y defnyddiwr $1 ar {{SITENAME}} am gael ailosod ei gyfrinair ar {{SITENAME}}\n($4). Mae'r {{PLURAL:$3||cyfrif|cyfrifon}} canlynol ynghlwm wrth y cyfeiriad e-bost hwn:\n\n$2\n\nBydd y {{PLURAL:$3||cyfrinair|cyfrineiriau}} dros dro hyn yn dod i ben ymhen {{PLURAL:$5||diwrnod|deuddydd|tridiau|$5 diwrnod}}.\nDylech fewngofnodi nawr a dewis cyfrinair newydd. Os mai rhywun arall a ofynodd am ailosod y cyfrinair, neu os ydych wedi cofio eich cyfrinair gwreiddiol, neu os nad ydych am ei newid bellach, gallwch anwybyddu'r neges hon a pharhau i ddefnyddio eich hen gyfrinair.",
        "passwordreset-emailelement": "Enw'r defnyddiwr: \n$1\n\nY cyfrinair dros dro: \n$2",
        "passwordreset-emailsentemail": "Anfonwyd e-bost i ailosod eich cyfrinair atoch.",
+       "passwordreset-ignored": "Ailosod y cyfrinair nad ymdriniwyd â. Efallai y nid y darparwr yn osod?",
+       "passwordreset-invalideamil": "Cyfeiriad e-bost annilys",
        "changeemail": "Newid y cyfeiriad e-bost",
        "changeemail-header": "Cwbwlhewch y ffurflen hon i newid cyfeiriad e-bost y cyfrifi. I ddileu pob cysylltiad i bob cyfeiriad ebost, gadewch e'n wag.",
        "changeemail-no-info": "Ni allwch fynd at y dudalen hon heblaw eich bod wedi mewngofnodi.",
        "minoredit": "Golygiad bychan yw hwn",
        "watchthis": "Gwylier y dudalen hon",
        "savearticle": "Cadw'r dudalen",
+       "savechanges": "Cadw'r holl newidiadau",
        "publishpage": "Cyhoeddi tudalen",
        "publishchanges": "Cyhoeddi newidiadau",
        "preview": "Rhagolwg",
        "htmlform-cloner-create": "Ychwaneger rhes",
        "htmlform-cloner-delete": "Tynner i ffwrdd",
        "htmlform-cloner-required": "Mae angen o leiaf un peth!",
-       "sqlite-has-fts": "$1 gyda chymorth chwilio yr holl destun",
-       "sqlite-no-fts": "$1 heb gymorth chwiliad yr holl destun",
        "logentry-delete-delete": "Dileodd $1 dudalen $3",
        "logentry-delete-restore": "Adferodd $1 y dudalen $3",
        "logentry-delete-event": "Newidiodd $1 ymddangosiad {{PLURAL:$5||cofnod lòg|$5 gofnod lòg|$5 chofnod lòg|$5 chofnod lòg|$5 cofnod lòg}} ar $3: $4",
index 715f380..b5d2523 100644 (file)
        "grant-basic": "Basisrechte",
        "grant-viewdeleted": "Gelöschte Dateien und Seiten ansehen",
        "grant-viewmywatchlist": "Deine Beobachtungsliste ansehen",
+       "grant-viewrestrictedlogs": "Beschränkte Logbucheinträge ansehen",
        "newuserlogpage": "Neuanmeldungs-Logbuch",
        "newuserlogpagetext": "Dies ist ein Logbuch der neu erstellten Benutzerkonten.",
        "rightslog": "Rechte-Logbuch",
        "movelogpagetext": "Dies ist eine Liste aller verschobenen Seiten.",
        "movesubpage": "{{PLURAL:$1|Unterseite|Unterseiten}}",
        "movesubpagetext": "Diese Seite hat $1 {{PLURAL:$1|Unterseite|Unterseiten}}.",
+       "movesubpagetalktext": "Die dazugehörige Diskussionsseite hat {{PLURAL:$1|eine Unterseite, die unten angezeigt wird|$1 Unterseiten, die unten angezeigt werden}}.",
        "movenosubpage": "Diese Seite hat keine Unterseiten.",
        "movereason": "Grund:",
        "revertmove": "zurück verschieben",
        "pageinfo-category-pages": "Anzahl der Seiten",
        "pageinfo-category-subcats": "Anzahl der Unterkategorien",
        "pageinfo-category-files": "Anzahl der Dateien",
+       "pageinfo-user-id": "Benutzerkennung",
        "markaspatrolleddiff": "Als kontrolliert markieren",
        "markaspatrolledtext": "Diese Seite als kontrolliert markieren",
        "markaspatrolledtext-file": "Diese Dateiversion als kontrolliert markieren",
index 576b292..cd9fd62 100644 (file)
        "specialpage": "Pela xısusiye",
        "personaltools": "Hacetê şexsiy",
        "articlepage": "Pera zerreki bıvin",
-       "talk": "Vacenayış",
+       "talk": "Werênayış",
        "views": "Asayışi",
        "toolbox": "Haceti",
        "tool-link-userrights": "Grubanê {{GENDER:$1|karberi}} bıvırnë",
index f30c038..c759984 100644 (file)
        "grant-basic": "Basic rights",
        "grant-viewdeleted": "View deleted files and pages",
        "grant-viewmywatchlist": "View your watchlist",
+       "grant-viewrestrictedlogs": "View restricted log entries",
        "newuserlogpage": "User creation log",
        "newuserlogpagetext": "This is a log of user creations.",
        "rightslog": "User rights log",
        "pageinfo-category-pages": "Number of pages",
        "pageinfo-category-subcats": "Number of subcategories",
        "pageinfo-category-files": "Number of files",
+       "pageinfo-user-id": "User ID",
        "markaspatrolleddiff": "Mark as patrolled",
        "markaspatrolledlink": "[$1]",
        "markaspatrolledtext": "Mark this page as patrolled",
index ac7e828..52bdc63 100644 (file)
        "invalid-content-data": "Enhavo estas malvalida",
        "content-not-allowed-here": "Enhavo de $1 ne estas permesita en paĝo [[$2]]",
        "editwarning-warning": "Forlaso de ĉi tiu paĝo kaŭzos al vi perdi iun ajn ŝanĝojn kiujn vi faris.\nSe vi estas ensalutinta, vi povas malŝalti ĉi tiun averton en la sekcio \"{{int:prefs-editing}}\" de viaj preferoj.",
+       "editpage-invalidcontentmodel-title": "Enhava modelo ne subtenata",
+       "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.",
        "content-model-wikitext": "vikiteksto",
        "apisandbox-results-fixtoken-fail": "Malsukcese venigis ĵetonon je \"$1\".",
        "apisandbox-alert-page": "Kampoj de ĉi tiu paĝo ne estas validaj.",
        "apisandbox-alert-field": "La valoro de ĉi tiu kampo ne estas valida.",
+       "apisandbox-continue": "Daŭrigi",
+       "apisandbox-continue-clear": "Vakigi",
        "booksources": "Librofontoj",
        "booksources-search-legend": "Serĉi librofontojn",
        "booksources-search": "Serĉi",
        "pageinfo-category-pages": "Nombro de paĝoj",
        "pageinfo-category-subcats": "Nombro de subkategorioj",
        "pageinfo-category-files": "Nombro de dosieroj",
+       "pageinfo-user-id": "Identigilo de uzanto",
        "markaspatrolleddiff": "Marki kiel patrolitan",
        "markaspatrolledtext": "Marki ĉi tiun paĝon patrolita",
        "markaspatrolledtext-file": "Marki ĉi tiu versio de dosiero kiel patrolita",
        "feedback-thanks": "Dankon! Via opinio-esprimo estis afiŝita al la paĝo \"[$2 $1]\".",
        "feedback-thanks-title": "Dankon!",
        "feedback-useragent": "Klienta aplikaĵo:",
-       "searchsuggest-search": "Serĉi",
+       "searchsuggest-search": "Serĉi tra {{SITENAME}}",
        "searchsuggest-containing": "enhavas...",
        "api-error-autoblocked": "Via IPa adreso estis blokita aŭtomate, ĉar ĝi estis uzita far forbara uzanto.",
        "api-error-badaccess-groups": "Vi ne havas permeson alŝuti dosierojn al tiu ĉi vikio.",
        "unlinkaccounts-success": "La konto estis malligita.",
        "authenticationdatachange-ignored": "La ŝanĝo de dateno pri aŭtentikigado ne estis traktita. Eble neniu provizanto estis agorda?",
        "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."
+       "usercssispublic": "Bonvolu noti: subpaĝoj en CSS ne enhavu konfidenciajn datumojn ĉar ili estas videblaj por aliaj uzantoj.",
+       "edit-error-short": "Eraro: $1",
+       "edit-error-long": "Eraroj\n\n$1"
 }
index efd19f3..7393b67 100644 (file)
                        "Copper12",
                        "Ivanhercaz",
                        "AlvaroMolina",
-                       "Tokvo"
+                       "Tokvo",
+                       "Irus",
+                       "Sophivorus"
                ]
        },
        "tog-underline": "Subrayar los enlaces:",
        "eauthentsent": "Se ha enviado un correo electrónico de confirmación a la dirección especificada.\nAntes de que se envíe cualquier otro correo a la cuenta tienes que seguir las instrucciones enviadas en el mensaje para así confirmar que la dirección te pertenece.",
        "throttled-mailpassword": "Ya se ha enviado un recordatorio de contraseña en {{PLURAL:$1|la última hora|las últimas $1 horas}}.\nPara evitar los abusos, solo se enviará un recordatorio de contraseña cada {{PLURAL:$1|hora|$1 horas}}.",
        "mailerror": "Error al enviar el mensaje: $1",
-       "acct_creation_throttle_hit": "Los visitantes a este wiki usando tu dirección IP han creado {{PLURAL:$1|una cuenta|$1 cuentas}} en el último $2, lo cual es lo máximo permitido en este periodo de tiempo.\nComo resultado, los visitantes usando esta dirección IP no pueden crear más cuentas en este momento.",
+       "acct_creation_throttle_hit": "Por medio de tu dirección IP ya {{PLURAL:$1|se ha creado una cuenta|se han creado $1 cuentas}} durante $2, lo cual es lo máximo permitido por este período de tiempo.\nPor este motivo, desde esta dirección IP no se pueden crear más cuentas por el momento.",
        "emailauthenticated": "Tu dirección de correo electrónico fue confirmada el $2 a las $3.",
        "emailnotauthenticated": "Aún no has confirmado tu dirección de correo electrónico.\nHasta que lo hagas, las siguientes funciones no estarán disponibles.",
        "noemailprefs": "Especifica una dirección electrónica para habilitar estas características.",
        "botpasswords-updated-body": "Se actualizó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
        "botpasswords-deleted-title": "Se eliminó la contraseña de bot",
        "botpasswords-deleted-body": "Se eliminó la contraseña del bot llamado \"$1\" del usuario \"$2\".",
-       "botpasswords-newpassword": "La nueva contraseña para iniciar sesión con <strong>$1</strong> es <strong>$2</strong>. <em>Conserva estos datos para usos futuros.</em>",
+       "botpasswords-newpassword": "La contraseña nueva para acceder con <strong>$1</strong> es <strong>$2</strong>. <em>Guarda esta información para su consulta futura.</em> <br> (En caso de robots antiguos que requieren que el nombre de acceso coincida con el de usuario, también puedes utilizar <strong>$3</strong> como nombre de usuario y <strong>$4</strong> como contraseña.)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider no está disponible.",
        "botpasswords-restriction-failed": "Las restricciones de la contraseña de bot impiden este inicio de sesión.",
        "botpasswords-invalid-name": "El nombre de usuario especificado no contiene el separador de contraseña de bot (\"$1\").",
        "passwordreset-emailelement": "Nombre de {{GENDER:$1|usuario|usuaria}}: \n$1\n\nContraseña temporal: \n$2",
        "passwordreset-emailsentemail": "Si esta dirección de correo electrónico está asociada a tu cuenta, entonces se enviará un correo electrónico para restablecer la contraseña.",
        "passwordreset-emailsentusername": "Si existe una dirección de correo electrónico asociada a este nombre de usuario, entonces se enviará un correo para restablecer la contraseña.",
-       "passwordreset-emailsent-capture2": "{{PLURAL:$1|El e-mail de restablecimiento de contraseña ha sido enviado|Los e-mails de restablecimiento de contraseña han sido enviados}}. {{PLURAL:$1|El nombre de usuario y la contraseña se muestra|La lista de nombres de usuarios y contraseñas se muestra}} aquí.",
+       "passwordreset-emailsent-capture2": "{{PLURAL:$1|Se ha enviado el mensaje de restablecimiento de contraseña|Se han enviado los mensajes de restablecimiento de contraseña}}. {{PLURAL:$1|El nombre de usuario y la contraseña|La lista de nombres de usuarios y contraseñas}} se muestra aquí.",
        "passwordreset-emailerror-capture2": "No fue posible mandar un correo electrónico {{GENDER:$2|al usuario|a la usuaria}}: $1 {{PLURAL:$3|El nombre de usuario y la contraseña|La lista de nombres de usuarios y contraseñas}} se muestra aquí.",
        "passwordreset-nocaller": "Debe de proporcionarse un interlocutor",
        "passwordreset-nosuchcaller": "La persona que llama no existe: $1",
        "invalid-content-data": "Datos de contenido incorrectos",
        "content-not-allowed-here": "El contenido «$1» no está permitido en la página [[$2]]",
        "editwarning-warning": "Se perderán los cambios si se cierra esta página.\nSi has iniciado sesión, puedes desactivar este aviso en la sección «{{int:prefs-editing}}» de las preferencias.",
-       "editpage-invalidcontentmodel-title": "Modelo de contenido no soportado",
-       "editpage-invalidcontentmodel-text": "El modelo de contenido \"$1\" no se admite.",
+       "editpage-invalidcontentmodel-title": "Modelo de contenido no admitido",
+       "editpage-invalidcontentmodel-text": "El modelo de contenido «$1» no se admite.",
        "editpage-notsupportedcontentformat-title": "Formato de contenido no compatible",
        "editpage-notsupportedcontentformat-text": "El formato de contenido $1 no es compatible con el modelo de contenido $2.",
        "content-model-wikitext": "texto wiki",
        "enhancedrc-history": "historial",
        "recentchanges": "Cambios recientes",
        "recentchanges-legend": "Opciones sobre cambios recientes",
-       "recentchanges-summary": "Sigue los cambios más recientes de la wiki en esta página.",
+       "recentchanges-summary": "Sigue los cambios más recientes del wiki en esta página.",
        "recentchanges-noresult": "No hubo cambios que respondan a esos criterios durante el período seleccionado.",
        "recentchanges-feed-description": "Realiza un seguimiento de los cambios más recientes en el wiki con este canal.",
        "recentchanges-label-newpage": "Esta edición creó una página",
        "movelogpagetext": "Abajo se encuentra una lista de páginas trasladadas.",
        "movesubpage": "{{PLURAL:$1|Subpágina|Subpáginas}}",
        "movesubpagetext": "Esta página tiene {{PLURAL:$1|la siguiente subpágina|las siguientes $1 subpáginas}}:",
+       "movesubpagetalktext": "La página de discusión tiene $1 {{PLURAL:$1|subpágina que se muestra|subpáginas que se muestran}} a continuación.",
        "movenosubpage": "Esta página no tiene subpáginas.",
        "movereason": "Motivo:",
        "revertmove": "revertir",
        "pageinfo-category-pages": "Número de páginas",
        "pageinfo-category-subcats": "Número de subcategorías",
        "pageinfo-category-files": "Número de archivos",
+       "pageinfo-user-id": "Identificador de usuario",
        "markaspatrolleddiff": "Marcar como verificada",
        "markaspatrolledtext": "Marcar esta página como verificada",
        "markaspatrolledtext-file": "Marcar esta versión de archivo como verificada",
        "feedback-thanks": "¡Gracias! Tus comentarios se han publicado en la página \"[$2 $1]\".",
        "feedback-thanks-title": "¡Muchas gracias!",
        "feedback-useragent": "Agente de usuario:",
-       "searchsuggest-search": "Buscar",
+       "searchsuggest-search": "Buscar en {{SITENAME}}",
        "searchsuggest-containing": "que contiene...",
        "api-error-autoblocked": "Tu dirección IP ha sido bloqueada automáticamente porque fue utilizada por un usuario bloqueado.",
        "api-error-badaccess-groups": "No puedes cargar archivos en este wiki.",
        "authenticationdatachange-ignored": "El cambio den los datos de autentificacion no fue realizado. ¿Tal vez, no se configuró un proveedor?",
        "userjsispublic": "Recuerda: las subpáginas JavaScript no deberían contener datos confidenciales, pues otros usuarios los pueden ver.",
        "usercssispublic": "Recuerda: las subpáginas CSS no deberían contener datos confidenciales, pues otros usuarios los pueden ver.",
-       "restrictionsfield-badip": "Dirección IP o rango inválido: $1",
-       "restrictionsfield-label": "Rangos de IP permitidos:"
+       "restrictionsfield-badip": "Dirección o intervalo IP no válidos: $1",
+       "restrictionsfield-label": "Intervalos de IP permitidos:",
+       "restrictionsfield-help": "Una dirección IP o intervalo de CIDR por renglón. Para activar todo, utiliza<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Error: $1",
+       "edit-error-long": "Errores:\n\n$1"
 }
index b131438..eaa4754 100644 (file)
@@ -28,7 +28,8 @@
                        "Purodha",
                        "Macofe",
                        "Adeliine",
-                       "Metsavend"
+                       "Metsavend",
+                       "Cumbril"
                ]
        },
        "tog-underline": "Linkide allakriipsutus:",
        "right-managechangetags": "Koostada ja (in)aktiveerida [[Special:Tags|märgiseid]]",
        "right-applychangetags": "Rakendada [[Special:Tags|märgiseid]] enda muudatuste suhtes",
        "right-changetags": "Lisada ja eemaldada käsitsi rakendatavaid [[Special:Tags|märgiseid]] üksikute redaktsioonide ja logisissekannete juures",
+       "right-deletechangetags": "Kustutada andmebaasist [[Special:Tags|märgiseid]]",
        "grant-group-page-interaction": "Interaktsioon lehekülgedega",
        "grant-group-file-interaction": "Interaktsioon meediafailidega",
        "grant-group-watchlist-interaction": "Interaktsioon sinu jälgimisloendiga",
        "undeletehistorynoadmin": "See lehekülg on kustutatud.\nKustutamise põhjus ning selle lehekülje kustutamiseelne redigeerimislugu on näha allolevas kokkuvõttes.\nLehekülje kustutamiseelsed redaktsioonid on kättesaadavad ainult administraatoritele.",
        "undelete-revision": "Lehekülje $1 kustutatud redaktsioon, mille autor on $3, seisuga $4, kell $5.",
        "undeleterevision-missing": "Vigane või puuduv redaktsioon.\nLink võib olla kõlbmatu või redaktsioon võib olla taastatud või arhiivist eemaldatud.",
+       "undeleterevision-duplicate-revid": "{{PLURAL:$1|Üht|$1}} redaktsiooni ei saanud taastada, sest {{PLURAL:$1|selle|nende}} <code>rev_id</code> oli juba kasutuses.",
        "undelete-nodiff": "Varasemat redaktsiooni ei leidunud.",
        "undeletebtn": "Taasta",
        "undeletelink": "vaata/taasta",
        "ipb-unblock": "Kasutaja või IP-aadressi vabastamine blokeerimisest",
        "ipb-blocklist": "Vaata kehtivaid blokeeringuid",
        "ipb-blocklist-contribs": "Kasutaja $1 kaastöö",
+       "ipb-blocklist-duration-left": "$1 järel",
        "unblockip": "Blokeerimise eemaldamine",
        "unblockiptext": "Kasuta allpool olevat vormi varem blokeeritud IP-aadressi või kasutaja redigeerimisõiguse taastamiseks.",
        "ipusubmit": "Eemalda see blokeering",
        "block-log-flags-hiddenname": "kasutajanimi peidetud",
        "range_block_disabled": "Administraatori õigus blokeerida IP-aadresside vahemik on ära võetud.",
        "ipb_expiry_invalid": "Vigane aegumise tähtaeg.",
+       "ipb_expiry_old": "Aegumistähtaeg on minevikus.",
        "ipb_expiry_temp": "Peidetud kasutajanime blokeeringud peavad olema alalised.",
        "ipb_hide_invalid": "Seda kontot ei saa varjata, sest sellega on tehtud üle {{PLURAL:$1|ühe|$1}} muudatuse.",
        "ipb_already_blocked": "\"$1\" on juba blokeeritud.",
        "pageinfo-category-files": "Faile",
        "markaspatrolleddiff": "Märgi kontrollituks",
        "markaspatrolledtext": "Märgi see leht kontrollituks",
+       "markaspatrolledtext-file": "Märgi see failiversioon kontrollituks",
        "markedaspatrolled": "Kontrollituks märgitud",
        "markedaspatrolledtext": "Valitud redaktsioon leheküljel [[:$1]] on kontrollituks märgitud.",
        "rcpatroldisabled": "Viimaste muudatuste kontroll ei toimi",
        "confirm-watch-top": "Kas lisad selle lehekülje oma jälgimisloendisse?",
        "confirm-unwatch-button": "Sobib",
        "confirm-unwatch-top": "Kas eemaldad selle lehekülje oma jälgimisloendist?",
+       "confirm-rollback-button": "Sobib",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← eelmine lehekülg",
        "imgmultipagenext": "järgmine lehekülg →",
        "tag-filter": "[[Special:Tags|Märgisefilter]]:",
        "tag-filter-submit": "Filtri",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Märgis|Märgised}}]]: $2)",
+       "tag-mw-contentmodelchange": "sisumudeli muudatus",
+       "tag-mw-contentmodelchange-description": "Lehekülje [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel sisumudelit muutvad] redaktsioonid",
        "tags-title": "Märgised",
        "tags-intro": "See lehekülg loetleb märgised, millega tarkvara võib muudatused märgistada, ja nende kirjeldused.",
        "tags-tag": "Märgise nimi",
        "removecredentials-success": "Sinu autentimisandmed on eemaldatud.",
        "credentialsform-provider": "Andmete tüüp:",
        "credentialsform-account": "Konto nimi:",
-       "userjsispublic": "Pea silmas, et JavaScripti alamleheküljed ei tohiks sisaldada konfidentsiaalseid andmeid, kuna neid näevad teised kasutajad."
+       "userjsispublic": "Pea silmas, et JavaScripti alamleheküljed ei tohiks sisaldada konfidentsiaalseid andmeid, kuna neid näevad teised kasutajad.",
+       "restrictionsfield-badip": "Vigane IP-aadress või -aadressivahemik: $1",
+       "restrictionsfield-label": "Lubatud IP-aadressivahemikud:",
+       "restrictionsfield-help": "Üks IP-aadress või CIDR-vahemik rea kohta. Et lubada kõik, kasuta süntaksit <br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Tõrge: $1",
+       "edit-error-long": "Tõrked:\n\n$1"
 }
index e2feef4..c435b73 100644 (file)
        "blocklist-userblocks": "پنهان کردن بسته‌شدن‌های حساب",
        "blocklist-tempblocks": "پنهان کردن بستن‌های موقت",
        "blocklist-addressblocks": "پنهان کردن تک آی‌پی‌های بسته شده",
-       "blocklist-rangeblocks": "پنهان کردنی قطع دسترسی بازه‌ها",
+       "blocklist-rangeblocks": "پنهان کردن قطع دسترسی بازه‌ها",
        "blocklist-timestamp": "برچسب زمان",
        "blocklist-target": "هدف",
        "blocklist-expiry": "زمان سرآمدن",
index 9720a86..2053b44 100644 (file)
        "right-changetags": "Lisätä ja poistaa satunnaisia [[Special:Tags|merkkauksia]] yksittäisissä sivuversioissa tai lokimerkinnöissä",
        "right-deletechangetags": "Poistaa [[Special:Tags|merkkauksia]] tietokannasta",
        "grant-generic": "\"$1\" oikeuksien joukko",
-       "grant-group-page-interaction": "Ole vuorovaikutuksessa sivujen kanssa",
-       "grant-group-file-interaction": "Ole vuorovaikutuksessa mediatiedostojen kanssa",
-       "grant-group-watchlist-interaction": "Ole vuorovaikutuksessa oman tarkkailulistasi kanssa",
+       "grant-group-page-interaction": "Käsitellä sivuja",
+       "grant-group-file-interaction": "Käsitellä mediatiedostoja",
+       "grant-group-watchlist-interaction": "Käsitellä tarkkailulistaasi",
        "grant-group-email": "Lähettää sähköpostia",
        "grant-group-high-volume": "Suorittaa suuri määrä toimintoja",
        "grant-group-customization": "Mukauttaminen ja asetukset",
        "grant-editinterface": "Muokata järjestelmäviesti-nimiavaruutta ja käyttäjien CSS/JavaScript-sivuja",
        "grant-editmycssjs": "Muokata käyttäjän omia CSS/JavaScript-sivuja",
        "grant-editmyoptions": "Muokata käyttäjän omia asetuksia",
-       "grant-editmywatchlist": "Muokata omaa tarkkailulistaa",
+       "grant-editmywatchlist": "Muokata tarkkailulistaasi",
        "grant-editpage": "Muokata olemassa olevia sivuja",
        "grant-editprotected": "Muokata suojattuja sivuja",
        "grant-highvolume": "Suorittaa paljon muokkauksia",
        "grant-oversight": "Piilottaa käyttäjiä ja häivyttää yksittäisiä versioita",
        "grant-patrol": "Partioida sivuihin tehtyjä muutoksia",
        "grant-protect": "Suojata sivuja tai poistaa suojauksia",
-       "grant-rollback": "Peräyttää sivuun tehdyt muutokset",
+       "grant-rollback": "Palauttaa sivuun tehtyjä muutoksia",
        "grant-sendemail": "Lähettää sähköpostia toisille käyttäjille",
        "grant-uploadeditmovefile": "Tallentaa, korvata ja siirtää tiedostoja",
        "grant-uploadfile": "Tallentaa uusia tiedostoja",
        "version-libraries-license": "Lisenssi",
        "version-libraries-description": "Kuvaus",
        "version-libraries-authors": "Tekijät",
-       "redirect": "Ohjaus tiedoston, käyttäjän, sivun, sivuversion tai lokin tunnistenumeron mukaan",
+       "redirect": "Ohjaus kohteen tunnistenumeron mukaan",
        "redirect-summary": "Tämä toimintosivu ohjaa tiedostoon (tiedostonimen mukaan), sivulle (version tunnistenumeron tai sivun tunnistenumeron mukaan), käyttäjäsivulle (käyttäjän tunnistenumeron mukaan) taikka lokimerkintään (lokin tunnistenumeron mukaan). Käytetään seuraavasti: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]],[[{{#Special:Redirect}}/user/101]] tai [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Siirry",
        "redirect-lookup": "Hae:",
        "redirect-value": "Arvo:",
        "redirect-user": "Käyttäjän tunnistenumero",
        "redirect-page": "Sivun tunnistenumero",
-       "redirect-revision": "Sivun versio",
+       "redirect-revision": "Sivun versionumero",
        "redirect-file": "Tiedostonimi",
        "redirect-logid": "Lokin tunnistenumero",
        "redirect-not-exists": "Arvoa ei löytynyt",
        "feedback-thanks": "Kiitos. Palautteesi on jätetty sivulle [$2 $1].",
        "feedback-thanks-title": "Kiitos!",
        "feedback-useragent": "User agent:",
-       "searchsuggest-search": "Hae",
+       "searchsuggest-search": "Hae {{SITENAME}}",
        "searchsuggest-containing": "sisältää...",
        "api-error-autoblocked": "Sinun IP-osoitteesi on estetty automaattisesti, koska sitä on käyttänyt estetty käyttäjätunnus.",
        "api-error-badaccess-groups": "Sinulla ei ole oikeutta tallentaa tiedostoja tähän wikiin.",
        "unlinkaccounts-success": "Tunnuksen linkitys poistettiin.",
        "authenticationdatachange-ignored": "Varmennustietojen muutosta ei käsitelty. Ehkä palveluntarjoajaa ei määritelty?",
        "restrictionsfield-badip": "Virheellinen IP-osoite tai alue: $1",
-       "restrictionsfield-label": "Sallitut IP-alueet:"
+       "restrictionsfield-label": "Sallitut IP-alueet:",
+       "edit-error-short": "$1",
+       "edit-error-long": "Virheet:\n\n$1"
 }
index b60e9d1..8a788a2 100644 (file)
        "passwordreset-capture-help": "Si vous cochez cette case, le courriel (avec le mot de passe temporaire) vous sera affiché en même temps qu’il sera envoyé à l’utilisateur.",
        "passwordreset-email": "Adresse de courriel :",
        "passwordreset-emailtitle": "Détails du compte sur {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Quelqu’un (probablement vous, depuis l’adresse IP $1) a demandé un réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. \nVous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou que vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
+       "passwordreset-emailtext-ip": "Quelqu’un (probablement vous, depuis l’adresse IP $1) a demandé une réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. \nVous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou si vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
        "passwordreset-emailtext-user": "L’utilisateur $1 sur {{SITENAME}} a demandé une réinitialisation de votre mot de passe pour {{SITENAME}} ($4). {{PLURAL:$3|Le compte utilisateur suivant est associé|Les comptes utilisateurs suivants sont associés}} à cette adresse de courriel :\n\n$2\n\n{{PLURAL:$3|Ce mot de passe temporaire expirera|Ces mots de passe temporaires expireront}} dans {{PLURAL:$5|un jour|$5 jours}}. \nVous devez maintenant vous connecter et choisir un nouveau mot de passe. Si cette demande ne provient pas de vous, ou si vous avez retrouvé votre mot de passe initial, et ne souhaitez plus le modifier, vous pouvez ignorer ce message et continuer à utiliser votre ancien mot de passe.",
        "passwordreset-emailelement": "Nom d’utilisateur : \n$1\n\nMot de passe temporaire : \n$2",
        "passwordreset-emailsentemail": "Si cette adresse de courriel est associée à votre compte, alors un courriel de réinitialisation de mot de passe sera envoyé.",
        "grant-basic": "Droits de base",
        "grant-viewdeleted": "Afficher les fichiers et pages supprimés",
        "grant-viewmywatchlist": "Afficher votre liste de suivi",
+       "grant-viewrestrictedlogs": "Afficher les entrées de journal confidentielles",
        "newuserlogpage": "Journal des créations de comptes utilisateur",
        "newuserlogpagetext": "Cette page affiche l’historique des créations de comptes utilisateur.",
        "rightslog": "Journal des modifications de droits d’utilisateurs",
        "movelogpagetext": "Voici la liste de toutes les pages renommées ou déplacées.",
        "movesubpage": "Sous-page{{PLURAL:$1||s}}",
        "movesubpagetext": "Cette page a $1 {{PLURAL:$1|sous-page affichée|sous-pages affichées}} ci-dessous.",
+       "movesubpagetalktext": "La page de discussion correspodnante a $1 {{PLURAL:$1|sous-page|sous-pages}} affichées ci-dessous.",
        "movenosubpage": "Cette page n'a aucune sous-page.",
        "movereason": "Motif :",
        "revertmove": "rétablir",
        "pageinfo-category-pages": "Nombre de pages",
        "pageinfo-category-subcats": "Nombre de sous-catégories",
        "pageinfo-category-files": "Nombre de fichiers",
+       "pageinfo-user-id": "ID de l’utilisateur",
        "markaspatrolleddiff": "Marquer comme relue",
        "markaspatrolledtext": "Marquer cette page comme relue",
        "markaspatrolledtext-file": "Marquer cette version de fichier comme relue",
        "tags-edit-failure": "Les modifications n’ont pas pu être appliquées :\n$1",
        "tags-edit-nooldid-title": "Version cible non valide",
        "tags-edit-nooldid-text": "Vous n’avez soit pas spécifié de version cible sur laquelle exécuter cette fonction, soit la version spécifiée n’existe pas.",
-       "tags-edit-none-selected": "Veuillez sélectionner au moins une balise à ajouter ou enlever.",
+       "tags-edit-none-selected": "Veuillez sélectionner au moins une balise à ajouter ou à enlever.",
        "comparepages": "Comparer des pages",
        "compare-page1": "Page 1",
        "compare-page2": "Page 2",
        "api-error-unclassified": "Une erreur inconnue s'est produite",
        "api-error-unknown-code": "Erreur inconnue : « $1 »",
        "api-error-unknown-error": "Erreur interne : Quelque chose a mal tourné lors du versement de votre fichier.",
-       "api-error-unknown-warning": "Avertissement inconnu : $1",
+       "api-error-unknown-warning": "Avertissement inconnu : « $1 ».",
        "api-error-unknownerror": "Erreur inconnue : « $1 ».",
        "api-error-uploaddisabled": "Le téléversement est désactivé sur ce wiki.",
-       "api-error-verification-error": "Ce fichier peut être corrompu, ou son extension est incorrecte.",
+       "api-error-verification-error": "Ce fichier est peut-être corrompu, ou son extension est incorrecte.",
        "api-error-was-deleted": "Un fichier portant ce nom a déjà été importé puis supprimé.",
        "duration-seconds": "$1 seconde{{PLURAL:$1||s}}",
        "duration-minutes": "$1 minute{{PLURAL:$1||s}}",
        "json-error-state-mismatch": "JSON non valide ou mal formé",
        "json-error-ctrl-char": "Erreur de caractères de contrôle, peut-être mal encodé",
        "json-error-syntax": "Erreur de syntaxe",
-       "json-error-utf8": "Caractères UTF-8 mal formés, peut-être mal encodé",
+       "json-error-utf8": "Caractères UTF-8 mal formés, peut-être mal encodés",
        "json-error-recursion": "Une ou plusieurs références récursives dans la valeur à encoder",
        "json-error-inf-or-nan": "Une une plusieurs valeurs NaN ou INF dans la valeur à encoder",
        "json-error-unsupported-type": "Une valeur a été donnée dans un type ne pouvant pas être encodé",
        "mw-widgets-dateinput-placeholder-month": "AAAA-MM",
        "mw-widgets-titleinput-description-new-page": "la page n’existe pas encore",
        "mw-widgets-titleinput-description-redirect": "redirection vers $1",
-       "sessionmanager-tie": "Impossible de combiner les demandes multiples de types d’authentification : $1.",
+       "sessionmanager-tie": "Impossible de combiner des types multiples de demandes d’authentification : $1.",
        "sessionprovider-generic": "sessions $1",
        "sessionprovider-mediawiki-session-cookiesessionprovider": "sessions basées sur les cookies",
-       "sessionprovider-nocookies": "Les cookies peuvent être désactivés. Assurez-vous que vous avez activé les cookies et recommencez.",
+       "sessionprovider-nocookies": "Il est possible que les cookies soient désactivés. Assurez-vous que vous avez activé les cookies et recommencez.",
        "randomrootpage": "Page racine aléatoire",
        "log-action-filter-block": "Type de blocage :",
        "log-action-filter-contentmodel": "Type de modification de modèle de contenu :",
        "usercssispublic": "Veuillez noter: les sous-pages CSS ne doivent pas contenir de données confidentielles parce qu'elles sont visibles des autres utilisateurs.",
        "restrictionsfield-badip": "Adresse IP ou plage non valide : $1",
        "restrictionsfield-label": "Plages IP autorisées :",
-       "restrictionsfield-help": "Une adresse IP ou une plage CIDR par ligne. Pour tout activer, utiliser <br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Une adresse IP ou une plage CIDR par ligne. Pour tout activer, utiliser <br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Erreur : $1",
+       "edit-error-long": "Erreurs :\n\n$1"
 }
index 2765143..25c12fd 100644 (file)
        "yourpasswordagain": "Athiontráil d'fhocal faire",
        "createacct-yourpasswordagain": "Deimhnigh an pasfhocal",
        "createacct-yourpasswordagain-ph": "Iontráil an pasfhocal arís",
-       "remembermypassword": "Cuimhnigh ar m'fhocal faire ar an ríomhaire seo (ar feadh uastréimhse de $1 {{PLURAL:$1|lá|lá}})",
        "userlogin-remembermypassword": "Coinnigh logáilte isteach mé",
        "yourdomainname": "D'fhearann",
        "externaldberror": "Bhí earráid bhunachair sonraí ann maidir le fíordheimhniú seachtrach, nóThere was either an external authentication database error or you are not allowed to update your external account.",
        "createacct-reason": "Cúis",
        "createacct-submit": "Cruthaigh do chuntas",
        "createacct-another-submit": "Cruthaigh cuntas eile",
+       "createacct-benefit-heading": "Daoine cosúil leatsa a dhéanann {{SITENAME}}.",
        "badretype": "D'iontráil tú dhá fhocal faire difriúla.",
        "userexists": "Tá an ainm úsáideora sin in úsáid cheana féin.<br />\nRoghnaigh ainm eile agus bain triail eile as.",
        "loginerror": "Earráid leis an logáil isteach",
        "mergehistory-reason": "Fáth:",
        "revertmerge": "Díchumaisc",
        "history-title": "Stair leasú \"$1\"",
+       "difference-title": "An difríocht idir athruithe ar: \"$1\"",
        "lineno": "Líne $1:",
        "compareselectedversions": "Cuir na leagain roghnaithe i gcomparáid",
        "editundo": "cealaigh",
        "anoncontribs": "Dréachtaí",
        "contribsub2": "Do $1 ($2)",
        "nocontribs": "Ní bhfuarthas aon athrú a bhí cosúil le na crítéir seo.",
-       "uctop": " (barr)",
+       "uctop": "(reatha)",
        "month": "Ón mhí seo (agus níos luaithe):",
        "year": "Ón bhliain seo (agus níos luaithe):",
        "sp-contributions-newbies": "Taispeáin dréachtaí ó chuntais nua amháin",
        "sp-contributions-newbies-sub": "Le cuntais nua",
        "sp-contributions-newbies-title": "Dréachtaí úsáideora do chuntasaí nua",
        "sp-contributions-blocklog": "Log coisc",
-       "sp-contributions-deleted": "dréachtaí úsáideora scriosta",
+       "sp-contributions-deleted": "dréachtaí {{GENDER:$1|úsáideora}} scriosta",
        "sp-contributions-uploads": "uaslódálacha",
        "sp-contributions-logs": "logaí",
        "sp-contributions-talk": "plé",
        "whatlinkshere-prev": "{{PLURAL:$1|roimhe|$1 roimhe}}",
        "whatlinkshere-next": "{{PLURAL:$1|ar aghaidh|$1 ar aghaidh}}",
        "whatlinkshere-links": "← naisc",
-       "whatlinkshere-hideredirs": "$1 athsheolaidh",
+       "whatlinkshere-hideredirs": "$1 an t-athsheoladh",
        "whatlinkshere-hidetrans": "$1 trasiamh",
        "whatlinkshere-hidelinks": "$1 nasc",
        "whatlinkshere-hideimages": "$1 naisc comhad",
        "movepagetalktext": "Aistreofar an leathanach plé go huathoibríoch '''ach ní tharlófar sin''':\n* má tá leathanach plé neamhfholamh ann cheana leis an teideal nua, nó\n* má bhaineann tú an tic den bhosca thíos.\n\nSna cásanna sin, caithfidh tú an leathanach a aistrigh nó a chumasc tú féin más maith leat.",
        "movenologintext": "Ní mór duit bheith i d'úsáideoir cláraithe agus [[Special:UserLogin|logáilte isteach]] chun leathanach a hathainmniú.",
        "movenotallowed": "Níl cead agat leathanaigh a athainmniú.",
-       "newtitle": "Go teideal nua",
+       "newtitle": "Teideal nua:",
        "move-watch": "Déan faire an leathanach seo",
        "movepagebtn": "Athainmnigh an leathanach",
        "pagemovedsub": "D'éirigh leis an athainmniú",
        "movelogpagetext": "Liosta is ea seo thíos de leathanaigh athainmnithe.",
        "movereason": "Fáth:",
        "revertmove": "athúsáid",
-       "delete_and_move_text": "==Tá scriosadh riachtanach==\nTá an leathanach sprice (\"[[:$1]]\") ann cheana féin.\nAr mhaith leat é a scriosadh chun áit a dhéanamh don athainmniú?",
+       "delete_and_move_text": "Tá an leathanach sprice (\"[[:$1]]\") ann cheana féin.\nAr mhaith leat é a scriosadh chun áit a dhéanamh don bhogadh?",
        "delete_and_move_confirm": "Tá, scrios an leathanach",
-       "delete_and_move_reason": "Scriosta chun áit a dhéanamh d'athainmniú",
+       "delete_and_move_reason": "Scriosta chun áit a dhéanamh do bhogadh ó [[$1]]",
        "selfmove": "Tá an ainm céanna ag an bhfoinse mar atá ar an ainm sprice; ní féidir leathanach a athainmniú bheith é féin.",
        "export": "Easportáil leathanaigh",
        "exporttext": "Is féidir an téacs agus an stair athraithe de leathanach áirithe nó sraith leathanach a easpórtáil, fillte i bpíosa XML.\nIs féidir é seo a iompórtáil i vicí eile MediaWiki trí úsáid an [[Special:Import|leathanach iompórtála]].\n\nChun leathanaigh a easpórtáil, cuir isteach na teidil sa bhosca thíos, gach teideal ar a líne féin, agus roghnaigh an leagan reatha in éineacht leis na sean-leaganacha agus stair an leathanaigh, nó an leagan reatha in éineacht le faisnéis faoin athrú deireanach.\n\nSa dara cás, is féidir leat nasc a úsáid, mar shampla [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] le haghaidh an leathanaigh \"[[{{MediaWiki:Mainpage}}]]\".",
        "filemissing": "Comhad ar iarraidh",
        "thumbnail_error": "Earráid agus mionsamhail a chruthú: $1",
        "import": "Iompórtáil leathanaigh",
-       "importinterwiki": "Iompórtáil trasna vicithe",
+       "importinterwiki": "Iompórtáil ó vicí eile",
        "import-interwiki-submit": "iompórtáil",
        "import-comment": "Nóta tráchta:",
-       "importtext": "Easportáil an comhad ón vici-fhoinse (le húsáid na [[Special:Export|tréithe easportáil]]), sábháil ar do dhíosca é agus uaslódáil anseo é.",
+       "importtext": "Easpórtáil an comhad ón vicí-fhoinse tríd an[[Special:Export|uirlis easpórtála]] a úsáid. Sábháil ar do ríomhaire é agus uaslódáil anseo é.",
        "import-revision-count": "{{PLURAL:$1|Leagan amháin|$1 leagain}}",
        "importnopages": "Níl aon leathanaigh chun iompórtáil",
        "importfailed": "Theip ar an iompórtáil: $1",
        "exif-orientation-3": "Rothlaithe trí 180°",
        "exif-orientation-4": "Iompaithe go hingearach",
        "exif-orientation-5": "Rothlaithe trí 90° CCW agus iompaithe go hingearach",
-       "exif-orientation-6": "Rothlaithe trí 90° CW",
+       "exif-orientation-6": "Rothlaithe trí 90° tuathalach",
        "exif-orientation-7": "Rothlaithe trí 90° CW agus iompaithe go hingearach",
-       "exif-orientation-8": "Rothlaithe trí 90° CCW",
+       "exif-orientation-8": "Rothlaithe trí 90° deiseal",
        "exif-planarconfiguration-1": "Formáid shmutánach",
        "exif-planarconfiguration-2": "Formáid phlánach",
        "exif-componentsconfiguration-0": "níl a leithéid ann",
        "watchlisttools-view": "Féach ar na hathruithe ábhartha",
        "watchlisttools-edit": "Féach ar do liosta faire ná cuir in eagar é",
        "watchlisttools-raw": "Cuir do amhliosta faire in eagar",
+       "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|plé]])",
        "version": "Leagan",
        "version-other": "Eile",
        "version-version": "($1)",
-       "version-license": "Ceadúnas",
+       "version-license": "Ceadúnas MediaWiki",
        "version-software": "Bogearraí suiteáilte",
        "version-software-version": "Leagan",
        "version-entrypoints-header-url": "URL",
        "fileduplicatesearch-info": "$1 × $2 picteillín<br />Méid comhad: $3<br />Saghas MIME: $4",
        "specialpages": "Leathanaigh speisialta",
        "specialpages-group-other": "Leathanaigh speisialta eile",
-       "specialpages-group-login": "Logáil isteach / cruthaigh cuntas",
+       "specialpages-group-login": "Logáil isteach / Cuntas a chruthú",
        "specialpages-group-changes": "Athruithe is déanaí agus logaí",
        "specialpages-group-users": "Úsáideoirí agus cearta",
        "specialpages-group-pages": "Liostaí leathanaigh",
        "specialpages-group-pagetools": "Uirslí leathanach",
-       "specialpages-group-wiki": "Sonraí vicí agus uirslí",
+       "specialpages-group-wiki": "Sonraí agus uirlisí",
        "specialpages-group-spam": "Uirlisí turscar",
        "blankpage": "Leathanach bán",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|chlib amháin|clib}}]]: $2)",
        "logentry-move-move": "{{GENDER:$2|Bhog}} $1 an leathanach $3 go $4",
        "feedback-cancel": "Cealaigh",
        "feedback-message": "Teachtaireacht:",
-       "searchsuggest-search": "Cuardaigh",
+       "searchsuggest-search": "Cuardaigh {{SITENAME}}",
        "expand_templates_remove_comments": "Scrios nótaí tráchta",
        "expand_templates_preview": "Réamhamharc"
 }
index dffca46..5d7db72 100644 (file)
        "userrights-groupsmember-auto": "Membro implícito de:",
        "userrights-groups-help": "Pode cambiar os grupos aos que {{GENDER:$1|o usuario|a usuaria}} pertence:\n* Se a caixa ten un sinal (✓) significa que {{GENDER:$1|o usuario|a usuaria}} pertence a ese grupo.\n* Se, pola contra, non o ten, significa que non pertence.\n* Un asterisco (*) indica que non pode eliminar o grupo unha vez que o engadiu, e viceversa.",
        "userrights-reason": "Motivo:",
-       "userrights-no-interwiki": "Non dispón de permiso para editar dereitos de usuarios noutros wikis.",
-       "userrights-nodatabase": "A base de datos $1 non existe ou non é local.",
+       "userrights-no-interwiki": "Non ten os permisos necesarios para editar os dereitos de usuario noutros wikis.",
+       "userrights-nodatabase": "A base de datos \"$1\" non existe ou non é local.",
        "userrights-nologin": "Debe [[Special:UserLogin|acceder ao sistema]] cunta conta de administrador para asignar dereitos de usuario.",
        "userrights-notallowed": "Non dispón dos permisos necesarios para asignar ou retirar dereitos de usuario.",
        "userrights-changeable-col": "Os grupos que pode cambiar",
        "right-autoconfirmed": "Non ser afectado polos límites de frecuencia ligados aos enderezos IP",
        "right-bot": "Ser tratado coma un proceso automatizado",
        "right-nominornewtalk": "As edicións pequenas nas páxinas de conversa non lanzan o aviso de mensaxes novas",
-       "right-apihighlimits": "Usar os límites superiores nas peticións API",
+       "right-apihighlimits": "Usar os límites superiores nas peticións á API",
        "right-writeapi": "Usar a API para modificar o wiki",
        "right-delete": "Borrar páxinas",
        "right-bigdelete": "Borrar páxinas con historiais grandes",
        "right-protect": "Cambiar os niveis de protección e editar páxinas protexidas coa opción \"protección en serie\"",
        "right-editprotected": "Editar páxinas protexidas con \"{{int:protect-level-sysop}}\"",
        "right-editsemiprotected": "Editar páxinas protexidas con \"{{int:protect-level-autoconfirmed}}\"",
-       "right-editcontentmodel": "Editar o modelo de contido dunha páxina.",
+       "right-editcontentmodel": "Editar o modelo de contido dunha páxina",
        "right-editinterface": "Editar a interface de usuario",
        "right-editusercssjs": "Editar os ficheiros CSS e JavaScript doutros usuarios",
        "right-editusercss": "Editar os ficheiros CSS doutros usuarios",
        "right-patrol": "Marcar edicións como patrulladas",
        "right-autopatrol": "Ter as edicións marcadas automaticamente como patrulladas",
        "right-patrolmarks": "Ver os cambios que están marcados coma patrullados",
-       "right-unwatchedpages": "Ver unha lista de páxinas que non están vixiadas",
+       "right-unwatchedpages": "Ver unha lista das páxinas que non están vixiadas",
        "right-mergehistory": "Fusionar o historial das páxinas",
        "right-userrights": "Editar todos os dereitos de usuario",
        "right-userrights-interwiki": "Editar os dereitos de usuario dos usuarios doutros wikis",
        "right-override-export-depth": "Exportar páxinas incluíndo as páxinas ligadas ata unha profundidade de 5",
        "right-sendemail": "Enviar correos electrónicos a outros usuarios",
        "right-passwordreset": "Ver os correos electrónicos de restablecemento de contrasinais",
-       "right-managechangetags": "Crear e (des)activar [[Special:Tags|tags]]",
-       "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] xunto cos cambios propios",
+       "right-managechangetags": "Crear e (des)activar [[Special:Tags|etiquetas]]",
+       "right-applychangetags": "Aplicar [[Special:Tags|etiquetas]] xunto coas modificacións propias",
        "right-changetags": "Engadir e quitar [[Special:Tags|etiquetas]] arbitrarias a revisións individuais e entradas do rexistro",
-       "right-deletechangetags": "Suprimir as [[Special:Tags|etiquetas]] da base de datos",
-       "grant-generic": "conxunto de dereitos \"$1\"",
+       "right-deletechangetags": "Suprimir [[Special:Tags|etiquetas]] da base de datos",
+       "grant-generic": "Conxunto de dereitos \"$1\"",
        "grant-group-page-interaction": "Interactuar con páxinas",
        "grant-group-file-interaction": "Interactuar con ficheiros multimedia",
        "grant-group-watchlist-interaction": "Interactuar coa súa lista de vixilancia",
        "grant-group-high-volume": "Realizar actividades de alto volume",
        "grant-group-customization": "Personalización e preferencias",
        "grant-group-administration": "Realizar accións administrativas",
-       "grant-group-private-information": "Acceder a datos privados sobre ti",
+       "grant-group-private-information": "Acceder a datos privados sobre vostede",
        "grant-group-other": "Outras actividades",
        "grant-blockusers": "Bloquear e desbloquear usuarios",
        "grant-createaccount": "Crear contas",
        "grant-protect": "Protexer e desprotexer páxinas",
        "grant-rollback": "Reverter os cambios feitos nas páxinas",
        "grant-sendemail": "Enviar correos electrónicos a outros usuarios",
-       "grant-uploadeditmovefile": "Cargar, substituír e mover ficheiros",
-       "grant-uploadfile": "Cargar ficheiros novos",
+       "grant-uploadeditmovefile": "Subir, substituír e mover ficheiros",
+       "grant-uploadfile": "Subir ficheiros novos",
        "grant-basic": "Dereitos básicos",
-       "grant-viewdeleted": "Ver ficheiros e páxinas eliminadas",
+       "grant-viewdeleted": "Ver ficheiros e páxinas eliminados",
        "grant-viewmywatchlist": "Ver a súa lista de vixilancia",
+       "grant-viewrestrictedlogs": "Ver as entradas de rexistro confidenciais",
        "newuserlogpage": "Rexistro de creación de usuarios",
        "newuserlogpagetext": "Este é un rexistro de creación de contas de usuario.",
        "rightslog": "Rexistro de dereitos de usuario",
        "action-editmyprivateinfo": "editar a súa información privada",
        "action-editcontentmodel": "editar o modelo de contido dunha páxina",
        "action-managechangetags": "crear e (des)activar etiquetas",
-       "action-applychangetags": "aplicar etiquetas xunto cos cambios",
+       "action-applychangetags": "aplicar etiquetas xunto coas súas modificacións",
        "action-changetags": "engadir e quitar etiquetas arbitrarias a revisións individuais e entradas do rexistro",
        "action-deletechangetags": "borrar etiquetas da base de datos",
        "action-purge": "purgar esta páxina",
        "autochange-username": "Cambio automático de MediaWiki",
        "upload": "Subir un ficheiro",
        "uploadbtn": "Subir o ficheiro",
-       "reuploaddesc": "Cancelar a carga e volver ao formulario de carga",
+       "reuploaddesc": "Cancelar a subida e volver ao formulario de subidas",
        "upload-tryagain": "Enviar a descrición do ficheiro modificada",
        "uploadnologin": "Non accedeu ao sistema",
        "uploadnologintext": "Debe $1 para poder cargar ficheiros.",
        "filesource": "Fonte:",
        "ignorewarning": "Ignorar a advertencia e gardar o ficheiro de calquera xeito",
        "ignorewarnings": "Ignorar as advertencias",
-       "minlength1": "Os nomes dos ficheiros deben ter cando menos unha letra.",
+       "minlength1": "Os nomes dos ficheiros deben ter como mínimo unha letra.",
        "illegalfilename": "O nome de ficheiro \"$1\" contén caracteres que non están permitidos nos títulos das páxinas.\nPor favor, cambie o nome do ficheiro e intente cargalo de novo.",
        "filename-toolong": "Os nomes dos ficheiros non poden superar os 240 bytes.",
        "badfilename": "O nome deste ficheiro cambiouse a \"$1\".",
        "filetype-mime-mismatch": "A extensión do ficheiro \".$1\" non coincide co tipo MIME detectado ($2).",
-       "filetype-badmime": "Non se permite enviar ficheiros de tipo MIME \"$1\".",
+       "filetype-badmime": "Non se permite a subida de ficheiros de tipo MIME \"$1\".",
        "filetype-bad-ie-mime": "Non se pode cargar este ficheiro porque o Internet Explorer detectaríao como \"$1\", o cal é un tipo de ficheiro non permitido e potencialmente perigoso.",
        "filetype-unwanted-type": "'''\".$1\"''' é un tipo de ficheiro non desexado.\n{{PLURAL:$3|O tipo de ficheiro preferido é|Os tipos de ficheiro preferidos son}} $2.",
        "filetype-banned-type": "'''\".$1\"''' non {{PLURAL:$4|é un tipo de ficheiro permitido|son tipos de ficheiro permitidos}}.\n{{PLURAL:$3|O tipo de ficheiro permitido é|Os tipos de ficheiro permitidos son}} $2.",
        "file-thumbnail-no": "O nome do ficheiro comeza por <strong>$1</strong>.\nParece tratarse dunha imaxe de tamaño reducido ''(miniatura)''.\nSe dispón dunha versión desta imaxe de maior resolución cárguea; se non, múdelle o nome ao ficheiro.",
        "fileexists-forbidden": "Xa existe un ficheiro co mesmo nome e este non pode ser sobrescrito.\nSe aínda quere cargar o seu ficheiro, por favor, retroceda e use un novo nome. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Xa existe un ficheiro con este nome no repositorio de ficheiros compartidos.\nSe aínda quere cargar o seu ficheiro, volva atrás e use outro nome.\n[[File:$1|thumb|center|$1]]",
-       "fileexists-no-change": "O ficheiro cargado é un duplicado exacto da versión actual de <strong>[[:$1]]</strong>.",
-       "fileexists-duplicate-version": "O ficheiro cargado é un duplicado exacto {{PLURAL:$2|dunha versión vella|de varias versións vellas}} de <strong>[[:$1]]</strong>.",
+       "fileexists-no-change": "O ficheiro subido é un duplicado exacto da versión actual de \"<strong>[[:$1]]</strong>\".",
+       "fileexists-duplicate-version": "O ficheiro subido é un duplicado exacto {{PLURAL:$2|dunha versión vella|de varias versións vellas}} de \"<strong>[[:$1]]</strong>\".",
        "file-exists-duplicate": "Este ficheiro é un duplicado {{PLURAL:$1|do seguinte|dos seguintes}}:",
-       "file-deleted-duplicate": "Un ficheiro idéntico a este (\"[[:$1]]\") foi borrado previamente. Debería comprobar o historial de borrados do ficheiro antes de proceder a cargalo de novo.",
+       "file-deleted-duplicate": "Un ficheiro idéntico a este (\"[[:$1]]\") foi borrado previamente. Debería comprobar o historial de borrados do ficheiro antes de proceder a subilo de novo.",
        "file-deleted-duplicate-notitle": "Un ficheiro idéntico a este foi borrado con anterioridade e o título foi suprimido.\nDebería contactar con alguén capaz de ver os datos de ficheiros borrados para que revise esta situación antes de subilo de novo.",
        "uploadwarning": "Advertencia ao cargar o ficheiro",
        "uploadwarning-text": "Por favor, modifique a descrición do ficheiro e inténteo de novo.",
        "savefile": "Gardar o ficheiro",
-       "uploaddisabled": "Sentímolo, a subida de ficheiros está desactivada.",
+       "uploaddisabled": "A subida de ficheiros está desactivada.",
        "copyuploaddisabled": "A carga mediante URL está desactivada.",
        "uploaddisabledtext": "A carga de ficheiros está desactivada.",
        "php-uploaddisabledtext": "As cargas de ficheiros PHP están desactivadas. Por favor, comprobe a característica file_uploads.",
        "uploadscripted": "Este ficheiro contén código HTML ou script que pode producir erros ao ser interpretado polo navegador.",
-       "upload-scripted-pi-callback": "Non se pode subir un ficheiro que conteña instruccións de proceso de folla de estilo XML.",
-       "uploaded-script-svg": "Atopado elemento de comandos \"$1\" no ficheiro SVG subido.",
-       "uploaded-hostile-svg": "Atopado CSS non seguro no elemento de estilo do ficheiro SVG subido.",
-       "uploaded-event-handler-on-svg": "Fixar atributos de xestión de eventos <code>$1=\"$2\"</code> no está permitido en ficheiros SVG.",
-       "uploaded-href-attribute-svg": "os atributos href nos ficheiros SVG só están autorizados a ligar a direccións http:// ou https://, atopado <code>&lt;$1 $2=\"$3\"&gt;</code>.",
-       "uploaded-href-unsafe-target-svg": "Atopado href a datos non seguros: dirección URI <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
-       "uploaded-animate-svg": "Atopada etiqueta \"animate\" que podería estar cambiando a href, usando o atributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
-       "uploaded-setting-event-handler-svg": "Fichar os atributos de xestión de eventos non está permitido, atopado <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
-       "uploaded-setting-href-svg": "Usar a etiqueta \"set\" para engadir o atributo \"href\" ó elemento pai non está permitido.",
-       "uploaded-wrong-setting-svg": "Usar a etiqueta \"set\" para engadir un obxectivo remoto/datos/secuencia de comandos a calquera atributo non está permitido. Atopado <code>&lt;set to=\"$1\"&gt;</code> no ficheiro SVG subido.",
-       "uploaded-setting-handler-svg": "SVG que fixa o atributo \"handler\" con remoto/datos/secuencia de comandos non está permitido. Atopado <code>$1=\"$2\"</code> no ficheiro SVG subido.",
-       "uploaded-remote-url-svg": "SVG que fixa calquera atributo de estilo con URL remota non está permitido. Atopado <code>$1=\"$2\"</code> no ficheiro SVG subido.",
-       "uploaded-image-filter-svg": "Atopado filtro de imaxe con URL: <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
+       "upload-scripted-pi-callback": "Non se pode subir un ficheiro que conteña instrucións de procesamento de follas de estilo XML.",
+       "uploaded-script-svg": "Atopouse un elemento de comandos \"$1\" no ficheiro SVG subido.",
+       "uploaded-hostile-svg": "Atopouse CSS non seguro no elemento de estilo do ficheiro SVG subido.",
+       "uploaded-event-handler-on-svg": "Non está permitido fixar atributos de xestión de eventos <code>$1=\"$2\"</code> nos ficheiros SVG.",
+       "uploaded-href-attribute-svg": "Os atributos href nos ficheiros SVG só están autorizados a ligar con enderezos http:// ou https://, mais atopouse <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-href-unsafe-target-svg": "Atopouse un href a datos non seguros: un enderezo URI <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
+       "uploaded-animate-svg": "Atopouse unha etiqueta \"animate\", que podería cambiar o seu href, usando o atributo \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
+       "uploaded-setting-event-handler-svg": "Non está permitido fixar os atributos de xestión de eventos, mais atopouse <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
+       "uploaded-setting-href-svg": "Non está permitido usar a etiqueta \"set\" para engadir o atributo \"href\" ao elemento pai.",
+       "uploaded-wrong-setting-svg": "Non está permitido usar a etiqueta \"set\" para engadir un obxectivo remoto/datos/secuencia de comandos a calquera atributo. Atopouse <code>&lt;set to=\"$1\"&gt;</code> no ficheiro SVG subido.",
+       "uploaded-setting-handler-svg": "Non están permitidos os ficheiros SVG que fixen o atributo \"handler\" cun obxectivo remoto/datos/secuencia de comandos. Atopouse <code>$1=\"$2\"</code> no ficheiro SVG subido.",
+       "uploaded-remote-url-svg": "Non están permitidos os ficheiros SVG que fixen calquera atributo de estilo con enderezos URL remotos. Atopouse <code>$1=\"$2\"</code> no ficheiro SVG subido.",
+       "uploaded-image-filter-svg": "Atopouse un filtro de imaxe con URL: <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG subido.",
        "uploadscriptednamespace": "Este ficheiro SVG contén o espazo de nomes non permitido \"$1\"",
        "uploadinvalidxml": "Non se puido analizar o XML do ficheiro cargado.",
-       "uploadvirus": "O ficheiro contén un virus! Detalles: $1",
+       "uploadvirus": "O ficheiro contén un virus!\nDetalles: $1",
        "uploadjava": "O ficheiro é un ZIP que contén un ficheiro .class de Java.\nNon están permitidas as cargas de ficheiros Java, dado que poden causar restricións de seguridade.",
        "upload-source": "Ficheiro de orixe",
        "sourcefilename": "Nome do ficheiro a cargar:",
        "upload-proto-error-text": "A carga remota require enderezos URL que comecen por <code>http://</code> ou <code>ftp://</code>.",
        "upload-file-error": "Erro interno",
        "upload-file-error-text": "Produciuse un erro interno ao intentar crear un ficheiro temporal no servidor.\nPor favor, póñase en contacto cun [[Special:ListUsers/sysop|administrador]].",
-       "upload-misc-error": "Erro de carga descoñecido",
+       "upload-misc-error": "Erro de subida descoñecido",
        "upload-misc-error-text": "Ocorreu un erro descoñecido durante a carga.\nComprobe que o enderezo URL é válido e accesible e, despois, inténteo de novo.\nSe o problema persiste, póñase en contacto cun [[Special:ListUsers/sysop|administrador]].",
        "upload-too-many-redirects": "O enderezo URL contiña moitas redireccións",
        "upload-http-error": "Produciuse un erro HTTP: $1",
        "movelogpagetext": "A continuación móstrase a lista con todas as páxinas trasladadas.",
        "movesubpage": "{{PLURAL:$1|Subpáxina|Subpáxinas}}",
        "movesubpagetext": "Esta páxina ten $1 {{PLURAL:$1|subpáxina|subpáxinas}}.",
+       "movesubpagetalktext": "A páxina de conversa correspondente ten $1 {{PLURAL:$1|subpáxina, mostrada|subpáxinas, mostradas}} abaixo.",
        "movenosubpage": "Esta páxina non ten subpáxinas.",
        "movereason": "Motivo:",
        "revertmove": "reverter",
        "pageinfo-category-pages": "Número de páxinas",
        "pageinfo-category-subcats": "Número de subcategorías",
        "pageinfo-category-files": "Número de ficheiros",
+       "pageinfo-user-id": "ID do usuario",
        "markaspatrolleddiff": "Marcar como revisada",
        "markaspatrolledtext": "Marcar esta páxina como revisada",
        "markaspatrolledtext-file": "Marcar esta versión de ficheiro como verificada",
        "usercssispublic": "Lembre: As subpáxinas CSS non deberían conter datos confidenciais porque outros usuarios poden velos.",
        "restrictionsfield-badip": "Enderezo IP ou rango de IP non válido: $1",
        "restrictionsfield-label": "Rangos de IP permitidos:",
-       "restrictionsfield-help": "Un único enderezo IP ou rango CIDR por liña. Para habilitalos todos, utilice<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Un único enderezo IP ou rango CIDR por liña. Para habilitalos todos, utilice<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Erro: $1",
+       "edit-error-long": "Erros:\n\n$1"
 }
index 2d1d825..d9da88d 100644 (file)
        "feedback-submit": "જમા કરો",
        "feedback-thanks": "આભર! તમારા પ્રતિભાવને \"[$2 $1]\" પાના પર મુકાયા છે.",
        "feedback-thanks-title": "આભાર !",
-       "searchsuggest-search": "શોધો",
+       "searchsuggest-search": "{{SITENAME}} શોધો",
        "searchsuggest-containing": "આ શબ્દ ધરાવતા...",
        "api-error-badaccess-groups": "આ વિકિ પર ફાઈલ ચઢાવવાની પરવાનગી તમને નથી.",
        "api-error-badtoken": "આંતરીક ત્રુટી: ખરાબ ટોકન",
index edd2fc9..93ba9a2 100644 (file)
@@ -19,9 +19,9 @@
                ]
        },
        "tog-underline": "Lièn-chiap kâ-tái sien:",
-       "tog-hideminor": "Yún-chhông chui-khiûn kiên-kói tú ke se-mì phiên-siá",
-       "tog-hidepatrolled": "Yún-chhông chui-khiûn kiên-kói tú sùn-chhà ko ke phiên-siá",
-       "tog-newpageshidepatrolled": "Yún-chhông sîn ya̍p-mien chhîn-tân tú sùn-chhà ko ke ya̍p-mien",
+       "tog-hideminor": "Ám-hí chui-khiûn kiên-kói tú ke se-mì phiên-siá",
+       "tog-hidepatrolled": "Ám-hí chui-khiûn kiên-kói tú sùn-chhà ko ke phiên-siá",
+       "tog-newpageshidepatrolled": "Ám-hí sîn ya̍p-mien chhîn-tân tú sùn-chhà ko ke ya̍p-mien",
        "tog-extendwatchlist": "Chán-khôi kâm-sṳ lie̍t-péu lòi hién-sṳ só-yû kiên-kói, m̀  tân-chhiang he chui-khiûn ke",
        "tog-usenewrc": "Chhai chui-khiûn kiên-kói lâu kâm-sṳ lie̍t-péu tú cháng-ha̍p thùng yit-ya̍p ke siû-kói",
        "tog-numberheadings": "Phiêu-thì chhṳ-thung phiên-ho",
        "subcategories": "Chṳ́ fûn-lui",
        "category-media-header": "\"$1\" fûn-lui tú ke mòi-thí",
        "category-empty": "<em>Liá-chak fûn-lui muk-chhièn hàn-mò pâu-hàm ya̍p-mien fe̍t-chá mòi-thí vùn-khien.</em>",
-       "hidden-categories": "$1-chak yún-chhông fûn-lui",
-       "hidden-category-category": "Yún-chhông fûn-lui",
+       "hidden-categories": "{{PLURAL:$1|Ám-hí ke fûn-lui}}",
+       "hidden-category-category": "Ám-hí ke fûn-lui",
        "category-subcat-count": "{{PLURAL:$2|Liá-chak fûn-lui yû hâ-poi yit-chak chṳ́ fûn-lui.|Liá-chak fûn-lui yû $2-chak chṳ́ fûn-lui, hâ-poi lie̍t-chhut yí $1-chak.}}",
        "category-subcat-count-limited": "邇隻分類有下背$1隻子分類。",
        "category-article-count": "{{PLURAL:$2|本分類有下背一隻頁面。|本分類有$2隻頁面,下背列出矣$1隻。}}",
        "editsectionhint": "Phiên-siá chông-chiet: $1",
        "toc": "Muk-liu̍k",
        "showtoc": "Chán-sṳ",
-       "hidetoc": "yún-chhông",
+       "hidetoc": "ám",
        "collapsible-collapse": "Chap-thia̍p",
        "collapsible-expand": "Chán-khôi",
        "thisisdeleted": "Chhà-khon fe̍t-chá fî-fu̍k $1?",
        "templatesusedsection": "Chhai liá-ke thon-lo̍k song sṳ́-yung ke mù-pán yû:",
        "template-protected": "(Pó-fu)",
        "template-semiprotected": "(Pan pó-fu)",
-       "hiddencategories": "Liá-ya̍p su̍k-yî $1-chak yún-chhông fûn-lui ke sṳ̀n-yèn:",
+       "hiddencategories": "Liá ya̍p su̍k-yî {{PLURAL:$1|1 ke ám-hí ke fûn-lui|$1 ke ám-hí ke fûn-lui}} ke sṳ̀n-yèn:",
        "edittools": "<!-- 邇肚嘅文字將分展示在編寫撈上傳表單以下。 -->\n<div id=\"editpage-specialchars\" class=\"plainlinks edittools-version-test003\" style=\"margin-top: 15px; border-width: 1px; border-style: solid; border-color: #aaaaaa; padding: 2px;\"> <span id=\"edittools_main\">'''Insert:''' <charinsert>– — … ‘ “ ’ ” ° ″ ′ ≈ ≠ ≤ ≥ ± − × ÷ ← → · § </charinsert></span><span id=\"edittools_name\">&nbsp;&nbsp;'''Sign your username:''' <charinsert>--~~&#126;~</charinsert> <small>(on [[Help:Talk pages|talk pages]])</small></span> ---- <small id=\"edittools_newsectionshere\"><span id=\"edittools_hide_for_script_test\"><span id=\"edittools_wikimarkup\">'''Wiki markup:''' <charinsert><nowiki>{{</nowiki>+<nowiki>}}</nowiki> </charinsert> &nbsp; <charinsert><nowiki>{{{</nowiki>+<nowiki>}}}</nowiki> </charinsert> &nbsp; <charinsert><nowiki>|</nowiki></charinsert> &nbsp; <charinsert>[+]</charinsert> &nbsp; <charinsert>[[+]]</charinsert> &nbsp; <charinsert>[[Category:+]]</charinsert> &nbsp; <charinsert>#REDIRECT&#32;[[+]]</charinsert> &nbsp; <charinsert>{{Subst:Fôn-ngiàng}}</charinsert> &nbsp; <charinsert>{{Subst:PAGENAME}}</charinsert> &nbsp; <charinsert>&nbsp;</charinsert> &nbsp; <charinsert><s>+</s></charinsert> &nbsp; <charinsert><sup>+</sup></charinsert> &nbsp; <charinsert><sub>+</sub></charinsert> &nbsp; <charinsert><code>+</code></charinsert> &nbsp; <charinsert><blockquote>+</blockquote></charinsert> &nbsp; <charinsert><ref>+</ref></charinsert> &nbsp; <charinsert><nowiki>{{</nowiki>Reflist<nowiki>}}</nowiki></charinsert> &nbsp; <charinsert><references/></charinsert> &nbsp; <charinsert><includeonly>+</includeonly></charinsert> &nbsp; <charinsert><noinclude>+</noinclude></charinsert> &nbsp; <charinsert><nowiki>{{</nowiki>DEFAULTSORT:+<nowiki>}}</nowiki></charinsert> &nbsp; <charinsert>&lt;nowiki>+</nowiki></charinsert> &nbsp; <charinsert><nowiki><!-- </nowiki>+<nowiki> --></nowiki></charinsert>&nbsp; <charinsert><nowiki><span class=\"plainlinks\"></nowiki>+<nowiki></span></nowiki></charinsert>&nbsp;&nbsp;&bull;&nbsp; ([[Wikipedia:Template messages|templates]])<br/></span> <span id=\"edittools_symbols\">'''Symbols:''' <charinsert> ~ | ¡ ¿ † ‡ ↔ ↑ ↓ • ¶</charinsert> &nbsp; <charinsert> # ½ ⅓ ⅔ ¼ ¾ ⅛ ⅜ ⅝ ⅞ ∞ </charinsert> &nbsp; <charinsert> ‘ “ ’ ” «+»</charinsert> &nbsp; <charinsert> ¤ ₳ ฿ ₵ ¢ ₡ ₢ $ ₫ ₯ € ₠ ₣ ƒ ₴ ₭ ₤ ℳ ₥ ₦ № ₧ ₰ £ ៛ ₨ ₪ ৳ ₮ ₩ ¥ </charinsert> &nbsp; <charinsert> ♠ ♣ ♥ ♦ </charinsert>&nbsp; <charinsert>m²</charinsert>&nbsp;<charinsert>m³</charinsert><br/></span> <span id=\"edittools_characters\">'''Characters:''' <span class=\"latinx\"> <charinsert> Á á Ć ć É é Í í Ĺ ĺ Ḿ ḿ Ń ń Ó ó Ŕ ŕ Ś ś Ú ú Ý ý Ź ź </charinsert> &nbsp; <charinsert> À à È è Ì ì M̀ m̀  Ǹ ǹ Ò ò Ù ù </charinsert> &nbsp; <charinsert> Â â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û Ŵ ŵ Ŷ ŷ </charinsert> &nbsp; <charinsert> A̤ a̤ E̤ e̤ I̤ i̤ O̤ o̤ Ṳ ṳ </charinsert> &nbsp;\n<charinsert> A̍ a̍ E̍ e̍ I̍ i̍ O̍ o̍ U̍ u̍ </charinsert> &nbsp; <charinsert> À̤ à̤ È̤ è̤ Ì̤ ì̤ Ò̤ ò̤ Ṳ̀ ṳ̀ </charinsert> &nbsp;\n<charinsert> Á̤ á̤ É̤ é̤ Í̤ í̤ Ó̤ ó̤ Ṳ́ ṳ́ </charinsert> &nbsp; <charinsert> A̤̍ a̤̍ E̤̍ e̤̍ I̤̍ i̤̍ O̤̍ o̤̍ Ṳ̍ ṳ̍ </charinsert> &nbsp;\n<charinsert> Â̤ â̤ Ê̤ ê̤ Î̤ î̤ Ô̤ ô̤ Ṳ̂ ṳ̂ </charinsert> &nbsp; <charinsert> Â â Ĉ ĉ Ê ê Ĝ ĝ Ĥ ĥ Î î Ĵ ĵ Ô ô Ŝ ŝ Û û Ŵ ŵ Ŷ ŷ </charinsert> &nbsp; <charinsert> Ä ä Ë ë Ï ï Ö ö Ü ü Ÿ ÿ </charinsert> &nbsp; <charinsert> ß </charinsert> &nbsp; <charinsert> Ã ã Ẽ ẽ Ĩ ĩ Ñ ñ Õ õ Ũ ũ Ỹ ỹ</charinsert> &nbsp; <charinsert> Ç ç Ģ ģ Ķ ķ Ļ ļ Ņ ņ Ŗ ŗ Ş ş Ţ ţ </charinsert> &nbsp; <charinsert> Đ đ </charinsert> &nbsp; <charinsert> Ů ů </charinsert> &nbsp; <charinsert> Ǎ ǎ Č č Ď ď Ě ě Ǐ ǐ Ľ ľ Ň ň Ǒ ǒ Ř ř Š š Ť ť Ǔ ǔ Ž ž </charinsert> &nbsp; <charinsert> Ā ā Ē ē Ī ī Ō ō Ū ū Ȳ ȳ Ǣ ǣ </charinsert> &nbsp; <charinsert> ǖ ǘ ǚ ǜ </charinsert> &nbsp; <charinsert> Ă ă Ĕ ĕ Ğ ğ Ĭ ĭ Ŏ ŏ Ŭ ŭ </charinsert> &nbsp; <charinsert> Ċ ċ Ė ė Ġ ġ İ ı Ż ż </charinsert> &nbsp; <charinsert> Ą ą Ę ę Į į Ǫ ǫ Ų ų </charinsert> &nbsp; <charinsert> Ḍ ḍ Ḥ ḥ Ḷ ḷ Ḹ ḹ Ṃ ṃ Ṇ ṇ Ṛ ṛ Ṝ ṝ Ṣ ṣ Ṭ ṭ </charinsert> &nbsp; <charinsert> Ł ł </charinsert> &nbsp; <charinsert> Ő ő Ű ű </charinsert> &nbsp; <charinsert> Ŀ ŀ </charinsert> &nbsp; <charinsert> Ħ ħ </charinsert> &nbsp; <charinsert> Ð ð Þ þ </charinsert> &nbsp; <charinsert> Œ œ </charinsert> &nbsp; <charinsert> Æ æ Ø ø Å å </charinsert> &nbsp; <charinsert> Ə ə </charinsert></span>&nbsp;<span id=\"edittools_latinx_template\">&nbsp;&bull;&nbsp; <charinsert><nowiki>{{</nowiki><nowiki>Unicode|</nowiki>+<nowiki>}}</nowiki></charinsert></span><br/></span> <span id=\"edittools_greek\">'''Hî-lia̍p-vùn:''' <charinsert> Ά ά Έ έ Ή ή Ί ί Ό ό Ύ ύ Ώ ώ </charinsert> &nbsp; <charinsert> Α α Β β Γ γ Δ δ </charinsert> &nbsp; <charinsert> Ε ε Ζ ζ Η η Θ θ </charinsert> &nbsp; <charinsert> Ι ι Κ κ Λ λ Μ μ </charinsert> &nbsp; <charinsert> Ν ν Ξ ξ Ο ο Π π </charinsert> &nbsp; <charinsert> Ρ ρ Σ σ ς Τ τ Υ υ </charinsert> &nbsp; <charinsert> Φ φ Χ χ Ψ ψ Ω ω </charinsert> &nbsp;<span id=\"edittools_greek_template\">•&nbsp; <charinsert><nowiki>{{</nowiki><nowiki>Polytonic|</nowiki>+<nowiki>}}</nowiki></charinsert></span> &nbsp;<span id=\"edittools_greek_example\">•&nbsp; ([[Greek diacritics#Computer encoding|polytonic list]])</span><br/></span> <span id=\"edittools_cyrillic\">'''Cyrillic:''' <charinsert> А а Б б В в Г г </charinsert> &nbsp; <charinsert> Ґ ґ Ѓ ѓ Д д Ђ ђ </charinsert> &nbsp; <charinsert> Е е Ё ё Є є Ж ж </charinsert> &nbsp; <charinsert> З з Ѕ ѕ И и І і </charinsert> &nbsp; <charinsert> Ї ї Й й Ј ј К к </charinsert> &nbsp; <charinsert> Ќ ќ Л л Љ љ М м </charinsert> &nbsp; <charinsert> Н н Њ њ О о П п </charinsert> &nbsp; <charinsert> Р р С с Т т Ћ ћ </charinsert> &nbsp; <charinsert> У у Ў ў Ф ф Х х </charinsert> &nbsp; <charinsert> Ц ц Ч ч Џ џ Ш ш </charinsert> &nbsp; <charinsert> Щ щ Ъ ъ Ы ы Ь ь </charinsert> &nbsp; <charinsert> Э э Ю ю Я я </charinsert> &nbsp;<br/></span> <span id=\"edittools_ipa\">'''IPA:''' <span title=\"Pronunciation in IPA\" class=\"IPA\"><charinsert>t̪ d̪ ʈ ɖ ɟ ɡ ɢ ʡ ʔ </charinsert> &nbsp; <charinsert> ɸ ʃ ʒ ɕ ʑ ʂ ʐ ʝ ɣ ʁ ʕ ʜ ʢ ɦ </charinsert> &nbsp; <charinsert> ɱ ɳ ɲ ŋ ɴ </charinsert> &nbsp; <charinsert> ʋ ɹ ɻ ɰ </charinsert> &nbsp; <charinsert> ʙ ʀ ɾ ɽ </charinsert> &nbsp; <charinsert> ɫ ɬ ɮ ɺ ɭ ʎ ʟ </charinsert> &nbsp; <charinsert> ɥ ʍ ɧ </charinsert> &nbsp; <charinsert> ɓ ɗ ʄ ɠ ʛ </charinsert> &nbsp; <charinsert> ʘ ǀ ǃ ǂ ǁ </charinsert> &nbsp; <charinsert> ɨ ʉ ɯ </charinsert> &nbsp; <charinsert> ɪ ʏ ʊ </charinsert> &nbsp; <charinsert> ɘ ɵ ɤ </charinsert> &nbsp; <charinsert> ə ɚ </charinsert> &nbsp; <charinsert> ɛ ɜ ɝ ɞ ʌ ɔ </charinsert> &nbsp; <charinsert> ɐ ɶ ɑ ɒ </charinsert> &nbsp; <charinsert> ʰ ʷ ʲ ˠ ˤ ⁿ ˡ </charinsert> &nbsp; <charinsert> ˈ ˌ ː ˑ ̪ </charinsert>&nbsp;</span> &nbsp;&bull;&nbsp; <charinsert><nowiki>{{</nowiki><nowiki>IPA|</nowiki>+<nowiki>}}</charinsert></small>\n</div>",
        "nocreatetext": "Chhṳ́ mióng-chham han-chṳ chhóng-chho sîn hong-mien ke kûng-yung. ngì khó-yî fán-fì pin phiên-cho yí-kîn yû ke hong-mien, fe̍t-chá [[Special:UserLogin|tên-liu̍k fe̍t-he chhóng-kien sîn chong-fu]].",
        "nocreate-loggedin": "汝並無權限去創建新頁面。",
        "rev-deleted-event": "(日誌已刪除)",
        "rev-deleted-text-permission": "Ke-vùn-chông siû-thin yí-kîn pûn-chhiùng kûng-khiung vùn-tóng chûng yì-chhù. Chhai [{{fullurl:{{#Special:Log}}/suppress|page={{PAGENAMEE}}}} chhù-thet ngit-ki] chûng khó-nèn kiám-chhà to siòng-se ke sin-sit.",
        "rev-deleted-text-view": "Ke-vùn-chông siû-thin yí-kîn pûn-chhiùng kûng-khiung vùn-tóng chûng yì-chhù. Chok-vi mióng-chham ke kón-lî-yèn, khó-yî kiám-chhà; Chhai[{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} chhù-thet ngit-ki] chûng khó-nèn kiám-chhà to siòng-se ke sin-sit.",
-       "rev-delundel": "chán-hien / yún-chhông",
-       "rev-showdeleted": "展現",
+       "rev-delundel": "hien / ám",
+       "rev-showdeleted": "hien",
        "revisiondelete": "刪除/恢復刪除修訂版本",
        "revdelete-nooldid-title": "無效嘅目標修訂版本",
        "revdelete-nooldid-text": "汝還吂指定一隻目標修訂版本去進行邇隻功能、\n所指定嘅修訂版本毋存在,或者汝嘗試去隱藏今下嘅修訂版本。",
        "compareselectedversions": "Pí-káu sién-chet ke pán-pún",
        "editundo": "Chhí-sêu",
        "searchresults": "Sêu-chhìm kiet-kó",
-       "searchresults-title": "Sêu -chhìm \"$1\" ke kiet-kó",
+       "searchresults-title": "Sêu-chhìm \"$1\" ke kiet-kó",
        "titlematches": "頁面標題相符",
        "textmatches": "頁面內容配得上",
        "notextmatches": "無頁面內容配上",
        "rcnotefrom": "下背係從'''$2'''起嘅更改(最多展示'''$1'''):",
        "rclistfrom": "Chán-sṳ chhiùng $3 $2 yî-lòi ke sîn kiên-kói",
        "rcshowhideminor": "$1細微編寫",
-       "rcshowhideminor-show": "Chán-sṳ",
-       "rcshowhideminor-hide": "Yún-chhông",
+       "rcshowhideminor-show": "Hien",
+       "rcshowhideminor-hide": "Ám",
        "rcshowhidebots": "$1 kî-hi-ngìn ke phiên-siá",
        "rcshowhidebots-show": "Chán-sṳ",
-       "rcshowhidebots-hide": "Yún-chhông",
+       "rcshowhidebots-hide": "Ám",
        "rcshowhideliu": "$1 yí-kîn tên-ngi̍p ke yung-fu",
-       "rcshowhideliu-hide": "Yún-chhông",
+       "rcshowhideliu-show": "Hien",
+       "rcshowhideliu-hide": "Ám",
        "rcshowhideanons": "$1 nit-miàng yung-fu ke phiên-siá",
-       "rcshowhideanons-show": "Chán-sṳ",
-       "rcshowhideanons-hide": "Yún-chhông",
+       "rcshowhideanons-show": "Hien",
+       "rcshowhideanons-hide": "Ám",
        "rcshowhidepatr": "$1巡查過嘅編寫",
        "rcshowhidemine": "$1 ngài-ke phiên-siá",
-       "rcshowhidemine-show": "Chán-sṳ",
-       "rcshowhidemine-hide": "Yún-chhông",
+       "rcshowhidemine-show": "Hien",
+       "rcshowhidemine-hide": "Ám",
        "rclinks": "Chán-sṳ chui-khiûn $2-ngit nui chui-sîn ke $1 chhṳ kói-thûng. <br />$3",
        "diff": "chhâ-phe̍t",
        "hist": "li̍t-sṳ́",
-       "hide": "Yún-chhông",
+       "hide": "Ám",
        "show": "Chán-sṳ",
        "minoreditletter": "se-mì",
        "newpageletter": "Sîn",
        "metadata": "Ngièn sú-kí",
        "metadata-help": "邇文件肚包含有擴展嘅信息。邇兜信息可能係由數碼相機或掃描儀在創建或數字化過程肚所加入嘅。\n\n係講邇文件嘅源文件已經分修改,一兜信息在修改後嘅文件肚將毋做得完全反映出來。",
        "metadata-expand": "Hién-sṳ siòng-se ke chṳ̂-liau",
-       "metadata-collapse": "Yún-chhòng siòng-se ke chṳ̂-liau",
+       "metadata-collapse": "Ám-hí siòng-se ke chṳ̂-liau",
        "metadata-fields": "在本信息肚所列出嘅EXIF元數據域將包含在圖片顯示頁面,當元數據表損壞時單淨顯示下背信息。\n其他嘅元數據默認做隱藏。\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
        "exif-orientation": "Fông-vi",
        "exif-xresolution": "Súi-phìn kié-sak-thu",
index 472a72c..4d24d4d 100644 (file)
@@ -35,7 +35,8 @@
                        "פוילישער",
                        "DatGuy",
                        "IKhitron",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "Or"
                ]
        },
        "tog-underline": "סימון קישורים בקו תחתי:",
        "tog-watchdeletion": "הוספת דפים וקבצים שאני {{GENDER:|מוחק|מוחקת}} לרשימת המעקב שלי",
        "tog-watchuploads": "הוספת קבצים חדשים שאני מעלה לרשימת המעקב שלי",
        "tog-watchrollback": "הוספת דפים שאני {{GENDER:|מבצע|מבצעת}} בהם שחזור מהיר לרשימת המעקב שלי",
-       "tog-minordefault": "ס×\99×\9e×\95×\9f ×\9b×\9c ×¢×¨×\99×\9b×\94 ×\9b×\9eשנ×\99ת ×\9bברירת מחדל",
+       "tog-minordefault": "ס×\99×\9e×\95×\9f ×\9b×\9c ×\94ער×\99×\9b×\95ת ×\9b×\9eשנ×\99×\95ת ×\91ת×\95ר ברירת מחדל",
        "tog-previewontop": "הצגת תצוגה מקדימה לפני תיבת העריכה",
        "tog-previewonfirst": "הצגת תצוגה מקדימה בעריכה הראשונה",
        "tog-enotifwatchlistpages": "לשלוח אליי דוא\"ל כאשר משתנה דף או קובץ ברשימת המעקב שלי",
        "tog-enotifusertalkpages": "לשלוח אליי דוא\"ל כאשר נעשה שינוי בדף שיחת המשתמש שלי",
-       "tog-enotifminoredits": "לשלוח אליי דוא\"ל גם על עריכות משניות בדפים וקבצים",
+       "tog-enotifminoredits": "×\9cש×\9c×\95×\97 ×\90×\9c×\99×\99 ×\93×\95×\90\"×\9c ×\92×\9d ×¢×\9c ×¢×¨×\99×\9b×\95ת ×\9eשנ×\99×\95ת ×\91×\93פ×\99×\9d ×\95×\91ק×\91צ×\99×\9d",
        "tog-enotifrevealaddr": "לחשוף את כתובת הדוא\"ל שלי בהתראות דוא\"ל",
        "tog-shownumberswatching": "הצגת מספר המשתמשים העוקבים",
        "tog-oldsig": "החתימה הנוכחית שלך:",
        "qbfind": "חיפוש",
        "qbbrowse": "ניווט",
        "qbedit": "עריכה",
-       "qbpageoptions": "×\90פשר×\95×\99×\95ת ×\93×£",
-       "qbmyoptions": "×\94×\90פשר×\95×\99×\95ת שלי",
+       "qbpageoptions": "×\94×\93×£ ×\94×\96×\94",
+       "qbmyoptions": "×\94×\93פ×\99×\9d שלי",
        "faq": "שאלות ותשובות",
        "faqpage": "Project:שאלות ותשובות",
        "actions": "פעולות",
        "deletethispage": "מחיקת דף זה",
        "undeletethispage": "שחזור דף זה",
        "undelete_short": "שחזור {{PLURAL:$1|עריכה אחת|$1 עריכות}}",
-       "viewdeleted_short": "×\94צ×\92ת {{PLURAL:$1|ער×\99×\9b×\94 ×\9e×\97×\95ק×\94 ×\90×\97ת|$1 ×¢×¨×\99×\9b×\94 מחוקות}}",
+       "viewdeleted_short": "×\94צ×\92ת {{PLURAL:$1|ער×\99×\9b×\94 ×\9e×\97×\95ק×\94 ×\90×\97ת|$1 ×¢×¨×\99×\9b×\95ת מחוקות}}",
        "protect": "הגנה",
        "protect_change": "שינוי",
        "protectthispage": "הפעלת הגנה על דף זה",
        "grant-basic": "הרשאות בסיסיות",
        "grant-viewdeleted": "צפייה בקבצים ודפים שנמחקו",
        "grant-viewmywatchlist": "צפייה ברשימת המעקב שלך",
+       "grant-viewrestrictedlogs": "צפייה בפריטי יומן מוגבלים",
        "newuserlogpage": "יומן רישום משתמשים",
        "newuserlogpagetext": "זהו יומן המכיל הרשמות של משתמשים.",
        "rightslog": "יומן הרשאות",
        "delete-edit-reasonlist": "עריכת סיבות המחיקה",
        "delete-toobig": "דף זה כולל מעל {{PLURAL:$1|גרסה אחת|$1 גרסאות}} בהיסטוריית העריכות שלו. מחיקת דפים כאלה הוגבלה כדי למנוע פגיעה בביצועי האתר.",
        "delete-warning-toobig": "דף זה כולל מעל {{PLURAL:$1|גרסה אחת|$1 גרסאות}} בהיסטוריית העריכות שלו. מחיקה שלו עלולה להפריע לפעולות בבסיס הנתונים; אנא שקלו שנית את המחיקה.",
-       "deleteprotected": "אין באפשרותך למחוק את הדף כי הוא מוגן.",
+       "deleteprotected": "אין {{GENDER:|באפשרותך|באפשרותך|באפשרותכם}} למחוק את הדף כי הוא מוגן.",
        "deleting-backlinks-warning": "<strong>אזהרה:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|דפים אחרים]] מקשרים לדף ש{{GENDER:|אתה עומד|את עומדת|אתם עומדים}} למחוק או מכלילים אותו.",
        "rollback": "שחזור עריכות",
        "rollbacklink": "שחזור",
        "movelogpagetext": "להלן רשימה של כל הדפים ששמם שוּנה.",
        "movesubpage": "{{PLURAL:$1|דף משנה|דפי משנה}}",
        "movesubpagetext": "לדף זה יש {{PLURAL:$1|דף משנה אחד המוצג להלן|$1 דפי משנה המוצגים להלן}}.",
+       "movesubpagetalktext": "לדף השיחה של דף זה יש {{PLURAL:$1|דף משנה אחד המוצג להלן|$1 דפי משנה המוצגים להלן}}.",
        "movenosubpage": "לדף זה אין דפי משנה.",
        "movereason": "סיבה:",
        "revertmove": "החזרה",
        "pageinfo-category-pages": "מספר הדפים",
        "pageinfo-category-subcats": "מספר קטגוריות המשנה",
        "pageinfo-category-files": "מספר הקבצים",
+       "pageinfo-user-id": "המספר המזהה של המשתמש",
        "markaspatrolleddiff": "סימון השינוי כבדוק",
        "markaspatrolledtext": "סימון דף זה כבדוק",
        "markaspatrolledtext-file": "סימון גרסת קובץ זו כבדוקה",
index f6988a0..3c7cc5b 100644 (file)
        "action-siteadmin": "डाटाबेस को ताला लगाने या खोलने",
        "action-sendemail": "ई-मेल भेजने",
        "action-editmywatchlist": "ध्यानसूची सम्पादित करने",
-       "action-viewmywatchlist": "à¤\85पनà¥\80 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤¦à¥\87à¤\96नà¥\87",
+       "action-viewmywatchlist": "à¤\85पनà¥\80 à¤§à¥\8dयानसà¥\82à¤\9aà¥\80 à¤¦à¥\87à¤\96à¥\87à¤\82",
        "action-viewmyprivateinfo": "अपनी व्यक्तिगत जानकारी देखने",
        "action-editmyprivateinfo": "अपनी व्यक्तिगत जानकारी बदलने",
        "action-editcontentmodel": "एक पेज की सामग्री मॉडल को संपादित।",
index e50c57e..522883a 100644 (file)
        "resetpass_submit": "Postavite lozinku i prijavite se",
        "changepassword-success": "Zaporka je uspješno postavljena!",
        "changepassword-throttled": "Nedavno ste se previše puta pokušali prijaviti.\nMolimo Vas pričekajte $1 prije nego što pokušate ponovno.",
-       "botpasswords": "Lozinke botova",
-       "botpasswords-disabled": "Lozinke botova su onemogućene.",
-       "botpasswords-no-central-id": "Za uporabu lozinki botova, morate biti prijavljeni na središnji račun.",
-       "botpasswords-existing": "Postojeće lozinke botova",
-       "botpasswords-createnew": "Stvorite novu lozinku bota",
-       "botpasswords-editexisting": "Uredite postojeću lozinku bota",
+       "botpasswords": "Zaporke botova",
+       "botpasswords-disabled": "Zaporke botova su onemogućene.",
+       "botpasswords-no-central-id": "Za uporabu zaporki botova, morate biti prijavljeni na središnji račun.",
+       "botpasswords-existing": "Postojeće zaporke botova",
+       "botpasswords-createnew": "Stvorite novu zaporku bota",
+       "botpasswords-editexisting": "Uredite postojeću zaporku bota",
        "botpasswords-label-appid": "Ime bota:",
        "botpasswords-label-create": "Stvori",
        "botpasswords-label-update": "Ažuriraj",
        "mw-widgets-titleinput-description-new-page": "stranica još ne postoji",
        "mw-widgets-titleinput-description-redirect": "preusmjeravanje na $1",
        "log-action-filter-block": "Vrsta blokiranja:",
+       "log-action-filter-delete": "Vrsta brisanja:",
+       "log-action-filter-import": "Vrsta uvoza:",
+       "log-action-filter-move": "Vrsta premještanja:",
        "log-action-filter-newusers": "Način stvaranja računa:",
        "log-action-filter-patrol": "Vrsta pregledavanja:",
+       "log-action-filter-protect": "Vrsta zaštićivanja:",
+       "log-action-filter-rights": "Vrsta promjene prava:",
        "log-action-filter-upload": "Vrsta postavljanja:",
        "log-action-filter-all": "sve",
        "log-action-filter-block-block": "blokiranje",
        "log-action-filter-block-reblock": "promjena blokiranja",
        "log-action-filter-block-unblock": "deblokiranje",
+       "log-action-filter-delete-delete": "brisanje stranice",
+       "log-action-filter-delete-restore": "vraćanje izbrisane stranice",
+       "log-action-filter-delete-event": "brisanje evidencije",
+       "log-action-filter-delete-revision": "brisanje izmjene",
+       "log-action-filter-import-interwiki": "uvoz između wikija",
+       "log-action-filter-import-upload": "uvoz s XML postavljanjem",
+       "log-action-filter-move-move": "premještanje bez prepisivanja preko preusmjeravanja",
+       "log-action-filter-move-move_redir": "premještanje s prepisivanjem preko preusmjeravanja",
        "log-action-filter-newusers-create": "stvorio anonimni suradnik",
        "log-action-filter-newusers-create2": "stvorio registrirani suradnik",
        "log-action-filter-newusers-autocreate": "automatski stvoren",
        "log-action-filter-newusers-byemail": "stvoren lozinkom poslanom na e-poštu",
-       "log-action-filter-patrol-patrol": "Ručno pregledavanje",
-       "log-action-filter-patrol-autopatrol": "Automatsko pregledavanje",
+       "log-action-filter-patrol-patrol": "ručno ophođeno",
+       "log-action-filter-patrol-autopatrol": "automatsko pregledavanje",
+       "log-action-filter-protect-protect": "zaštićivanje",
+       "log-action-filter-protect-modify": "promjena zaštićivanja",
+       "log-action-filter-protect-unprotect": "uklanjanje zaštite",
+       "log-action-filter-protect-move_prot": "prenosiva zaštita",
+       "log-action-filter-rights-rights": "ručna promjena",
+       "log-action-filter-rights-autopromote": "automatska promjena",
        "log-action-filter-upload-upload": "novo postavljanje",
        "log-action-filter-upload-overwrite": "ponovno postavljanje",
        "changecredentials": "Promjena vjerodajnica",
index cdd7d39..cf4a2d1 100644 (file)
        "editpage-cannot-use-custom-model": "Ennek a lapnak a tartalommodellje nem változtatható.",
        "longpageerror": "'''HIBA: Az általad beküldött szöveg {{PLURAL:$1|egy kilobájt|$1 kilobájt}} hosszú, ami több az engedélyezett {{PLURAL:$2|egy kilobájtnál|$2 kilobájtnál}}.\nA szerkesztést nem lehet elmenteni.'''",
        "readonlywarning": "<strong>FIGYELMEZTETÉS: A wiki adatbázisát karbantartás miatt zárolták, ezért most nem fogod tudni elmenteni a szerkesztéseidet!</strong>\nA lap szövegét másold egy szövegfájlba, amit később felhasználhatsz!\n\nAz adatbázist lezáró rendszeradminisztrátor az alábbi magyarázatot adta: $1",
-       "protectedpagewarning": "'''Figyelem: Ez a lap le van védve, így csak adminisztrátori jogosultságokkal rendelkező szerkesztők módosíthatják.'''\nA legutolsó ide vonatkozó naplóbejegyzés alább látható:",
+       "protectedpagewarning": "<strong>Figyelem: Ez a lap védett, így csak adminisztrátori jogosultságokkal rendelkező szerkesztők módosíthatják.</strong>\nA legutolsó ide vonatkozó naplóbejegyzés alább látható:",
        "semiprotectedpagewarning": "'''Megjegyzés:''' ez a lap védett, így regisztrálatlan vagy újonnan regisztrált szerkesztők nem módosíthatják.",
        "cascadeprotectedwarning": "<strong>Figyelem:</strong> ez a lap le van zárva, csak adminisztrátorok szerkeszthetik, mert a következő kaszkádvédelemmel ellátott {{PLURAL:$1|lapon|lapokon}} be van illesztve:",
        "titleprotectedwarning": "'''Figyelem: Ez a lap le van védve, így csak a [[Special:ListGroupRights|megfelelő jogosultságokkal]] rendelkező szerkesztők hozhatják létre.'''\nA legutolsó ide vonatkozó naplóbejegyzés alább látható:",
        "action-createpage": "ennek a lapnak a létrehozása",
        "action-createtalk": "vitalap létrehozása",
        "action-createaccount": "felhasználói fiók elkészítése",
+       "action-autocreateaccount": "külső fiók automatikus létrehozása",
        "action-history": "laptörténet megtekintése",
        "action-minoredit": "szerkesztés aprónak jelölése",
        "action-move": "lap átnevezése",
        "upload-dialog-disabled": "Fájl feltöltés ezzel a párbeszéddel tiltott ezen a wikin.",
        "upload-dialog-title": "Fájl feltöltése",
        "upload-dialog-button-cancel": "Mégse",
+       "upload-dialog-button-back": "Vissza",
        "upload-dialog-button-done": "Kész",
        "upload-dialog-button-save": "Mentés",
        "upload-dialog-button-upload": "Feltöltés",
        "apisandbox-results-fixtoken-fail": "A(z) „$1” token lekérése sikertelen.",
        "apisandbox-alert-page": "Hibás mezők vannak ezen a lapon.",
        "apisandbox-alert-field": "Ennek a mezőnek az értéke érvénytelen.",
+       "apisandbox-continue": "Folytatás",
+       "apisandbox-continue-clear": "Törlés",
+       "apisandbox-continue-help": "A {{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries folytatja] az utolsó kérést; a {{int:apisandbox-continue-clear}} törli a folytatáshoz kapcsolódó paramétereket.",
        "booksources": "Könyvforrások",
        "booksources-search-legend": "Könyvforrások keresése",
        "booksources-search": "Keresés",
        "movelogpagetext": "Az alábbiakban az átnevezett lapok listája látható.",
        "movesubpage": "{{PLURAL:$1|Allap|Allapok}}",
        "movesubpagetext": "Ennek a lapnak {{PLURAL:$1|egy|$1}} allapja van.",
+       "movesubpagetalktext": "A kapcsolódó vitalapnak az alább látható {{PLURAL:$1|allapja|$1 allapja}} van.",
        "movenosubpage": "Ez a lap nem rendelkezik allapokkal.",
        "movereason": "Indoklás:",
        "revertmove": "visszaállítás",
        "pageinfo-watchers": "Figyelők száma",
        "pageinfo-visiting-watchers": "A lapot figyelők száma, akik nézték a friss változtatásait",
        "pageinfo-few-watchers": "Kevesebb mint $1 szerkesztő figyeli",
+       "pageinfo-few-visiting-watchers": "Nem biztos, hogy látta bárki a lapot, akinek a figyelőlistáján szerepel",
        "pageinfo-redirects-name": "Átirányítások száma erre a lapra",
        "pageinfo-subpages-name": "A lap allapjai",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|átirányítás}}; $3 {{PLURAL:$3|nem átirányítás}})",
        "pageinfo-category-pages": "Lapok száma",
        "pageinfo-category-subcats": "Alkategóriák száma",
        "pageinfo-category-files": "Fájlok száma",
+       "pageinfo-user-id": "Felhasználóazonosító",
        "markaspatrolleddiff": "Ellenőrzöttnek jelölöd",
        "markaspatrolledtext": "Ellenőriztem",
        "markaspatrolledtext-file": "Ellenőriztem",
        "newimages-showbots": "Botos feltöltések mutatása",
        "newimages-hidepatrolled": "Ellenőrzött szerkesztések elrejtése",
        "noimages": "Nem tekinthető meg semmi.",
+       "gallery-slideshow-toggle": "Miniatűrök ki/bekapcsolása",
        "ilsubmit": "Keresés",
        "bydate": "dátum szerint",
        "sp-newimages-showfrom": "Új fájlok mutatása $1 $2 után",
        "htmlform-cloner-create": "További hozzáadása",
        "htmlform-cloner-delete": "Eltávolítás",
        "htmlform-cloner-required": "Legalább egy érték szükséges.",
+       "htmlform-date-placeholder": "ÉÉÉÉ-HH-NN",
+       "htmlform-time-placeholder": "ÓÓ:PP:MM",
+       "htmlform-datetime-placeholder": "ÉÉÉÉ-HH-NN ÓÓ:PP:MM",
+       "htmlform-date-invalid": "A megadott érték nem felismerhető dátum. Próbáld meg ÉÉÉÉ-HH-NN formátumban.",
+       "htmlform-time-invalid": "A megadott érték nem felismerhető idő. Próbáld meg ÓÓ:PP:MM formátumban.",
+       "htmlform-datetime-invalid": "A megadott érték nem felismerhető dátum/idő. Próbáld meg ÉÉÉÉ-HH-NN ÓÓ:PP:MM formátumban.",
+       "htmlform-date-toolow": "A megadott érték korábbi az engedélyezettnél ($1).",
+       "htmlform-date-toohigh": "A megadott érték későbbi az engedélyezettnél ($1).",
+       "htmlform-time-toolow": "A megadott érték korábbi az engedélyezettnél ($1).",
+       "htmlform-time-toohigh": "A megadott érték későbbi az engedélyezettnél ($1).",
+       "htmlform-datetime-toolow": "A megadott érték korábbi az engedélyezettnél ($1).",
+       "htmlform-datetime-toohigh": "A megadott érték későbbi az engedélyezettnél ($1).",
        "htmlform-title-badnamespace": "[[:$1]] nem a(z) „{{ns:$2}}” névtérben található.",
        "htmlform-title-not-creatable": "„$1” nem egy létrehozható lapcím",
        "htmlform-title-not-exists": "$1 nem létezik.",
        "feedback-external-bug-report-button": "A fájl egy technikai feladat",
        "feedback-dialog-title": "Visszajelzés küldése",
        "feedback-dialog-intro": "A visszajelzésedre az alábbi egyszerű űrlapot használhatod. A hozzászólásod a felhasználó neveddel együtt a „$1” oldalon fog megjelenni.",
-       "feedback-error-title": "Hiba",
        "feedback-error1": "Hiba: az API ismeretlen eredménnyel tért vissza",
        "feedback-error2": "Hiba: a szerkesztés nem sikerült",
        "feedback-error3": "Hiba: nem érkezett válasz az API-tól",
        "feedback-thanks": "Köszönjük. A visszajelzésed elküldve a „[$2 $1]” laphoz.",
        "feedback-thanks-title": "Köszönjük!",
        "feedback-useragent": "User agent:",
-       "searchsuggest-search": "Keresés",
+       "searchsuggest-search": "Keresés a wikin",
        "searchsuggest-containing": "tartalmazza…",
        "api-error-autoblocked": "Az IP-címed automatikusan blokkolva lett, mert korábban egy blokkolt szerkesztő használta.",
        "api-error-badaccess-groups": "Nincs jogod fájlokat feltölteni erre a wikire.",
        "authmanager-authn-not-in-progress": "Hitelesítés nincs folyamatban, vagy a folyamat adatai elvesztek. Kérjük, indítsd újra az elejétől.",
        "authmanager-authn-no-primary": "A megadott hitelesítő adatokkal nem lehet hitelesíteni.",
        "authmanager-authn-no-local-user": "A megadott hitelesítő adatok nincsenek társítva egyetlen felhasználóval sem ezen a wikin.",
+       "authmanager-authn-no-local-user-link": "A megadott hitelesítő adatok érvényesek, de nincsenek társítva felhasználóhoz ezen a wikin. Jelentkezz be más módon vagy regisztrálj, és lesz lehetőséged a hitelesítő adatok összekapcsolására a fiókoddal.",
        "authmanager-authn-autocreate-failed": "A helyi fiók automatikus létrehozása sikertelen: $1",
        "authmanager-change-not-supported": "A megadott hitelesítő adatokat nem változtathatók meg, mivel semmi sem használná őket.",
        "authmanager-create-disabled": "Új fiók létrehozása tiltva.",
        "authmanager-provider-password": "Jelszó alapú hitelesítés",
        "authmanager-provider-password-domain": "Jelszó - domain-alapú hitelesítés",
        "authmanager-provider-temporarypassword": "Ideiglenes jelszó",
+       "authprovider-confirmlink-message": "A legutóbbi bejelentkezési próbálkozásaid alapján a következő fiókok kapcsolhatók össze a wikifiókoddal. Az összekapcsolás lehetővé teszi a bejelentkezést ezekkel a fiókokkal. Válaszd ki, melyeket szeretnéd összekapcsolni.",
        "authprovider-confirmlink-request-label": "Összekapcsolandó fiókok",
        "authprovider-confirmlink-success-line": "$1: Sikeresen összekapcsolva.",
        "authprovider-confirmlink-failed": "A fiókok összekapcsolása nem volt teljesen sikeres: $1",
        "unlinkaccounts-success": "A fiókok szétkapcsolva.",
        "authenticationdatachange-ignored": "A hitelesítő adatok változtatása nincs kezelve. Talán nincs beállítva szolgáltató?",
        "userjsispublic": "Figyelem: JavaScript-allapokon ne tárolj bizalmas adatokat, mivel minden felhasználó számára láthatóak.",
-       "usercssispublic": "Figyelem: CSS-allapokon ne tárolj bizalmas adatokat, mivel minden felhasználó számára láthatóak."
+       "usercssispublic": "Figyelem: CSS-allapokon ne tárolj bizalmas adatokat, mivel minden felhasználó számára láthatóak.",
+       "restrictionsfield-badip": "Érvénytelen IP-cím vagy -tartomány: $1",
+       "restrictionsfield-label": "Engedélyezett IP-tartományok:",
+       "restrictionsfield-help": "Egy IP-cím vagy CIDR-tartomány soronként. Minden engedélyezéséhez használd a következő tartományokat:<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Hiba: $1",
+       "edit-error-long": "Hibák:\n\n$1"
 }
index 0e3003a..02312cc 100644 (file)
@@ -52,7 +52,7 @@
        "tog-enotifminoredits": "Senda mér einnig tölvupóst vegna minniháttar breytinga á síðum og skrám",
        "tog-enotifrevealaddr": "Gefa upp netfang mitt í tilkynningarpóstum",
        "tog-shownumberswatching": "Sýna fjölda vaktandi notenda",
-       "tog-oldsig": "Núverandi undirskrift:",
+       "tog-oldsig": "Núverandi undirskriftin þín:",
        "tog-fancysig": "Meðhöndla undirskrift sem wikitexta (án sjálfvirks tengils)",
        "tog-uselivepreview": "Nota beina forskoðun",
        "tog-forceeditsummary": "Birta áminningu þegar breytingarágripið er tómt",
@@ -69,7 +69,7 @@
        "tog-showhiddencats": "Sýna falda flokka",
        "tog-norollbackdiff": "Ekki sýna breytingu eftir að endurvakning síðu hefur verið gerð.",
        "tog-useeditwarning": "Vara mig við þegar ég fer frá breytingarsíðu með óvistaðar breytingar",
-       "tog-prefershttps": "Alltaf nota örugga tengingu við innskráningu",
+       "tog-prefershttps": "Alltaf nota örugga tengingu þegar þú skráir þig inn",
        "underline-always": "Alltaf",
        "underline-never": "Aldrei",
        "underline-default": "Skinn eða sjálfgefið í vafra",
        "newwindow": "(opnast í nýjum glugga)",
        "cancel": "Hætta við",
        "moredotdotdot": "Meira...",
-       "morenotlisted": "Þessi listi er ekki tæmandi.",
+       "morenotlisted": "Þessi listi gæti verið ófullgerður.",
        "mypage": "Síða",
        "mytalk": "Spjall",
        "anontalk": "Spjall",
        "eauthentsent": "Staðfestingarpóstur hefur verið sendur á uppgefið netfang. Þú verður að fylgja leiðbeiningunum í póstinum til þess að virkja netfangið og staðfesta að það sé örugglega þitt.",
        "throttled-mailpassword": "Tölvupóstur til að endursetja lykilorðið hefur þegar verið sent, innan við $1 {{PLURAL:$1|síðasta klukkutímans|síðustu klukkutímanna}}.\nTil að koma í veg fyrir misnotkun, er aðeins einn tölvupóstur sendur {{PLURAL:$1|hvern $1 klukkutíma|hverja $1 klukkutíma}}.",
        "mailerror": "Upp kom villa við sendingu tölvupósts: $1",
-       "acct_creation_throttle_hit": "Því miður, hafa verið búnir til {{PLURAL:$1|$1 nýr aðgangur|$1 nýjir aðgangar}} í dag sem er hámarksfjöldi nýskráninga á einum degi.\nÞú getur því miður ekki búið til nýjan aðgang frá þessari IP-tölu að svo stöddu.",
+       "acct_creation_throttle_hit": "Gestir á þessu wiki vefsvæði sem nota þitt vistfang hafa búið til {{PLURAL:$1|$1 nýjan aðgang|$1 nýja aðganga}} síðustu $2 sem er hámarksfjöldi nýskráninga yfir þetta tímabil. Vegna þessa geta gestir frá þessu vistfangi ekki búið til fleiri aðganga í augnablikinu.",
        "emailauthenticated": "Netfang þitt var staðfest þann $2 klukkan $3.",
        "emailnotauthenticated": "Tölvupóstfang þitt hefur ekki enn verið staðfest. Enginn póstur verður sendur af neinum af eftirfarandi eiginleikum.",
        "noemailprefs": "Tilgreindu netfang í kjörstillingum þínum svo þessar aðgerðir virki.",
        "searchprofile-advanced-tooltip": "Leita í ákveðnum nafnrýmum",
        "search-result-size": "$1 ({{PLURAL:$2|1 orð|$2 orð}})",
        "search-result-category-size": "{{PLURAL:$1|1 meðlimur|$1 meðlimir}} ({{PLURAL:$2|1 undirflokks|$2 undirflokka}}, {{PLURAL:$3|1 skrá|$3 skrár}})",
-       "search-redirect": "(endurbeining $1)",
+       "search-redirect": "(endurbeint frá $1)",
        "search-section": "(hluti $1)",
        "search-category": "(flokkur $1)",
        "search-file-match": "(passar við innihald skráa)",
        "thumbnail_image-missing": "Skrána virðist vanta: $1",
        "import": "Flytja inn síður",
        "importinterwiki": "Flytja inn frá öðru wiki",
-       "import-interwiki-text": "Veldu wiki og síðutitil til að flytja inn.\nDagsetningumog notandanöfnum breytinganna verður haldið.\nAllir innflutningar frá öðrum wikium eru skráð í [[Special:Log/import|innflutningsskrána]].",
+       "import-interwiki-text": "Veldu wiki og síðutitil til að flytja inn.\nDagsetningum og notandanöfnum breytinganna verður haldið.\nAllir innflutningar frá öðrum wikium eru skráð í [[Special:Log/import|innflutningsskrána]].",
        "import-interwiki-sourcewiki": "Uppruna-wiki:",
        "import-interwiki-sourcepage": "Upprunaleg síða:",
        "import-interwiki-history": "Afrita allar breytingar þessarar síðu",
        "tags-actions-header": "Aðgerðir",
        "tags-active-yes": "Já",
        "tags-active-no": "Nei",
-       "tags-source-extension": "Skilgreint af viðbótarhugbúnaði",
+       "tags-source-extension": "Skilgreint af hugbúnaðinum",
        "tags-source-manual": "Sett inn handvirkt að notendum og vélmennum",
        "tags-source-none": "Ekki lengur í notkun",
        "tags-edit": "breyta",
        "feedback-thanks": "Takk! Ábendingu þinni hefur verið bætt við á síðuna \"[$2 $1]\".",
        "feedback-thanks-title": "Takk!",
        "feedback-useragent": "Aðgangsforrit:",
-       "searchsuggest-search": "Leita",
+       "searchsuggest-search": "Leita á {{SITENAME}}",
        "searchsuggest-containing": "sem innihalda ...",
        "api-error-badaccess-groups": "Þú hefur ekki leyfi til að hlaða inn skrám.",
        "api-error-badtoken": "Innri villa: Skemmdur tóki.",
index 663277e..72b105d 100644 (file)
        "movelogpagetext": "Di seguito sono elencate le pagine spostate di recente.",
        "movesubpage": "{{PLURAL:$1|Sottopagina|Sottopagine}}",
        "movesubpagetext": "Questa pagina ha $1 {{PLURAL:$1|sottopagina mostrata|sottopagine mostrate}} di seguito.",
+       "movesubpagetalktext": "La corrispondente pagina di discussione ha $1 {{PLURAL:$1|sottopagina mostrata|sottopagine mostrate}} di seguito.",
        "movenosubpage": "Questa pagina non ha sottopagine.",
        "movereason": "Motivo:",
        "revertmove": "ripristina",
        "pageinfo-category-pages": "Numero di pagine",
        "pageinfo-category-subcats": "Numero di sottocategorie",
        "pageinfo-category-files": "Numero di file",
+       "pageinfo-user-id": "ID utente",
        "markaspatrolleddiff": "Segna come verificata",
        "markaspatrolledtext": "Segna questa pagina come verificata",
        "markaspatrolledtext-file": "Segna questo file come verificato",
        "newimages-showbots": "Mostra caricamenti di bot",
        "newimages-hidepatrolled": "Nascondi caricamenti verificati",
        "noimages": "Non c'è nulla da vedere.",
+       "gallery-slideshow-toggle": "Alterna miniature",
        "ilsubmit": "Ricerca",
        "bydate": "per data",
        "sp-newimages-showfrom": "Mostra i file più recenti a partire dalle ore $2 del $1",
        "usercssispublic": "Ricorda: le sottopagine CSS non devono contenere dati riservati poichè sono visualizzabili da altri utenti.",
        "restrictionsfield-badip": "Indirizzo IP o intervallo non valido: $1",
        "restrictionsfield-label": "Intervalli IP consentiti:",
-       "restrictionsfield-help": "Un indirizzo IP o intervallo CIDR per linea. Per consentire tutto, utilizza<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Un indirizzo IP o intervallo CIDR per linea. Per consentire tutto, utilizza<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Errore: $1",
+       "edit-error-long": "Errori:\n\n$1"
 }
index 600e3e8..2300869 100644 (file)
        "rollbacklinkcount-morethan": "$1{{PLURAL:$1|編集}}以上を巻き戻し",
        "rollbackfailed": "巻き戻しに失敗しました",
        "rollback-missingparam": "リクエストに必要なパラメーターが見当たりません。",
+       "rollback-missingrevision": "版の情報を読み込めませんでした。",
        "cantrollback": "編集を差し戻せません。\n最後の投稿者が、このページの唯一の作者です。",
        "alreadyrolled": "ページ[[:$1]]の[[User:$2|$2]] ([[User talk:$2|トーク]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) による編集を巻き戻せません。\n他の利用者が既に編集または巻き戻しを行ったためです。\n\nこのページの最後の編集は[[User:$3|$3]] ([[User talk:$3|トーク]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) によるものです。",
        "editcomment": "編集内容の要約: <em>$1</em>",
        "pageinfo-category-pages": "ページ数",
        "pageinfo-category-subcats": "下位カテゴリ数",
        "pageinfo-category-files": "ファイル数",
+       "pageinfo-user-id": "利用者 ID",
        "markaspatrolleddiff": "巡回済みにする",
        "markaspatrolledtext": "このページを巡回済みにする",
        "markaspatrolledtext-file": "このファイルの版を巡回済みにする",
        "feedback-thanks": "ありがとうございます。フィードバックを「[$2 $1]」のページに投稿しました。",
        "feedback-thanks-title": "お願いします!",
        "feedback-useragent": "ユーザーエージェント:",
-       "searchsuggest-search": "検索",
+       "searchsuggest-search": "{{SITENAME}}内を検索",
        "searchsuggest-containing": "この語句を全文検索",
        "api-error-autoblocked": "あなたの IP アドレスは、過去にブロックされた利用者によって使用されていたため、自動的にブロックされました。",
        "api-error-badaccess-groups": "このウィキへのファイルのアップロードが許可されていません。",
index a85c60b..38d9bdb 100644 (file)
        "createacct-benefit-heading": "{{SITENAME}} შექმნილია თქვენნაირი ადამიანების მიერ.",
        "createacct-benefit-body1": "{{PLURAL:$1|რედაქტირება|რედაქტირება}}",
        "createacct-benefit-body2": "{{PLURAL:$1|გვერდი|გვერდი}}",
-       "createacct-benefit-body3": "á\83\91á\83\9dá\83\9aá\83\9d {{PLURAL:$1|á\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9aá\83\98\83\9bá\83\9dá\83\9bá\83®á\83\9bá\83\90á\83 á\83\94á\83\91á\83\94á\83\9aი}}",
+       "createacct-benefit-body3": "á\83\91á\83\9dá\83\9aá\83\9d {{PLURAL:$1|á\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\9dá\83 á\83\98\83 á\83\94á\83\93á\83\90á\83¥á\83¢á\83\9dá\83 ი}}",
        "badretype": "თქვენს მიერ შეყვანილი პაროლები ერთმანეთს არ ემთხვევა.",
        "usernameinprogress": "ამ მომხმარებლისათვის ანგარიში იქმნება. გთხოვთ, დაიცადეთ.",
        "userexists": "ეს სახელი უკვე გამოყენებულია.\nგთხოვთ, აირჩიეთ სხვა.",
        "feedback-external-bug-report-button": "ტექნიკური დავალების გაგზავნა",
        "feedback-dialog-title": "გამოხმაურების გაგზავნა",
        "feedback-dialog-intro": "თქვენ შეგიძლიათ ისარგებლოთ ქვემოთ არსებული მარტივი ფორმით, რათა დატოვოთ თქვენი გამოძახილი. კომენტარები თქვენ მომხმარებლის სახელთან ერთად დამატებული იქნება \"$1\" გვერდზე",
-       "feedback-error-title": "შეცდომა",
        "feedback-error1": "შეცდომა. API-ს მოულოდნელი რეზულტატი.",
        "feedback-error2": "შეცდომა: რედაქტირება ვერ განხორციელდა",
        "feedback-error3": "შეცდომა. არ არის API-ს პასუხი .",
index 29bd82d..e02843f 100644 (file)
        "gotaccount": "Бұған дейін тіркеліп пе едіңіз? '''$1'''.",
        "gotaccountlink": "Кіріңіз",
        "userlogin-resetlink": "Қатысушы атын не құпия сөзді ұмыттыңыз ба?",
-       "userlogin-resetpassword-link": "Құпия сөздіңізді ұмыттыңыз ба?",
+       "userlogin-resetpassword-link": "Құпия сөзіңізді ұмыттыңыз ба?",
        "userlogin-helplink2": "Кіруге көмек",
        "userlogin-loggedin": "{{GENDER:$1|$1}} ретінде әлдеқашан кіргенсіз.\nТөмендегі пішінді басқа қатысушы кіруі ретінде қолданыңыз.",
        "userlogin-createanother": "Басқа тіркелгі жасау",
        "passwordtoopopular": "Көп жағдайда таңдалатын құпиясөзді қолдана алмайсыз. Басқа бірегей құпиясөз таңдаңыз.",
        "password-name-match": "Құпия сөзіңіз қатысушы атынан өзгеше болуы қажет.",
        "password-login-forbidden": "Бұл қатысушы аты мен құпия сөзін пайдалануға тыйым салынған.",
-       "mailmypassword": "Құпия сөзді қалпына кеттіру",
+       "mailmypassword": "Құпия сөзді қалпына келтіру",
        "passwordremindertitle": "{{SITENAME}} үшін жаңа уақытша құпия сөз",
        "passwordremindertext": "Біреу (IP мекенжайы: $1, бәлкім өзіңіз боларсыз) {{SITENAME}} жобасында жаңа құпия сөз жөнелету сұранымын жасаған ($4).\nҚатысушы «$2» үшін уақытша құпия сөз жасалды: «$3». Егер бұл сіздің сұранымыңыз болса қазір жүйеге кіріп жаңа құпия сөз таңдауыңыз керек. \nСіздің уақытша құпия сөзіңіз {{PLURAL:$5|бір күнге|$5 күнге}} дейін белсенді болады.\n\nЕгер бұл сұранымды басқа біреу жасаса, не құпия сөздіңізді еске түсіріп енді өзгерткіңіз келмесе ескі құпия сөзді қолдануды жалғастырып осы хатты елемеуіңізге да болады.",
        "noemail": "Осы арада жазылып алынған «$1» қатысушының е-пошта мекенжайы жоқ.",
        "botpasswords-label-update": "Жаңарту",
        "botpasswords-label-cancel": "Болдырмау",
        "botpasswords-label-delete": "Жою",
-       "botpasswords-label-resetpassword": "Құпия сөзді қалпына кеттіру",
+       "botpasswords-label-resetpassword": "Құпия сөзді қалпына келтіру",
        "botpasswords-label-grants": "Қолданылатын гранттар:",
        "botpasswords-bad-appid": "\"$1\" бот атауы жарамды емес.",
        "botpasswords-insert-failed": "\"$1\" бот атауын қосу орындалмады. Ол әлдеқашан қосылған ба еді?",
index f09c38b..c3926de 100644 (file)
@@ -65,6 +65,7 @@
        "tog-watchlisthidebots": "ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ ಬಾಟ್ ಸಂಪಾದನೆಗಳನ್ನು ಅಡಗಿಸು",
        "tog-watchlisthideminor": "ಚಿಕ್ಕ ಬದಲಾವಣೆಗಳನ್ನು ವೀಕ್ಷಣಾ ಪಟ್ಟಿಯಿಂದ ಅಡಗಿಸು",
        "tog-watchlisthideliu": "ಲಾಗ್ ಇನ್ ಆಗಿರುವ ಸದಸ್ಯರ ಸಂಪಾದನೆಗಳನ್ನು ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ ಅಡಗಿಸು",
+       "tog-watchlistreloadautomatically": "ಯಾವುದೇ ಫಿಲ್ಟರು ಬದಲಾದಾಗ ವೀಕ್ಷಣಾಪಟ್ಟಿ ಮತ್ತೆ ಲೋಡ್ ಆಗಲಿ (ಜಾವಾಸ್ಕ್ರಿಪ್ಟ್ ಇರಬೇಕು)",
        "tog-watchlisthideanons": "ಅನಾಮಧೇಯ ಬಳಕೆದಾರರ ಸಂಪಾದನೆಗಳನ್ನು ವೀಕ್ಷಣಾಪಟ್ಟಿಯಲ್ಲಿ ಅಡಗಿಸು",
        "tog-watchlisthidepatrolled": "ವೀಕ್ಷಣಾ ಪತ್ತಿಯಲ್ಲಿ ಹಸ್ತುಕದರ್ ಬದಲಾವಣೆಗಳನ್ನು ಅದಗಿಸು",
        "tog-watchlisthidecategorization": "ಪುಟಗಳ ವರ್ಗೀಕರಣವನ್ನು ಅಡಗಿಸು",
        "actionthrottled": "ಕ್ರಿಯೆಯನ್ನು ನಿಯಂತ್ರಿಸಲಾಗಿದೆ",
        "actionthrottledtext": "ಸ್ಪ್ಯಾಮ್ ವಿರೋಧಿ ವಿಧಾನದ ಪ್ರಕಾರ, ನಿಮ್ಮನ್ನು ಸ್ವಲ್ಪ ಸಮಯದಲ್ಲಿ ಬಹಳ ಸಲ ಈ ಕ್ರಿಯೆಯನ್ನು ಮಾಡುವುದರಿಂದ ನಿಯಂತ್ರಿಸಲಾಗಿದೆ ಮತ್ತು ನೀವು ಸೀಮೆಯನ್ನು ಮಿರಿದ್ದಿರಿ. ಸ್ವಲ್ಪ ಸಮಯದ ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ.",
        "protectedpagetext": "ಈ ಪುಟವನ್ನು ಸಂಪಾದನೆ ಮಾಡಲಾಗದಂತೆ ಸಂರಕ್ಷಿಸಲಾಗಿದೆ.",
-       "viewsourcetext": "ಈ ಪುಟದ ಮೂಲವನ್ನು ನೀವು ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ನಕಲು ಮಾಡಬಹುದು:",
-       "viewyourtext": "ನೀವು \"ನಿಮ್ಮ ಸಂಪಾದನೆಗಳ\"ನ್ನು ವಿಕ್ಷಿಸಿ ಮತ್ತು ಅದರ ಮೂಲವನ್ನು ಈ ಹಾಳೆಗೆ ನಕಲಿಸಬಹುದು:",
+       "viewsourcetext": "ಈ ಪುಟದ ಮೂಲವನ್ನು ನೀವು ವೀಕ್ಷಿಸಬಹುದು ಮತ್ತು ನಕಲು ಮಾಡಬಹುದು.",
+       "viewyourtext": "ನೀವು <strong>ನಿಮ್ಮ ಸಂಪಾದನೆಗಳನ್ನು</strong> ವೀಕ್ಷಿಸಿ ಮತ್ತು ಅದರ ಮೂಲವನ್ನು ಈ ಹಾಳೆಗೆ ನಕಲಿಸಬಹುದು.",
        "protectedinterface": "ಈ ಪುಟವು ತಾಂತ್ರಿಕತೆಗೆ ಸಂಪರ್ಕ ಪಠ್ಯವನ್ನು ವಿಕಿಯಲ್ಲಿ ಒದಗಿಸುತ್ತದೆ, ಹಾಗು ದುರುಪಯೋಗ ಆಗದಿರಲೆಂದು ಇದನ್ನು ಸಂರಕ್ಷಿಸಲಾಗಿದೆ. ಎಲ್ಲ ವಿಕಿಗಳಿಗೆ ಭಾಷಾಂತರವನ್ನು ಕೂಡಿಸಲು ಹಾಗು ಬದಲಿಸಲು, [https://translatewiki.net/ translatewiki.net], the MediaWiki localisation ಯೋಜನೆಯನ್ನು ಉಪಯೊಗಿಸಿ",
        "editinginterface": "'''ಎಚ್ಚರಿಕೆ:''' ನೀವು ತಂತ್ರಾಂಶವು ತಾಣವನ್ನು ಪ್ರದರ್ಶಿಸಲು ಉಪಯೋಗಿಸುವ ಪಠ್ಯವನ್ನು ಹೊಂದಿರುವ ಪುಟವೊಂದನ್ನು ಸಂಪಾದಿಸುತ್ತಿರುವಿರಿ.\nಈ ಪುಟದಲ್ಲಾಗುವ ಬದಲಾವಣೆಗಳು ಇತರ ಬಳಕೆದಾರರಿಗೆ ತಾಣವು ಕಾಣುವ ರೀತಿಯನ್ನು ಬದಲಾಯಿಸುತ್ತದೆ.\nಅನುವಾದಗಳನ್ನು ಮಾಡುತ್ತಿದ್ದರೆ, ದಯವಿಟ್ಟು ಮೀಡಿಯವಿಕಿಯ ಪ್ರಾಂತೀಯತೆ ಯೋಜನೆ [https://translatewiki.net/ translatewiki.net], the MediaWiki localisation project ಯೋಜನೆಯನ್ನು ಉಪಯೊಗಿಸಿ",
        "cascadeprotected": "ಈ ಪುಟವು ಸಂಪಾದನೆ ಮಾಡಲಾಗದಂತೆ ಸಂರಕ್ಷಿಸಲಾಗಿದೆ. ಇದಕ್ಕೆ ಕಾರಣ ಈ ಪುಟವನ್ನು ಈ ಕೆಳಗಿನ ತಡಸಲು-ಸಂರಕ್ಷಣೆ ಅಳವಡಿಸಲಾದ {{PLURAL:$1|ಪುಟದಲ್ಲಿ|ಪುಟಗಳಲ್ಲಿ}} ಉಪಯೋಗಿಸಲಾಗಿದೆ:\n$2",
        "mypreferencesprotected": "ನಿಮ್ಮ ಆಯ್ಕೆಗಳನ್ನು  ಸಂಪಾದಿಸಲು ನಿಮಗೆ ಅನುಮತಿ ಇಲ್ಲ",
        "ns-specialprotected": "ವಿಶೇಷ ಪುಟಗಳನ್ನು ಸಂಪಾದಿಸಲು ಆಗುವುದಿಲ್ಲ.",
        "titleprotected": "ಈ ಹೆಸರಿನ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸಲಾಗದಂತೆ [[User:$1|$1]] ಅವರು ಸಂರಕ್ಷಿಸಿದ್ದಾರೆ.\nಸಂರಕ್ಷಣೆಗೆ ನೀಡಿರುವ ಕಾರಣ: <em>$2</em>.",
-       "filereadonlyerror": "\"$1\" ಕಡತವು ಓದಲು ಮಾತ್ರ ಸಾದ್ಯವಿರುವ ರೀತಿಯಲ್ಲಿರುವ\"$2\" ಸಂಪುಟದಲ್ಲಿರುವುದರಿಂದ ಇದನ್ನು  ಮಾರ್ಪಡಿಸಲು ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.\nಇದನ್ನು ಬದ್ದಗೊಳಿಸಿರುವ ನಿರ್ವಾಹಕರು \"$3\" ಈ ವಿವರಣೆಯನ್ನು ನೀಡುತ್ತಿದ್ದಾರೆ.",
+       "filereadonlyerror": "\"$1\" ಕಡತವು ಓದಲು ಮಾತ್ರ ಸಾದ್ಯವಿರುವ ರೀತಿಯಲ್ಲಿರುವ \"$2\" ಸಂಪುಟದಲ್ಲಿ ಇರುವುದರಿಂದ ಇದನ್ನು  ಮಾರ್ಪಡಿಸಲು ಸಾದ್ಯವಾಗುತ್ತಿಲ್ಲ.\nಇದನ್ನು ಬದ್ದಗೊಳಿಸಿರುವ ನಿರ್ವಾಹಕರು ಈ ವಿವರಣೆಯನ್ನು ನೀಡುತ್ತಿದ್ದಾರೆ: \"$3\"",
        "invalidtitle-knownnamespace": "\"$2\"ನೇಮ್ ಸ್ಪೇಸ್ ಮತ್ತು \"$3\"ಪಠ್ಯದೊಂದಿಗೆ ಅಸಮಂಜಸ ತಲೆಬರಹ",
        "invalidtitle-unknownnamespace": "$1ನೇಮ್ ಸ್ಪೇಸ್ ಮತ್ತು \"$2\"ಪಠ್ಯದೊಂದಿಗೆ ಅಸಮಂಜಸ ತಲೆಬರಹ",
        "exception-nologin": "ಲಾಗಿನ್ ಆಗಿಲ್ಲ",
-       "exception-nologin-text": "ಈ ಪುಟ ಅಥವಾ ಚಟುವಟಿಕೆಗೆ ನೀವು ಈ ವಿಕಿಗೆ [[Special:Userlogin|ಲಾಗಿನ್]] ಆಗಿರಬೇಕಾಗಿರುತ್ತದೆ.",
+       "exception-nologin-text": "ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಲು ಅಥವ ಚಟುವಟಿಕೆಯನ್ನು ಮಾಡಲು ಲಾಗಿನ್ ಆಗಬೇಕು.",
        "exception-nologin-text-manual": "ಈ ಪುಟ ಅಥವಾ ಚಟುವಟಿಕೆಗೆ $1 ಮಾಡಿ",
        "virus-badscanner": "ಅಸಮಂಜಸ ವಿನ್ಯಾಸ:ಅಪರಿಚಿತ ವೈರಸ್ ಸ್ಕಾನರ್:''$1''",
        "virus-scanfailed": "ಸ್ಕಾನ್ ವಿಫಲ (code $1)",
        "virus-unknownscanner": "ಅಪರಿಚಿತ ವೈರಾಣುನಾಶಕ:",
        "logouttext": "'''ನೀವು ಈಗ ಲಾಗ್ ಔಟ್ ಆಗಿರುವಿರಿ.'''\n \nಗಮನಿಸಿ: ನಿಮ್ಮ ಬ್ರೌಸರ್‍ನ cache ಅನ್ನು ಅಳಿಸುವವರೆಗೂ ಕೆಲವು ಪುಟಗಳು ನೀವಿನ್ನೂ ಲಾಗ್ ಇನ್ ಆಗಿರುವಂತೆ ಪ್ರದರ್ಶಿತವಾಗಬಹುದು.",
+       "cannotlogoutnow-title": "ಈಗ ಲಾಗ್ ಔಟ್ ಮಾಡಲಾಗುತ್ತಿಲ್ಲ",
+       "cannotlogoutnow-text": "$1 ಬಳಸುವಾಗ ಲಾಗ್ ಔಟ್ ಆಗಲು ಸಾಧ್ಯವಿಲ್ಲ.",
        "welcomeuser": "ಸುಸ್ವಾಗತ,$1!",
        "welcomecreation-msg": "ನಿಮ್ಮ ಖಾತೆ ತೆರೆಯಲಾಗಿದೆ.ನಿಮ್ಮ [[Special:Preferences|{{SITENAME}} preferences]]ಬದಲಾಯಿಸಲು ಮರೆಯಬೇಡಿ.",
        "yourname": "ನಿಮ್ಮ ಬಳಕೆಯ ಹೆಸರು",
        "createacct-yourpasswordagain-ph": "ಪ್ರವೇಶಪದವನ್ನು ಮತ್ತೊಮ್ಮೆ ನಮೂದಿಸಿ",
        "userlogin-remembermypassword": "ನನ್ನನ್ನು ಲಾಗಿನ್ ಆಗಿಯೇ ಇಡಿ",
        "userlogin-signwithsecure": "ಸುರಕ್ಷಿತವಾದ ಕನೆಕ್ಷನ್ ಉಪಯೋಗಿಸಿ.",
+       "cannotlogin-title": "ಲಾಗ್ ಇನ್ ಮಾಡಲಾಗುತ್ತಿಲ್ಲ",
+       "cannotlogin-text": "ಲಾಗ್ ಇನ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ.",
+       "cannotloginnow-title": "ಈಗ ಲಾಗ್ ಇನ್ ಮಾಡಲು ಆಗುತ್ತಿಲ್ಲ",
+       "cannotloginnow-text": "$1 ಬಳಸುವಾಗ ಲಾಗ್ ಇನ್ ಆಗಲು ಸಾಧ್ಯವಿಲ್ಲ.",
+       "cannotcreateaccount-title": "ಖಾತೆಗಳನ್ನು ಸೃಷ್ಟಿಸಲಾಗುತ್ತಿಲ್ಲ",
        "yourdomainname": "ನಿಮ್ಮ ಕ್ಷೇತ್ರ:",
        "password-change-forbidden": "ನೀವು ಈ ವಿಕಿಯಲ್ಲಿ ಪ್ರವೇಶಪದವನ್ನು ಬದಲಾಯಿಸಲು ಸಾದ್ಯವಿಲ್ಲ.",
        "login": "ಲಾಗ್ ಇನ್",
        "userlogin-resetlink": "ನಿಮ್ಮ ಲಾಗಿನ್ ವಿವರಗಳನ್ನು ಮರೆತಿದ್ದೀರಾ?",
        "userlogin-resetpassword-link": "ನಿಮ್ಮ ಪ್ರವೇಶಪದ ಮರೆತಿರೇ?",
        "userlogin-helplink2": "ಲಾಗಿನ್ ಆಗಲು ಸಹಾಯ",
+       "userlogin-reauth": "ನೀವು {{GENDER:$1|$1}} ಎಂದು ಖಾತ್ರಿ ಮಾಡಲು ಮತ್ತೆ ಲಾಗ್ ಇನ್ ಆಗಬೇಕು.",
        "userlogin-createanother": "ಇನ್ನೊಂದು ಖಾತೆಯನ್ನು ಸೃಷ್ಟಿಸಿ",
        "createacct-emailrequired": "ಇ-ಮೇಲ್ ವಿಳಾಸ:",
        "createacct-emailoptional": "ಮಿಂಚಂಚೆ ವಿಳಾಸ (ಐಚ್ಛಿಕ)",
        "createacct-reason": "ಕಾರಣ",
        "createacct-reason-ph": "ನೀವು ಯಾಕೆ ಇನ್ನೊಂದು ಖಾತೆ ತೆರೆಯುತ್ತಿದ್ದೀರಿ",
        "createacct-submit": "ಖಾತೆಯನ್ನು ಸೃಷ್ಟಿಸಿ",
-       "createacct-another-submit": "ಇನ್ನು ಒಂದು ಖಾತ ಮಾಡಿ",
+       "createacct-another-submit": "ಖಾತೆಯನ್ನು ಸೃಷ್ಟಿಸಿ",
+       "createacct-continue-submit": "ಖಾತೆಯ ಸೃಷ್ಟಿಯನ್ನು ಮುಂದುವರೆಸಿ",
+       "createacct-another-continue-submit": "ಖಾತೆಯ ಸೃಷ್ಟಿಯನ್ನು ಮುಂದುವರೆಸಿ",
        "createacct-benefit-heading": "{{SITENAME}} ನಿಮ್ಮಂತಹ ಜನರಿಂದಲೇ ಮಾಡಿದ್ದು.",
        "createacct-benefit-body1": "{{PLURAL:$1|ಸಂಪಾದನೆ|ಸಂಪಾದನೆಗಳು}}",
        "createacct-benefit-body2": "{{PLURAL:$1|ಪುಟ|ಪುಟಗಳು}}",
        "pt-createaccount": "ಹೊಸ ಖಾತೆ ತೆರೆಯಿರಿ",
        "pt-userlogout": "ಲಾಗ್ ಔಟ್",
        "changepassword": "ಪ್ರವೇಶ ಪದ ಬದಲಾಯಿಸಿ",
-       "resetpass_announce": "ನà³\80ವà³\81 à²¤à²¾à²¤à³\8dà²\95ಾಲಿà²\95 à²\87-à²\85à²\82à²\9aà³\86 à²\95à³\8bಡà³\8d à²\85ನà³\8dನà³\81 à²\89ಪಯà³\8bà²\97ಿಸಿ à²²à²¾à²\97à³\8d à²\87ನà³\8d à²\86à²\97ಿರà³\81ವಿರಿ.\nಲಾà²\97à³\8d à²\87ನà³\8d à²ªà³\82ರà³\8dಣà²\97à³\8aಳಿಸಲà³\81 à²¨à³\80ವಿಲà³\8dಲ à²¹à³\8aಸ à²ªà³\8dರವà³\87ಶಪದ à²¨à³\80ಡಬà³\87à²\95à³\81:",
+       "resetpass_announce": "ಲಾà²\97à³\8d à²\87ನà³\8d à²ªà³\82ರà³\8dಣà²\97à³\8aಳಿಸಲà³\81 à²¨à³\80ವà³\81 à²¹à³\8aಸ à²ªà³\8dರವà³\87ಶಪದವನà³\8dನà³\81 à²¨à²®à³\82ದಿಸಬà³\87à²\95à³\81.",
        "resetpass_header": "ಖಾತೆಯ ಪ್ರವೇಶಪದ ಬದಲಾಯಿಸಿ",
        "oldpassword": "ಹಳೆಯ ಪ್ರವೇಶ ಪದ",
        "newpassword": "ಹೊಸ ಪ್ರವೇಶ ಪದ",
        "retypenew": "ಹೊಸ ಪ್ರವೇಶಪದವನ್ನು ಮತ್ತೆ ಟೈಪಿಸು:",
        "resetpass_submit": "ಪ್ರವೇಶ ಪದವನ್ನು ನಿಶ್ಚಯಿಸಿ ಲಾಗ್ ಇನ್ ಆಗಿ",
-       "changepassword-success": "ನಿಮ್ಮ ಪ್ರವೇಶ ಪದವನ್ನು ಯಶಸ್ವಿಯಾಗಿ ಬದಲಾಯಿಸಲಾಗಿದೆ. ಈಗ ನಿಮ್ಮನ್ನು ಲಾಗ್ ಇನ್ ಮಾಡಲಾಗುತ್ತಿದೆ...",
+       "changepassword-success": "ನಿಮ್ಮ ಪ್ರವೇಶಪದವನ್ನು ಬದಲಾಯಿಸಲಾಗಿದೆ!",
+       "changepassword-throttled": "ನೀವು ಬಹಳ ಸಾರಿ ಲಾಗ್ ಇನ್ ಆಗಲು ಪ್ರಯತ್ನಿಸಿರುವಿರಿ. \nಮತ್ತೆ ಪ್ರಯತ್ನಿಸಲು $1 ಕಾಯಬೇಕು.",
+       "botpasswords": "ಬಾಟ್ ಪ್ರವೇಶ ಪದಗಳು",
        "resetpass_forbidden": "ಪ್ರವೇಶಪದಗಳನ್ನು ಬದಲಾಯಿಸುವಂತಿಲ್ಲ.",
        "resetpass-no-info": "ನೀವು ಈ ಪುಟವನ್ನು ನೇರತಲುಪಲು ಲಾಗಿನ್ ಆಗಿರುವುದು ಆವಶ್ಯಕ.",
        "resetpass-submit-loggedin": "ಪ್ರವೇಶಪದ ಬದಲಾಯಿಸು",
        "sig_tip": "ಸಮಯಮುದ್ರೆಯೊಂದಿಗೆ ನಿಮ್ಮ ಸಹಿ",
        "hr_tip": "ಅಡ್ಡ ಗೆರೆ (ಆದಷ್ಟು ಕಡಿಮೆ ಉಪಯೋಗಿಸಿ)",
        "summary": "ಸಾರಾಂಶ:",
-       "subject": "ವಿಷಯ/ತಲೆಬರಹ:",
+       "subject": "ವಿಷಯ:",
        "minoredit": "ಇದು ಚುಟುಕಾದ ಬದಲಾವಣೆ",
        "watchthis": "ಈ ಪುಟವನ್ನು ವೀಕ್ಷಿಸಿ",
        "savearticle": "ಪುಟವನ್ನು ಉಳಿಸಿ",
+       "savechanges": "ಬದಲಾವಣೆಗಳನ್ನು ಉಳಿಸಿ",
        "publishpage": "ಪುಟವನ್ನು ಪ್ರಕಟಿಸು",
        "publishchanges": "ಬದಲಾವಣೆಗಳನ್ನು ಪ್ರಕಟಿಸು",
        "preview": "ಮುನ್ನೋಟ",
        "showpreview": "ಮುನ್ನೋಟ ತೋರಿಸು",
        "showdiff": "ಬದಲಾವಣೆಗಳನ್ನು ತೋರಿಸು",
-       "anoneditwarning": "'''ಎಚ್ಚರ:''' ನೀವು ಲಾಗ್ ಇನ್ ಆಗಿಲ್ಲ. ನಿಮ್ಮ ಐಪಿ ವಿಳಾಸವು ಪುಟದ ಸಂಪಾದನೆಗಳ ಇತಿಹಾಸದಲ್ಲಿ ದಾಖಲಾಗುತ್ತದೆ.",
+       "blankarticle": "<strong>ಎಚ್ಚರಿಕೆ:</strong> ನೀವು ಸೃಷ್ಟಿಸುತ್ತಿರುವ ಪುಟ ಖಾಲಿ ಇದೆ.\n\"{{int:savearticle}}\" ಅನ್ನು ಮತ್ತೆ ಕ್ಲಿಕ್ಕಿಸಿದರೆ, ಏನೂ ಇರದಂತೆಯೆ ಈ ಪುಟವು ಸೃಷ್ಟಿಯಾಗುತ್ತದೆ.",
+       "anoneditwarning": "<strong>ಎಚ್ಚರ:</strong> ನೀವು ಲಾಗ್ ಇನ್ ಆಗಿಲ್ಲ. ನೀವು ಸಂಪಾದನೆ ಮಾಡಿದಲ್ಲಿ ನಿಮ್ಮ ಐಪಿ ವಿಳಾಸವು ಎಲ್ಲರಿಗೂ ಕಾಣಲು ಸಿಗುತ್ತದೆ. ನೀವು <strong>[$1 ಲಾಗ್ ಇನ್ ಆದರೆ]</strong> ಅಥವ <strong>[$2 ಹೊಸ ಖಾತೆಯನ್ನು ಸೃಷ್ಟಿಸಿದರೆ]</strong>, ನಿಮ್ಮ ಸಂಪಾದನೆಗಳನ್ನು ನೀವು ನಿಮ್ಮ ಬಳಕೆದಾರ ಹೆಸರಿನ ಅಡಿಯಲ್ಲಿ ಪ್ರದರ್ಶಿಸಬಹುದು.",
        "anonpreviewwarning": "''ನೀವು ಲಾಗಿನ್ ಆಗಿಲ್ಲ . ಉಳಿಸಲು ಪ್ರಯತ್ನಿಸಿದಾಗ ನಿಮ್ಮ IP ವಿಳಾಸವನ್ನು ಈ ಪುಟದ ಸಂಪಾದನೆ ಇತಿಹಾಸದಲ್ಲಿ ನಮೂದಿಸಲಗುವುದು.''",
        "missingsummary": "'''ಗಮನಿಸಿ:''' ನಿಮ್ಮ ಸಂಪಾದನೆಯ ಸಾರಾಂಶವನ್ನು ನೀವು ನೀಡಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ \"ಉಳಿಸು\" ಗುಂಡಿಯನ್ನು ಒತ್ತಿದರೆ, ಸಾರಾಂಶವಿಲ್ಲದೆಯೇ ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಉಳಿಸಲಾಗುವುದು.",
        "missingcommenttext": "ಕೆಳಗೆ ಒಂದು ಟಿಪ್ಪಣಿ ನಮೂದಿಸಿ",
-       "missingcommentheader": "'''ಗಮನಿಸಿ:''' ಈ ವ್ಯಾಖ್ಯಾನಕ್ಕೆ ವಿಷಯ ಅಥವ ತಲೆಬರಹ ನೀವು ಸೂಚಿಸಿಲ್ಲ. ನೀವು \"{{int:savearticle}}\"\nಮತ್ತೊಮೆ ಒತ್ತಿದರೆ ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಹಾಗೆಯೇ ಉಳಿಸಲಾಗುವುದು.",
+       "missingcommentheader": "<strong>ಗಮನಿಸಿ:</strong> ನಿಮ್ಮ ಸಂಪಾದನೆಯ ಸಾರಾಂಶವನ್ನು ನೀವು ನೀಡಿಲ್ಲ. ಮತ್ತೊಮ್ಮೆ \"{{int:savearticle}}\" ಅನ್ನು ಒತ್ತಿದರೆ, ಸಾರಾಂಶವಿಲ್ಲದೆಯೇ ನಿಮ್ಮ ಸಂಪಾದನೆಯನ್ನು ಉಳಿಸಲಾಗುವುದು.",
        "summary-preview": "ತಾತ್ಪರ್ಯ ಮುನ್ನೋಟ:",
        "subject-preview": "ವಿಷಯದ ಮುನ್ನೋಟ:",
        "blockedtitle": "ಈ ಸದಸ್ಯರನ್ನು ತಡೆ ಹಿಡಿಯಲಾಗಿದೆ.",
        "whitelistedittext": "ಪುಟಗಳನ್ನು ಸಂಪಾದಿಸಲು ನೀವು $1 ಆಗಬೇಕು.",
        "confirmedittext": "ಪುಟಗಳನ್ನು ಸಂಪಾದಿಸುವ ಮುನ್ನ ನೀವು ನಿಮ್ಮ ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ಧೃಡೀಕರಿಸಬೇಕು.\nದಯವಿಟ್ಟು [[Special:Preferences|ಬಳಕೆದಾರ ಆಯ್ಕೆಗಳು]] ಪುಟದಲ್ಲಿ ತಮ್ಮ ಇ-ಅಂಚೆ ವಿಳಾಸವನ್ನು ನಮೂದಿಸಿ ಮತ್ತು ಧೃಡೀಕರಿಸಿ.",
        "nosuchsectiontitle": "ಆ ಹೆಸರಿನ ವಿಭಾಗ ಯಾವುದೂ ಇಲ್ಲ",
-       "nosuchsectiontext": "ನೀವು ಅಸ್ಥಿತ್ವದಲ್ಲಿ ಇರದ ಒಂದು ವಿಭಾಗವನ್ನು ಸಂಪಾದಿಸಲು ಪ್ರಯತ್ನಿಸಿದಿರಿ.",
+       "nosuchsectiontext": "ನೀವು ಅಸ್ಥಿತ್ವದಲ್ಲಿ ಇರದ ಒಂದು ವಿಭಾಗವನ್ನು ಸಂಪಾದಿಸಲು ಪ್ರಯತ್ನಿಸಿದಿರಿ.\nನೀವು ಪುಟವನ್ನು ವೀಕ್ಷಿಸುವಾಗ ಆ ವಿಭಾಗವು ಸ್ಥಳಾಂತರಗೊಂಡಿರಬಹುದು ಅಥವ ಅಳಿಸಲ್ಪಟ್ಟಿರಬಹುದು.",
        "loginreqtitle": "ಲಾಗಿನ್ ಆಗಬೇಕು",
        "loginreqlink": "ಲಾಗ್ ಇನ್",
        "loginreqpagetext": "ಇತರ ಪುಟಗಳನ್ನು ನೋಡಲು ನೀವು $1 ಆಗಬೇಕು.",
        "newarticle": "(ಹೊಸತು)",
        "newarticletext": "ಇನ್ನೂ ಅಸ್ಥಿತ್ವದಲ್ಲಿ ಇರದ ಪುಟದ ಲಿಂಕ್ ಅನ್ನು ನೀವು ಒತ್ತಿರುವಿರಿ.\nಈ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸಲು ಕೆಳಗಿನ ಚೌಕದಲ್ಲಿ ಬರೆಯಲು ಆರಂಭಿಸಿರಿ.\n(ಹೆಚ್ಚು ಮಾಹಿತಿಗೆ [$1 ಸಹಾಯ ಪುಟ] ನೋಡಿ).\nಈ ಪುಟಕ್ಕೆ ನೀವು ತಪ್ಪಾಗಿ ಬಂದಿದ್ದಲ್ಲಿ ನಿಮ್ಮ ಬ್ರೌಸರ್‍ನ '''back''' ಬಟನ್ ಅನ್ನು ಒತ್ತಿ.",
        "anontalkpagetext": "----''ಇದು ಖಾತೆಯೊಂದನ್ನು ಹೊಂದಿರದ ಅನಾಮಧೇಯ ಬಳಕೆದಾರರೊಬ್ಬರ ಚರ್ಚೆ ಪುಟ.\nಖಾತೆಯಿಲ್ಲದಿರುವುದರಿಂದ ಅವರನ್ನು ಗುರುತಿಸಲು ಅವರ IP ವಿಳಾಸವನ್ನು ಉಪಯೋಗಿಸುತ್ತಿದ್ದೇವೆ.\nಈ ರೀತಿಯ IP ವಿಳಾಸವು ಅನೇಕ ಬಳಕೆದಾರರಿಂದ ಉಪಯೋಗದಲ್ಲಿರಬಹುದು.\nನೀವು ಅನಾಮಧೇಯ ಬಳಕೆದಾರರಾಗಿದ್ದಲ್ಲಿ, ಹಾಗು ನಿಮಗೆ ಸಂಬಂಧವಿಲ್ಲದಂತ ಸಂದೇಶಗಳು ಬರುತ್ತಿವೆ ಎಂದು ಅನಿಸಿದರೆ, ಮುಂದೆ ಬೇರೆ ಅನಾಮಧೇಯ ಬಳಕೆದಾರರೊಂದಿಗೆ ತಪ್ಪಾಗಿ ಗುರುತಿಸಬಾರದೆಂದಿದ್ದರೆ ದಯವಿಟ್ಟು [[Special:CreateAccount|ಸದಸ್ಯರಾಗಿ]] ಅಥವ [[Special:UserLogin|ಲಾಗ್ ಇನ್ ಆಗಿ]].''",
-       "noarticletext": "à²\88 à²ªà³\81à²\9fದಲà³\8dಲಿ à²¸à²¦à³\8dಯà²\95à³\8dà²\95à³\86 à²\8fನà³\82 à²\87ಲà³\8dಲ.\nನà³\80ವà³\81 à²\87ತರ à²ªà³\81à²\9fà²\97ಳಲà³\8dಲಿ [[Special:Search/{{PAGENAME}}|à²\88 à²¹à³\86ಸರನà³\8dನà³\81 à²¹à³\81ಡà³\81à²\95ಬಹà³\81ದà³\81]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à²¸à²\82ಬà²\82ಧಿತ à²¦à²¾à²\96ಲà³\86à²\97ಳನà³\8dನà³\81 à²¹à³\81ಡà³\81à²\95ಬಹà³\81ದà³\81],\nà²\85ಥವ [{{fullurl:{{FULLPAGENAME}}|action=edit}} à²\88 à²ªà³\81à²\9fವನà³\8dನà³\81 à²¸à²\82ಪಾದಿಸಬಹುದು]</span>.",
-       "noarticletext-nopermission": "ಈ ಪುಟದಲ್ಲಿ ಸದ್ಯಕ್ಕೆ ಯಾವ ಪಠ್ಯವೂ ಇಲ್ಲ.\nನೀವು ಇತರ ಪುಟಗಳಲ್ಲಿ [[ವಿಶೇಷ:Search/{{PAGENAME}}|ಈ ಶೀರ್ಷಿಕೆಗಾಗಿ ಹುಡುಕಬಹುದು]],\nಅಥವಾ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ಸಂಬಂಧಿಸಿದ ದಾಖಲಾತಿ ಹುಡುಕಬಹುದು]</span>, ಆದರೆ ನಿಮಗೆ ಈ ಪುಟವನ್ನು ಸಂಪಾದಿಸಲು ಅನುಮತಿಯಿಲ್ಲ.",
+       "noarticletext": "à²\88 à²ªà³\81à²\9fದಲà³\8dಲಿ à²¸à²¦à³\8dಯà²\95à³\8dà²\95à³\86 à²\8fನà³\82 à²\87ಲà³\8dಲ.\nನà³\80ವà³\81 à²\87ತರ à²ªà³\81à²\9fà²\97ಳಲà³\8dಲಿ [[Special:Search/{{PAGENAME}}|à²\88 à²¹à³\86ಸರನà³\8dನà³\81 à²¹à³\81ಡà³\81à²\95ಬಹà³\81ದà³\81]],\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} à²¸à²\82ಬà²\82ಧಿತ à²¦à²¾à²\96ಲà³\86à²\97ಳನà³\8dನà³\81 à²¹à³\81ಡà³\81à²\95ಬಹà³\81ದà³\81],\nà²\85ಥವ [{{fullurl:{{FULLPAGENAME}}|action=edit}} à²\88 à²ªà³\81à²\9fವನà³\8dನà³\81 à²¸à³\83ಷà³\8dà²\9fಿಸಬಹುದು]</span>.",
+       "noarticletext-nopermission": "ಈ ಪುಟದಲ್ಲಿ ಸದ್ಯಕ್ಕೆ ಯಾವ ಪಠ್ಯವೂ ಇಲ್ಲ.\nನೀವು ಇತರ ಪುಟಗಳಲ್ಲಿ [[Special:Search/{{PAGENAME}}|ಈ ಶೀರ್ಷಿಕೆಗಾಗಿ ಹುಡುಕಬಹುದು]], ಅಥವಾ <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ಸಂಬಂಧಿಸಿದ ದಾಖಲೆಗಳನ್ನು ಹುಡುಕಬಹುದು]</span>, ಆದರೆ ನಿಮಗೆ ಈ ಪುಟವನ್ನು ಸೃಷ್ಟಿಸಲು ಅನುಮತಿಯಿಲ್ಲ.",
        "userpage-userdoesnotexist": "ಬಳಕೆದಾರ ಖಾತೆ \"<nowiki>$1</nowiki>\" ದಾಖಲಾಗಿಲ್ಲ. ನೀವು ಇದೇ ಪುಟವನ್ನು ಸೃಷ್ಟಿ/ಸಂಪಾದನೆ ಮಾಡಬೇಕೆಂದಿರುವಿರಿ ಎಂದು ಖಾತ್ರಿ ಮಾಡಿಕೊಳ್ಳಿ.",
        "blocked-notice-logextract": "ಈ ಬಳಕೆದಾರರನ್ನು  ಪ್ರಸ್ತುತವಾಗಿ  ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ. \nಇತ್ತೀಚಿನ  ನಿರ್ಬಂಧನೆಯ ದಾಖಲೆಯನ್ನು ಉಲ್ಲೇಖಕ್ಕಾಗಿ ಕೆಳಗೆ ಕೊಟ್ಟಿದೆ:",
        "usercssyoucanpreview": "'''ಗಮನಿಸಿ:''' ಉಳಿಸುವ ಮುನ್ನ 'ಮುನ್ನೋಟ' ಗುಂಡಿಯನ್ನು ಉಪಯೋಗಿಸಿ ನಿಮ್ಮ ಹೊಸ CSS ಅನ್ನು ಪ್ರಯೋಗ ಮಾಡಿ.",
        "revertmerge": "ಸೇರ್ಪಡೆಯನ್ನು ತೊಡೆದುಹಾಕು",
        "mergelogpagetext": "ಒಂದು ಪುಟದ ಇತಿಹಾಸವನ್ನು ಇನ್ನೊಂದರೊಳಗೆ ಇತ್ತೀಚೆಗೆ ಸೇರ್ಪಡೆ ಮಾಡಲಾಗಿರುವ ಪಟ್ಟಿ ಕೆಳಗಿದೆ.",
        "history-title": "\"$1\" ಪುಟದ ಬದಲಾವಣೆಗಳ ಇತಿಹಾಸ",
+       "difference-title": "\"$1\" ಆವೃತ್ತಿಗಳ ಮಧ್ಯದ ಬದಲಾವಣೆಗಳು",
        "lineno": "$1 ನೇ ಸಾಲು:",
        "compareselectedversions": "ಆಯ್ಕೆ ಮಾಡಿದ ಆವೃತ್ತಿಗಳನ್ನು ಹೊಂದಾಣಿಕೆ ಮಾಡಿ ನೋಡಿ",
        "showhideselectedversions": "ಆಯ್ದ ಆವೃತ್ತಿಗಳನ್ನು ತೋರಿಸು/ಅಡಗಿಸು",
        "editundo": "ಹಿಂದಿನಂತೆ",
        "diff-empty": "( ಯಾವುದೇ ವ್ಯತ್ಯಾಸವಿಲ್ಲ )",
+       "diff-multi-sameuser": "(ಅದೇ ಬಳಕೆದಾರನ {{PLURAL:$1|ಮಧ್ಯದಲ್ಲಿನ ಬದಲಾವಣೆಯನ್ನು|$1 ಮಧ್ಯದ ಬದಲಾವಣೆಗಳನ್ನು}} ತೋರಿಸುತ್ತಿಲ್ಲ)",
        "searchresults": "ಶೋಧನೆಯ ಫಲಿತಾಂಶಗಳು",
        "searchresults-title": "\"$1\" ಅನ್ನು ಹುಡುಕಿದ ಫಲಿತಾಂಶಗಳು",
        "titlematches": "ಹೊಂದಿಕೆಯಿರುವ ಪುಟ ಶೀರ್ಷಿಕೆಗಳು",
        "shown-title": "ಪ್ರತಿ ಪುಟದಲ್ಲಿಯೂ $1 {{PLURAL:$1|result|results}} ತೋರಿಸು",
        "viewprevnext": "ವೀಕ್ಷಿಸು ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-exists": "'''\"[[:$1]]\" ಹೆಸರಿನ ಪುಟ ಈ ವಿಕಿಯಲ್ಲಿದೆ.'''",
-       "searchmenu-new": "'''''[[:$1]]'' ಪುಟವನ್ನು ಈ ವಿಕಿಯಲ್ಲಿ ಸೃಷ್ಟಿಸಿ!'''",
+       "searchmenu-new": "<strong>\"[[:$1]]\" ಪುಟವನ್ನು ಈ ವಿಕಿಯಲ್ಲಿ ಸೃಷ್ಟಿಸಿ!!</strong> {{PLURAL:$2|0=|See also the page found with your search.|See also the search results found.}}",
        "searchprofile-articles": "ಲೇಖನ ಪುಟ",
        "searchprofile-images": "ಮಲ್ಟಿಮೀಡಿಯ",
        "searchprofile-everything": "ಪ್ರತಿಯೊಂದು",
        "searchprofile-everything-tooltip": "ಎಲ್ಲಾ ಮಾಹಿತಿಗಳನ್ನು ಹುಡುಕಿ (ಚರ್ಚೆಯನ್ನೂ ಸೇರಿಸಿ)",
        "searchprofile-advanced-tooltip": "ಬಳಕೆಯ ನಾಮವರ್ಗಗಳಲ್ಲಿ ಹುಡುಕಿ",
        "search-result-size": "$1 ({{PLURAL:$2|೧ ಪದ|$2 ಪದಗಳು}})",
-       "search-redirect": "(ಪುನರ್ನಿರ್ದೇಶನ $1)",
+       "search-redirect": "($1 ಇಂದ ಪುನರ್ನಿರ್ದೇಶಿತ)",
        "search-section": "(ವಿಭಾಗ $1)",
        "search-suggest": "ನೀವು ಇದನ್ನು ಹುಡುಕುತ್ತಿರುವಿರೆ: $1",
        "search-interwiki-caption": "ಬಳಗದ ಇತರ ಯೋಜನೆಗಳು",
        "recentchanges-label-unpatrolled": "ಈ ಸಂಪಾದನೆಯನ್ನು ಇನ್ನೂ ಪರೀಕ್ಷೆಗೆ ಒಳಪಡಿಸಿಲ್ಲ",
        "recentchanges-label-plusminus": "ಪುಟದ ಗಾತ್ರವು ಇಷ್ಟು ಸಂಖ್ಯೆಯ ಬೈಟ್‍ಗಳಿಂದ ಬದಲಾಯಿಸಲ್ಪಟ್ಟಿದೆ",
        "recentchanges-legend-heading": "<strong>ಪರಿವಿಡಿ:</strong>",
+       "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|ಹೊಸ ಪುಟಗಳ ಪಟ್ಟಿ]]ಯನ್ನೂ ನೋಡಿ)",
        "rcnotefrom": "'''$2''' ಇಂದ ಆಗಿರುವ ಬದಲಾವಣೆಗಳು ಕೆಳಗಿವೆ (ಕೊನೆಯ '''$1'''ರವರೆಗೆ ತೋರಿಸಲಾಗಿದೆ).",
        "rclistfrom": "$3 $2 ಇಂದ ಪ್ರಾರಂಭಿಸಿ ಮಾಡಲಾದ ಬದಲಾವಣೆಗಳನ್ನು ನೋಡಿ",
        "rcshowhideminor": "ಚಿಕ್ಕಪುಟ್ಟ ಬದಲಾವಣೆಗಳನ್ನು $1",
        "deletereason-dropdown": "*ಸಾಮಾನ್ಯ ಅಳಿಸುವಿಕೆಯ ಕಾರಣಗಳು\n** ಸಂಪಾದಕರ ಕೋರಿಕೆ\n** ಕೃತಿಸ್ವಾಮ್ಯತೆಯ ಉಲ್ಲಂಘನೆ\n** Vandalism",
        "delete-edit-reasonlist": "ಅಳಿಸುವಿಕೆ ಕಾರಣಗಳನ್ನು ಸಂಪಾದಿಸು",
        "rollbacklink": "ತೊಡೆದುಹಾಕು",
+       "rollbacklinkcount": "$1 {{PLURAL:$1|ಸಂಪಾದನೆಯನ್ನು|ಸಂಪಾದನೆಗಳನ್ನು}} ತೊಡೆದುಹಾಕು",
        "changecontentmodel": "ಪುಟದ ವಿಷಯ ಮಾದರಿಯನ್ನು ಬದಲಾಯಿಸಿ",
        "changecontentmodel-legend": "ವಿಷಯ ಮಾದರಿಯನ್ನು ಬದಲಾಯಿಸಿ",
        "changecontentmodel-title-label": "ಪುಟ ಶೀರ್ಷಿಕೆ",
        "contributions": "{{GENDER:$1|User}} ಕಾಣಿಕೆಗಳು",
        "contributions-title": "$1 ಸದಸ್ಯರ ಕಾಣಿಕೆಗಳು",
        "mycontris": "ಕಾಣಿಕೆಗಳು",
+       "anoncontribs": "ಕಾಣಿಕೆಗಳು",
        "contribsub2": "$1 ($2) ಗೆ",
        "uctop": "(ಪ್ರಸಕ್ತ)",
        "month": "ಈ ತಿಂಗಳಿಂದ (ಮತ್ತು ಮುಂಚಿನ):",
        "whatlinkshere-next": "{{PLURAL:$1|ಮುಂದಿನ|ಮುಂದಿನ $1}}",
        "whatlinkshere-links": "← ಕೊಂಡಿಗಳು",
        "whatlinkshere-hideredirs": "$1 ಪುನರ್ನಿರ್ದೇಶನಗಳು",
-       "whatlinkshere-hidetrans": "$1 à²¸à³\87ರಿಸà³\81ವಿà²\95ೆಗಳು",
+       "whatlinkshere-hidetrans": "$1 à²¸à³\87ರà³\8dಪಡೆಗಳು",
        "whatlinkshere-hidelinks": "$1 ಕೊಂಡಿಗಳು",
        "whatlinkshere-hideimages": "$1 ಚಿತ್ರದ ಕೊಂಡಿಗಳು",
        "whatlinkshere-filters": "ಶೋಧಕಗಳು",
        "tooltip-pt-anonuserpage": "ನೀವು ಸಂಪಾದನೆ ಮಾಡುತ್ತಿರುವ ipಯ ಬಳಕೆದಾರ ಪುಟ",
        "tooltip-pt-mytalk": "ನಿಮ್ಮ ಚರ್ಚೆ ಪುಟ",
        "tooltip-pt-anontalk": "ಈ ip ವಿಳಾಸದಿಂದ ಮಾಡಲಾದ ಸಂಪಾದನೆಗಳ ಬಗ್ಗೆ ಚರ್ಚೆ",
-       "tooltip-pt-preferences": "ನನà³\8dನ ಆಯ್ಕೆಗಳು",
+       "tooltip-pt-preferences": "ನಿಮà³\8dಮ ಆಯ್ಕೆಗಳು",
        "tooltip-pt-watchlist": "ನೀವು ಬದಲಾವಣೆಗಳ ಮೇಲೆ ನಿಗಾ ವಹಿಸುತ್ತಿರುವ ಪುಟಗಳ ಪಟ್ಟಿ",
        "tooltip-pt-mycontris": "ನಿಮ್ಮ ಕಾಣಿಕೆಗಳ ಪಟ್ಟಿ",
        "tooltip-pt-login": "ನೀವು ಲಾಗ್ ಇನ್ ಆಗಬೇಕೆಂದು ಕೋರುತ್ತೇವೆ, ಆದರೆ ಅದು ಖಡ್ಡಾಯ ಎನೂ ಅಲ್ಲ.",
        "tooltip-t-recentchangeslinked": "ಈ ಪುಟದಿಂದ ಸಂಪರ್ಕ ಹೊಂದಿರುವ ಪುಟಗಳಲ್ಲಿನ ಇತ್ತೀಚಿನ ಬದಲಾವಣೆಗಳು",
        "tooltip-feed-rss": "ಈ ಪುಟಕ್ಕೆ RSS ಫೀಡು",
        "tooltip-feed-atom": "ಈ ಪುಟಕ್ಕೆ Atom ಫೀಡು",
-       "tooltip-t-contributions": "ಈ ಸದಸ್ಯರ ಕಾಣಿಕೆಗಳ ಪಟ್ಟಿಯನ್ನು ತೋರಿಸು",
+       "tooltip-t-contributions": "{{GENDER:$1|ಈ ಸದಸ್ಯರ}} ಕಾಣಿಕೆಗಳ ಪಟ್ಟಿ",
        "tooltip-t-emailuser": "ಈ ಸದಸ್ಯರಿಗೆ ಇ-ಅಂಚೆಯನ್ನು ಕಳುಹಿಸು",
        "tooltip-t-upload": "ಫೈಲನ್ನು ಮೇಲಕ್ಕೆರಿಸಿ",
        "tooltip-t-specialpages": "ಎಲ್ಲಾ ವಿಶೇಷ ಪುಟಗಳ ಪಟ್ಟಿ",
        "exif-bitspersample": "ಪ್ರತಿ ಭಾಗಕ್ಕಿರುವ ಬಿಟ್‍ಗಳು",
        "exif-compression": "ಕುಗ್ಗಿಸಲು ಉಪಯೋಗಿಸಿರುವ ಪ್ರಕಾರ",
        "exif-photometricinterpretation": "ಚಿತ್ರಬಿಂದು ರಚನೆ",
+       "exif-orientation": "ದೃಷ್ಟಿಕೋನ",
        "exif-ycbcrpositioning": "Y ಮತ್ತು C ಸ್ಥಾನ",
        "exif-datetime": "ಫೈಲು ಬದಲಾದ ದಿನಾಂಕ ಮತ್ತು ಕಾಲ",
        "exif-imagedescription": "ಚಿತ್ರದ ಶೀರ್ಷಿಕೆ",
        "exif-artist": "ಕರ್ತೃ",
        "exif-copyright": "ಕೃತಿಸ್ವಾಮ್ಯತೆಯನ್ನು ಹೊಂದಿರುವವರು",
        "exif-exifversion": "Exif ಆವೃತ್ತಿ",
+       "exif-colorspace": "ರಂಗ ವಿಸ್ತಾರ",
        "exif-pixelxdimension": "ಭಾವಚಿತ್ರದ ಅಗಲ",
        "exif-pixelydimension": "ಭಾವಚಿತ್ರದ ಎತ್ತರ",
        "exif-usercomment": "ಬಳಕೆದಾರನ ಟಿಪ್ಪಣಿ",
        "revdelete-summary": "ಸಂಪಾದನೆಯ ತಾತ್ಪರ್ಯ",
        "feedback-message": "ಸಂದೇಶ:",
        "feedback-subject": "ವಿಷಯ:",
-       "searchsuggest-search": "ಹುಡುಕು",
+       "searchsuggest-search": "{{SITENAME}} ಅನ್ನು ಹುಡುಕಿ",
        "duration-seconds": "$1 {{PLURAL:$1|ಕ್ಷಣ|ಕ್ಷಣಗಳು}}",
        "duration-minutes": "$1 {{PLURAL:$1|ನಿಮಿಷ|ನಿಮಿಷಗಳು}}",
        "duration-hours": "$1 {{PLURAL:$1|ಘಂಟೆ|ಘಂಟೆಗಳು}}",
index 8dabe1a..bc06966 100644 (file)
        "poolcounter-usage-error": "사용법 오류: $1",
        "aboutsite": "{{SITENAME}} 소개",
        "aboutpage": "Project:소개",
-       "copyright": "ë\82´ì\9a©ì\9d\80 ë³\84ë\8f\84ë¡\9c ëª\85ì\8b\9cí\95\98ì§\80 ì\95\8aì\9d\84 ê²½ì\9a° $1에 따라 사용할 수 있습니다.",
+       "copyright": "ë³\84ë\8f\84ë¡\9c ëª\85ì\8b\9cí\95\98ì§\80 ì\95\8aì\9d\80 ê²½ì\9a°, ë\82´ì\9a©ì\9d\80 $1에 따라 사용할 수 있습니다.",
        "copyrightpage": "{{ns:project}}:저작권",
        "currentevents": "요즘 화제",
        "currentevents-url": "Project:요즘 화제",
        "prefs-personal": "사용자 정보",
        "prefs-rc": "최근 바뀜",
        "prefs-watchlist": "주시문서 목록",
-       "prefs-editwatchlist": "주시목록 편집",
+       "prefs-editwatchlist": "주ì\8b\9c문ì\84\9c ëª©ë¡\9d í\8e¸ì§\91",
        "prefs-editwatchlist-label": "주시문서 목록의 항목을 편집합니다:",
        "prefs-editwatchlist-edit": "주시문서의 제목을 보고 지우기",
        "prefs-editwatchlist-raw": "주시문서 목록 직접 편집하기",
        "movelogpagetext": "아래는 이동된 모든 문서의 목록입니다.",
        "movesubpage": "{{PLURAL:$1|하위 문서}}",
        "movesubpagetext": "이 문서에는 다음 {{PLURAL:$1|하위 문서}} $1개가 있습니다.",
+       "movesubpagetalktext": "관련 토론 문서에 속한 $1개의 {{PLURAL:$1|하위 문서}}는 아래와 같습니다.",
        "movenosubpage": "이 문서에는 하위 문서가 존재하지 않습니다.",
        "movereason": "이유:",
        "revertmove": "되돌리기",
        "pageinfo-category-pages": "문서 수",
        "pageinfo-category-subcats": "하위 분류 수",
        "pageinfo-category-files": "파일 수",
+       "pageinfo-user-id": "사용자 ID",
        "markaspatrolleddiff": "점검한 문서로 표시",
        "markaspatrolledtext": "이 문서를 점검한 것으로 표시",
        "markaspatrolledtext-file": "이 파일 버전을 점검한 것으로 표시",
        "dberr-again": "잠시 기다리고 나서 다시 불러오세요.",
        "dberr-info": "(데이터베이스 서버에 연결할 수 없습니다: $1)",
        "dberr-info-hidden": "(데이터베이스 서버에 연결할 수 없습니다)",
-       "dberr-usegoogle": "그 동안 Google을 통해 검색할 수도 있습니다.",
+       "dberr-usegoogle": "그동안 Google을 통해 검색할 수도 있습니다.",
        "dberr-outofdate": "수집된 내용은 오래된 것일 수도 있음을 참고하세요.",
        "dberr-cachederror": "다음은 요청한 문서의 캐시된 복사본이며, 최신이 아닐 수도 있습니다.",
        "htmlform-invalid-input": "입력한 값에 문제가 있습니다.",
        "usercssispublic": "주목해 주십시오: CSS의 하위 문서들은 다른 사용자들이 볼 수 있기 때문에 기밀 데이터를 포함해서는 안 됩니다.",
        "restrictionsfield-badip": "유효하지 않은 IP 주소나 대역: $1",
        "restrictionsfield-label": "허용된 IP 대역:",
-       "restrictionsfield-help": "줄 단위의 하나의 IP 주소 또는 CIDR 대역입니다. 모든 곳에 적용하려면, 다음을 사용하세요<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "줄 단위의 하나의 IP 주소 또는 CIDR 대역입니다. 모든 곳에 적용하려면, 다음을 사용하세요<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "오류: $1",
+       "edit-error-long": "오류:\n\n$1"
 }
index ebee06b..073f2a3 100644 (file)
@@ -18,7 +18,8 @@
                        "Uygar",
                        "MikaelF",
                        "Macofe",
-                       "Matma Rex"
+                       "Matma Rex",
+                       "Stryn"
                ]
        },
        "tog-underline": "Xetekê di bin girêdanê de çêke:",
        "yourpasswordagain": "Şîfreyê dîsa binivîse:",
        "createacct-yourpasswordagain": "Şîfreyê bipejirîne",
        "createacct-yourpasswordagain-ph": "Şîfreyê ji nû ve binivîse",
-       "remembermypassword": "Şifreya min di her têketina min de bîne bîra xwe (herî zêde $1 {{PLURAL:$1|rojekê|rojan}})",
        "userlogin-remembermypassword": "Min têketî bihêle",
        "userlogin-signwithsecure": "Girêdana parastî bikarbîne",
        "yourdomainname": "Domainê te",
        "preview": "Pêşdîtin",
        "showpreview": "Pêşdîtinê nîşan bide",
        "showdiff": "Guherandinan nîşan bide",
-       "anoneditwarning": "<strong>Hişyarî:<strong> Tu netêketî yî! Navnîşana IP'ya te wê di dîroka guherandina vê rûpelê de bê tomarkirin. Heke tu <strong>[$1 têkevî]</strong> an jî  <strong>[$2 hesabekî çêbikî]</strong>, li gel sûdên te yên din guhertinên ku tu bikî jî wê ji nasnavê te re bê atfkirin.",
+       "anoneditwarning": "<strong>Hişyarî:</strong> Tu netêketî yî! Navnîşana IP'ya te wê di dîroka guherandina vê rûpelê de bê tomarkirin. Heke tu <strong>[$1 têkevî]</strong> an jî <strong>[$2 hesabekî çêbikî]</strong>, li gel sûdên te yên din guhertinên ku tu bikî jî wê ji nasnavê te re bê atfkirin.",
        "anonpreviewwarning": "''Tu ne têketî yî. Tomarkirin wê navnîşana IP'ya te di dîroka guhertinan de nîşan bide.''",
        "missingsummary": "<span style=\"color:#990000;\">'''Zanibe:'''</span> Te nivîsekî kurt ji bo guherandinê ra nenivîsand. Eger tu niha carekî din li Tomar xê, guherandinê te vê nivîsekî kurt yê were tomarkirin.",
        "missingcommenttext": "Ji kerema xwe kurteya naverokê li jêr binivisîne.",
        "undo-success": "Ev guherandin dikare were şûndekirin. Ji kerema xwe ferqa piştî tomarkirinê bibîne, bê ka tu dixwazî vê guhertoyê tomar bikî an na. Ger te şaşîtiyek kir, ji kerema xwe derkeve.",
        "undo-failure": "Ev guhertin ji ber guherandinên piştî wê re nikare were şûndekirin.",
        "undo-summary": "Guhertoya $1 ya [[Special:Contributions/$2|$2]] ([[User talk:$2|gotûbêj]]) şûnde kir",
-       "cantcreateaccounttitle": "Hesab nikarîbû were çêkirin",
        "cantcreateaccount-text": "Çêkirinê hesaban ji vê IP'yê ('''$1''') hatiye qedexekirin ji [[User:$3|$3]].\n\nSedema qedexekirina $3 ev e: ''$2''",
        "viewpagelogs": "Guhertinên vê rûpelê bibîne",
        "nohistory": "Dîroka guherandina vê rûpelê nîne.",
        "feedback-back": "Paşve",
        "feedback-cancel": "Betal bike",
        "feedback-close": "Çêbû",
-       "feedback-error-title": "Çewtî",
        "feedback-message": "Peyam:",
        "feedback-subject": "Mijar:",
        "feedback-submit": "Tomar bike",
index 5c34a58..ee793ef 100644 (file)
        "tooltip-ca-move": "Movere hanc paginam",
        "tooltip-ca-watch": "Hanc paginam observandam habere",
        "tooltip-ca-unwatch": "Hanc paginam non iam observandam habere",
-       "tooltip-search": "Aliquid in {{grammar:ablative|{{SITENAME}}}} quaerere",
+       "tooltip-search": "Quaerere apud {{grammar:accusative|{{SITENAME}}}}",
        "tooltip-search-go": "Si modo sit, paginam huius ipsius tituli invisere",
        "tooltip-search-fulltext": "Hunc textum in paginis requirere",
        "tooltip-p-logo": "Ire ad paginam primam",
        "feedback-close": "Factum",
        "feedback-error2": "Error: Recensio non additur",
        "feedback-message": "Nuntius:",
-       "searchsuggest-search": "Quaerere",
+       "searchsuggest-search": "Quaerere apud {{grammar:accusative|{{SITENAME}}}}",
        "searchsuggest-containing": "continens...",
        "api-error-empty-file": "Fasciculus inmissus vacuus est.",
        "api-error-emptypage": "Vacuas novas paginas creare non licet.",
index ec6d6a2..57262ad 100644 (file)
        "movelogpagetext": "Dëst ass eng Lëscht vun alle geréckelte Säiten.",
        "movesubpage": "{{PLURAL:$1|Ënnersäit|Ënnersäiten}}",
        "movesubpagetext": "Dës Säit huet $1 {{PLURAL:$1|Ënnersäit|Ënnersäiten}} déi hei ënnendrënner stinn.",
+       "movesubpagetalktext": "D'Diskussiounssäit déi dozou gehéiert huet $1 {{PLURAL:$1|Ënnersäit|Ënnersäiten}} déi hei ënnendrënner stinn.",
        "movenosubpage": "Dës Säit huet keng Ënnersäiten.",
        "movereason": "Grond:",
        "revertmove": "zréck réckelen",
        "pageinfo-category-pages": "Zuel vun de Säiten",
        "pageinfo-category-subcats": "Zuel vun den Ënnerkategorien",
        "pageinfo-category-files": "Zuel vun de Fichieren",
+       "pageinfo-user-id": "Benotzernummer",
        "markaspatrolleddiff": "Als nogekuckt markéieren",
        "markaspatrolledtext": "Dës Säit als nogekuckt markéieren",
        "markaspatrolledtext-file": "Dës Versioun vum Fichier als nogekuckt markéieren",
        "tags-delete-explanation-initial": "Dir sidd am Gaang d'Markéierung (tag) \"$1\" aus der Datebank ze läschen.",
        "tags-delete-explanation-warning": "Dës Aktioun ass <strong>irreversibel</strong> a <strong>kann net réckgängeg gemaach ginn</strong>, net emol vun den Administrateure vun der Datebank. Sidd Iech sécher datt et dës Markéierung ass déi Dir läsche wëllt.",
        "tags-delete-reason": "Grond:",
+       "tags-delete-submit": "Dës Markéierung definitiv läschen",
        "tags-delete-not-found": "D'Markéierung (tag) ''$1'' gëtt et net.",
        "tags-activate-title": "Markéierung (tag) aktivéieren",
        "tags-activate-question": "Dir sidd am Gaang d'Markéierung \"$1\" z'aktivéieren.",
index 4fec1a2..720810d 100644 (file)
@@ -16,7 +16,7 @@
                ]
        },
        "tog-underline": "Sottolineâ i collegamenti",
-       "tog-hideminor": "asconde e modifiche minori inte ùrtime modifiche",
+       "tog-hideminor": "Ascondi e modiffiche minoî inti urtime modiffiche",
        "tog-hidepatrolled": "Ascondi e modifiche verificæ inte ùrtime modifiche",
        "tog-newpageshidepatrolled": "Ascondi e paggine verificæ da  l'elenco de paggine ciù reçenti",
        "tog-hidecategorization": "Ascondi a categorizzassion de paggine",
        "tog-fancysig": "Tratta a firma comme wikitesto (sensa un collegamento aotomatico)",
        "tog-uselivepreview": "Abillita a fonsion de l'anteprimma in diretta",
        "tog-forceeditsummary": "Domanda conferma se o campo ogetto o l'è veuo",
-       "tog-watchlisthideown": "Ascondi e mæ modiffiche da-a lista che tegno d'oeuggio",
-       "tog-watchlisthidebots": "Ascondi e modiffiche di bot da-a lista che tegno d'oeuggio",
-       "tog-watchlisthideminor": "Ascondi e modiffiche menoî da-a lista che tegno d'oeuggio",
-       "tog-watchlisthideliu": "Ascondi e modiffiche di utenti intræ da-a lista che tegno d'oeuggio",
+       "tog-watchlisthideown": "Ascondi e mæ modiffiche da-a lista sotta-oservaçion",
+       "tog-watchlisthidebots": "Ascondi e modiffiche di bot da-a lista sotta oservaçion",
+       "tog-watchlisthideminor": "Ascondi e modiffiche minoî da-a lista sotta oservaçion",
+       "tog-watchlisthideliu": "Ascondi e modiffiche di utenti intræ da-a lista sotta-oservaçion",
        "tog-watchlistreloadautomatically": "Recarrega aotomaticamente a lista di oservæ quande vegne cangiòu un filtro (ghe veu o JavaScript)",
-       "tog-watchlisthideanons": "Ascondi e modiffiche di utenti anonnimi da-a lista che tegno d'oeuggio",
-       "tog-watchlisthidepatrolled": "Ascondi e modiffiche za controllæ da-a lista che tegno d'oeuggio",
+       "tog-watchlisthideanons": "Ascondi e modiffiche di utenti anonnimi da-a lista sotta-oservaçion",
+       "tog-watchlisthidepatrolled": "Ascondi e modiffiche za controllæ da-a lista sotta-oservaçion",
        "tog-watchlisthidecategorization": "Ascondi a categorizzassion de paggine",
        "tog-ccmeonemails": "Mandime 'na coppia de e-mail che mando a-i atri utenti",
        "tog-diffonly": "No mostrâ o contegnuo da paggina sotta o confronto tra verscioin",
-       "tog-showhiddencats": "Fa vedde e categorîe ascose",
+       "tog-showhiddencats": "Fanni vedde e categorîe ascose",
        "tog-norollbackdiff": "Ometti o confronto tra verscioin doppo ch'ho fæto o ripristino",
        "tog-useeditwarning": "Avertime se lascio 'na paggina de modiffica sens'avei sarvou i cangi",
        "tog-prefershttps": "Adœuvia delongo una connescion segua quande se intra",
        "tool-link-userrights": "Modiffica groppi {{GENDER:$1|utente}}",
        "tool-link-emailuser": "Manda un'e-mail a questo {{GENDER:$1|utente}}",
        "userpage": "Veddi a paggina utente",
-       "projectpage": "Veddi a paggina de servissio",
+       "projectpage": "Amia a paggina de serviççio",
        "imagepage": "Vizualizza a paggina do file",
        "mediawikipage": "Vizualizza o messaggio",
        "templatepage": "Vizualizza o modello",
        "bold_tip": "Grascetto",
        "italic_sample": "Testo in corscivo",
        "italic_tip": "Corscivo",
-       "link_sample": "Nomme de l'ingancio",
+       "link_sample": "Tittolo de l'ingancio",
        "link_tip": "Ingancio interno",
-       "extlink_sample": "http://www.example.com Nomme de l'ingancio",
+       "extlink_sample": "http://www.example.com tittolo de l'ingancio",
        "extlink_tip": "Colegaménto esterno (inclûdde o prefisso http:// )",
        "headline_sample": "Tìtolo",
        "headline_tip": "Tìtolo de 2° livello",
        "gender-unknown": "Into mençunâte, o software o l'adoeuviâ de paole de genere noeütro ogni votta che saiâ poscibile",
        "gender-male": "O l'è registrou insce {{SITENAME}}",
        "gender-female": "A l'è registrâ insce {{SITENAME}}",
-       "prefs-help-gender": "L'impostassion de sta preferensa a l'è opsionâ.\nO software o deuvia sto valô pe addressâse a ti e mensunate a-i atri deuviando o gennere grammaticale apropiou.\nQuesta informassion a saiâ pubblica.",
+       "prefs-help-gender": "L'impostaçion de sta preferença a l'è opçionâ.\nO software o doeuvia sto valô pe indriçâse a ti e mençunâte a-i atri doeuviando o gennere grammaticale apropiou.\nQuest'informaçion a saiâ pubbrica.",
        "email": "Posta elettronega",
        "prefs-help-realname": "O veo nomme o l'è facortativo.\nSe fornio, o poeu ese deuviou pe attribuite a paternitæ do to travaggio.",
        "prefs-help-email": "L'email a no l'é obligatöia, ma a te permette de reçéive a paròlla segrétta se ti l'ascòrdi.",
        "upload-source": "File de origine",
        "sourcefilename": "Nomme do file d'origgine:",
        "sourceurl": "URL de origine:",
-       "destfilename": "Nomme do file de destinassion:",
+       "destfilename": "Nomme do file de destinaçion:",
        "upload-maxfilesize": "Dimenscion mascima do file: $1",
        "upload-description": "Descriçion do file",
        "upload-options": "Opçioin de caregamento",
        "upload-curl-error6-text": "Imposcibile razonze a URL specificâ. Verifica che a URL a sæ scrita correttamente e che o scito in question o sæ attivo.",
        "upload-curl-error28": "Tempo descheito pe l'upload",
        "upload-curl-error28-text": "O scito remoto o l'ha impiegou troppo tempo a risponde. Verifica che o sito o sæ attivo, attendi quarche menuto e proeuva torna, se mai inte 'n momento con meno traffego.",
-       "license": "Licensa:",
+       "license": "Liçençia:",
        "license-header": "Licensa",
        "nolicense": "Nisciûnn-a liçensa indicâa",
        "licenses-edit": "Modiffica opçioin de liçença",
        "trackingcategories-disabled": "A categoria a l'è disabilitâ",
        "mailnologin": "Nisciun adreçço a chi mandâ o messaggio",
        "mailnologintext": "Pe inviâ di messaggi e-mail a di atri utenti l'è necessaio [[Special:UserLogin|accede a-o scito]] e avei registrou un adreçço vallido inte proppie [[Special:Preferences|preferençe]].",
-       "emailuser": "Invia 'na email a st'utente chi",
+       "emailuser": "Invia 'n'e-mail a questo utente",
        "emailuser-title-target": "Invia un'email a questo {{GENDER:$1|utente}}",
        "emailuser-title-notarget": "Invia una email a un utente",
        "emailpagetext": "Doeuvia o moddulo sottostante pe inviâ un messaggio e-mail a l'{{GENDER:$1|utente}} indicou. L'adreçço speçificou inte [[Special:Preferences|preferençe]] do mittente o l'appariâ into campo \"Da:\" do messaggio pe consentî a-o destinataio de risponde direttamente.",
        "previousdiff": "← Diferensa precedénte",
        "nextdiff": "Pròscima diferensa →",
        "mediawarning": "'''Attençione''': Questo file o poriæ contegnî un codiçe maligno. A so esecuçion a poriæ dannezzâ o to scistema.",
-       "imagemaxsize": "Dimenscion mascima de ibmaggine:<br />''(pe-e paggine de descriçion do file)''",
+       "imagemaxsize": "Dimenscion mascima d'e inmaggine:<br />''(pe-e paggine de descriçion do file)''",
        "thumbsize": "Dimescion de l'imaginetta:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|paggina|paggine}}",
        "file-info": "dimenscion do file: $1, tipo MIME: $2",
        "saturday-at": "Sabbo a $1",
        "sunday-at": "Domenega a $1",
        "yesterday-at": "Vei a $1",
-       "bad_image_list": "O formato o l'è coscì:\nVan conscideræ sôlo e righe che comensan co-o càratere *.\nO primmo ingancio in sce ògni riga o dev'ese 'n ingancio ch'o no fonçionn-a\nI inganci sucescivi, in scia mæxima riga, van conscideræ comme eceçioìn (pagine donde o file o pêu ese reciamòu normalmente).",
+       "bad_image_list": "O formato o l'è coscì:\nVan conscideræ sôlo e righe che comensan co-o càratere *.\nO primmo ingancio in sce ògni riga o dev'ese 'n ingancio ch'o no fonçionn-a\nI inganci sucescivi, in scia mæxima riga, van conscideræ comme eceçioìn (pagine donde o file o poeu ese reciamòu normalmente).",
        "metadata": "Metadati",
        "metadata-help": "Sto file o contegne de informaçioìn in ciù, fòscia misse da-a fotocamera ò dò-u scansô dêuviòu pe creâla ò digitalizâla. Se o file o l'è stæto cangiòu, çerti detàggi porieivan no corisponde a-i cangi aportæ.",
        "metadata-expand": "Fâ vedde dettaggi",
        "feedback-thanks": "Graççie! O to feedback o l'è stæto pubricou a-a paggina \"[$2 $1]\".",
        "feedback-thanks-title": "Graççie!",
        "feedback-useragent": "Agente utente:",
-       "searchsuggest-search": "Çerca",
+       "searchsuggest-search": "Çerca in {{SITENAME}}",
        "searchsuggest-containing": "ch'o conten...",
        "api-error-autoblocked": "O to adreçço IP o l'è stæto bloccou aotomaticamente, perché o l'è stæto doeuviou da un utente bloccou.",
        "api-error-badaccess-groups": "No t'ê aotorizzou a caregâ di file insce questa wiki.",
index 2cccbf5..5998caf 100644 (file)
        "subject-preview": "Temos peržiūra:",
        "previewerrortext": "Įvyko klaida bandant peržiūrėti jūsų pakeitimus.",
        "blockedtitle": "Naudotojas yra užblokuotas",
-       "blockedtext": "'''Jūsų naudotojo vardas arba IP adresas yra užblokuotas.'''\n\nUžblokavo $1. Nurodyta priežastis yra ''$2''.\n\n* Blokavimo pradžia: $8\n* Blokavimo pabaiga: $6\n* Numatytas blokuojamasis: $7\n\nJūs galite susisiekti su $1 arba kuriuo nors kitu [[{{MediaWiki:Grouppage-sysop}}|administratoriumi]] ir aptarti neaiškumus dėl blokavimo.\nAtkreipkite dėmesį, kad negalėsite naudotis funkcija „Rašyti laišką šiam naudotojui“, jei nesate užsiregistravę ir pateikę realaus savo el. pašto adreso naudotojo [[Special:Preferences|nustatymuose]], arba, jei jums užblokuotas šios funkcijos naudojimas.\nJūsų IP adresas yra $3, o blokavimo ID yra #$5.\nPrašome nurodyti vieną iš jų ar abu, kai kreipiatės dėl blokavimo.",
+       "blockedtext": "'''Jūsų naudotojo vardas arba IP adresas yra užblokuotas.'''\n\nUžblokavo $1. Nurodyta priežastis yra ''$2''.\n\n* Blokavimo pradžia: $8\n* Blokavimo pabaiga: $6\n* Užblokuotasis: $7\n\nJūs galite susisiekti su $1 arba kuriuo nors kitu [[{{MediaWiki:Grouppage-sysop}}|administratoriumi]] ir aptarti neaiškumus dėl blokavimo.\nAtkreipkite dėmesį, kad negalėsite naudotis funkcija „Rašyti laišką šiam naudotojui“, jei nesate užsiregistravę ir pateikę galiojančio el. pašto adreso naudotojo paskyros [[Special:Preferences|nustatymuose]], arba, jei jums užblokuotas šios funkcijos naudojimas.\nJūsų IP adresas yra $3, o blokavimo ID yra #$5.\nPrašome nurodyti vieną iš jų ar abu, kai kreipiatės dėl blokavimo.",
        "autoblockedtext": "Jūsų IP adresas buvo automatiškai užblokuotas, nes jį naudojo kitas naudotojas, kurį užblokavo $1.\nNurodyta priežastis yra ši:\n\n:''$2''\n\n* Blokavimo pradžia: $8\n* Blokavimo pabaiga: $6\n* Numatomas blokavimo laikas: $7\n\nJūs galite susisiekti su $1 arba kitu [[{{MediaWiki:Grouppage-sysop}}|administratoriumi]], kad aptartumėte neaiškumus dėl blokavimo.\n\nJūs negalite naudotis funkcija „Rašyti laišką šiam naudotojui“, jei nesate nurodę tikro el. pašto adreso savo [[Special:Preferences|naudotojo nustatymuose]]. Taip pat Jūs negalite naudotis šia funkcija, jei Jums užblokuotas jos naudojimas.\n\nJūsų IP adresas yra $3, blokavimo ID yra $5.\nPrašome nurodyti šiuos duomenis visais atvejais, kai kreipiatės dėl blokavimo.",
        "blockednoreason": "priežastis nenurodyta",
        "whitelistedittext": "Jūs turite $1, kad redaguotumėte puslapius.",
        "newarticletext": "Jūs patekote į dar neegzistuojantį puslapį.\nNorėdami sukurti puslapį, pradėkite rašyti žemiau esančiame įvedimo lauke\n(plačiau [$1 pagalbos puslapyje]).\nJei patekote čia per klaidą, paprasčiausiai spustelkite  naršyklės mygtuką '''atgal'''.",
        "anontalkpagetext": "----''Tai yra anoniminio naudotojo, nesusikūrusio arba nenaudojančio paskyros, aptarimų puslapis.\nDėl to naudojamas IP adresas jo identifikavimui.\nŠis IP adresas gali būti dalinamas keliems naudotojams.\nJeigu Jūs esate anoniminis naudotojas ir atrodo, kad komentarai nėra skirti Jums, [[Special:CreateAccount|sukurkite paskyrą]] arba [[Special:UserLogin|prisijunkite]], ir nebūsite tapatinamas su kitais anoniminiais naudotojais.''",
        "noarticletext": "Šiuo metu šiame puslapyje nėra jokio teksto.\nJūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] kituose puslapiuose,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ieškoti susijusių įrašų] arba [{{fullurl:{{FULLPAGENAME}}|action=edit}} sukurti šį puslapį]</span>.",
-       "noarticletext-nopermission": "Šiuo metu šiame puslapyje nėra jokio teksto.\nJūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] kituose puslapiuose,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ieškoti susijusių įrašų]</span>, bet jūs neturite teisės sukurti šį puslapį.",
+       "noarticletext-nopermission": "Šiuo metu šiame puslapyje nėra jokio teksto.\nJūs galite [[Special:Search/{{PAGENAME}}|ieškoti šio puslapio pavadinimo]] kituose puslapiuose,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} ieškoti susijusių įrašų]</span>, tačiau jūs neturite teisės sukurti šio puslapio.",
        "missing-revision": "Puslapio peržiūra #$1 pavadinto „{{FULLPAGENAME}}“ neegzistuoja.\n\nTai paprastai atsitinka kai pasenusi nuoroda veda į puslapį, kuris buvo ištrintas.\nInformaciją galima rasti [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} deletion log].",
        "userpage-userdoesnotexist": "Naudotojo paskyra „<nowiki>$1</nowiki>“ yra neužregistruota. Prašom patikrinti, ar jūs norite kurti/redaguoti šį puslapį.",
        "userpage-userdoesnotexist-view": "Naudotojo paskyra „$1“ neužregistruota.",
        "listfiles-delete": "trinti",
        "listfiles-summary": "Šiame specialiame puslapyje rodomos visos įkeltos rinkmenos.",
        "listfiles_search_for": "Ieškoti failo pavadinimo:",
-       "listfiles-userdoesnotexist": "Vartotojo paskyrą „$1“ nėra registruota.",
+       "listfiles-userdoesnotexist": "Naudotojo paskyra „$1“ nėra užregistruota.",
        "imgfile": "rinkmena",
        "listfiles": "Failų sąrašas",
        "listfiles_thumb": "Miniatiūra",
        "wantedpages-summary": "Sąrašas neegzistuojančių puslapių su daugiausią nuorodų į juos, išskyrus puslapius, kurie turi tik nukreipimus į juos. Jei norite pamatyti sąrašą neegzistuojančių puslapių, su nukreipimais į juos, žiūrėkite [[{{#special:BrokenRedirects}}|neveikiančių nuorodų sąrašą]].",
        "wantedpages-badtitle": "Neleistinas pavadinimas rezultatų rinkinyje: $1",
        "wantedfiles": "Reikiamiausi failai",
-       "wantedfiletext-cat": "Sekantys failai yra naudojami, bet neegzistuoja. Čia failai iš išorinių saugyklų gali būti išvardinti, nors jie jose ir egzistuoja. Failai netenkinantys šių sąlygų gali būti <del>perbraukti</del>. Papildomai peržiūrėkite [[:$1|puslapius]], kuriuose yra naudojami čia išvardinti neegzistuojantys failai.",
+       "wantedfiletext-cat": "Šiame puslapyje pateikiami failai, kurie yra naudojami, bet neegzistuoja. Čia gali būti išvardinti failai iš išorinių saugyklų, nors jie jose ir egzistuoja. Tokiu atveju failų pavadinimai yra <del>perbraukti</del>. Be to, puslapiai, kuriuose esama neegzistuojančių failų, yra išvardinti [[:$1|čia]].",
        "wantedfiletext-cat-noforeign": "Šie failai yra naudojami, bet neegzistuoja. Be to, puslapiai su šiais failais, kurie neegzistuoja yra išvardinti [[:$1]].",
-       "wantedfiletext-nocat": "Sekantys failai yra naudojami, bet neegzistuoja. Čia failai iš išorinių saugyklų gali būti išvardinti, nors jie jose ir egzistuoja. Failai netenkinantys šių sąlygų gali būti <del>perbraukti</del>.",
+       "wantedfiletext-nocat": "Šiame puslapyje pateikiami failai, kurie yra naudojami, bet neegzistuoja. Čia gali būti išvardinti failai iš išorinių saugyklų, nors jie jose ir egzistuoja. Tokiu atveju failų pavadinimai yra <del>perbraukti</del>.",
        "wantedfiletext-nocat-noforeign": "Šios rinkmenos yra naudojamos, tačiau nesti.",
        "wantedtemplates": "Reikiamiausi šablonai",
        "mostlinked": "Daugiausiai nurodomi puslapiai",
        "usermessage-summary": "Paliekamas sistemos pranešimas.",
        "usermessage-editor": "Sistemos pranešėjas",
        "watchlist": "Stebimųjų sąrašas",
-       "mywatchlist": "Stebimų sąrašas",
+       "mywatchlist": "Stebimų sąrašas",
        "watchlistfor2": "Naudotojas: $1 $2",
        "nowatchlist": "Neturite nei vieno stebimo puslapio.",
        "watchlistanontext": "Prašome prisijungti, kad peržiūrėtumėte ar pakeistumėte elementus savo stebimųjų sąraše.",
        "protectlogtext": "Žemiau yra puslapių užrakinimų bei atrakinimų sąrašas.\nDabar veikiančių puslapių apsaugų sąrašą rasite [[Special:ProtectedPages|apsaugotų puslapių sąraše]].",
        "protectedarticle": "užrakino „[[$1]]“",
        "modifiedarticleprotection": "pakeistas „[[$1]]“ apsaugos lygis",
-       "unprotectedarticle": "pašalino apsaugą nuo „[[$1]]“",
+       "unprotectedarticle": "atrakino „[[$1]]“",
        "movedarticleprotection": "perkelti apsaugos nustatymai iš „[[$2]]“ į „[[$1]]“",
        "protect-title": "Nustatomas apsaugos lygis puslapiui „$1“",
        "protect-title-notallowed": "Peržiūrėti \"$1\" apsaugos lygį",
        "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|pervadino}} puslapį $3 į $4, nesukurdamas nukreipimo",
        "logentry-patrol-patrol": "$1 {{GENDER:$2|pažymėjo}} kaip patikrintą puslapio $3 versiją $4",
        "logentry-patrol-patrol-auto": "$1 automatiškai {{GENDER:$2|pažymėjo}} kaip patikrintą puslapio $3 versiją $4",
-       "logentry-newusers-newusers": "Vartotojo paskyra $1 buvo {{GENDER:$2|sukurta}}",
+       "logentry-newusers-newusers": "Naudotojo paskyrą $1 {{GENDER:$2|sukūrė}}",
        "logentry-newusers-create": "$1 sukūrė naudotojo paskyrą",
-       "logentry-newusers-create2": "Vartotojo paskyra $3 buvo {{GENDER:$2|sukurta}} $1",
-       "logentry-newusers-byemail": "Vartotojo paskyra $3 buvo {{GENDER:$2|sukurta}} $1 ir slaptažodis išsiųstas el. paštu",
-       "logentry-newusers-autocreate": "Vartotojo paskyra $1 buvo {{GENDER:$2|sukurta}} automatiškai",
+       "logentry-newusers-create2": "$1 sukūrė naudotojo paskyrą $3",
+       "logentry-newusers-byemail": "Naudotojo paskyrą $3 {{GENDER:$2|sukūrė}} $1, slaptažodis išsiųstas el. paštu",
+       "logentry-newusers-autocreate": "Naudotojo paskyra $1 buvo {{GENDER:$2|sukurta}} automatiškai",
        "logentry-protect-move_prot": "$1 {{GENDER:$2|perkėlė}} apsaugos nustatymus iš $4 į $3",
-       "logentry-protect-unprotect": "$1 {{GENDER:$2|pašalino}} apsaugą nuo $3",
-       "logentry-protect-protect": "$1 {{GENDER:$2|apsaugojo}} $3 $4",
-       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|apsaugojo}} $3 $4 [pakopinė]",
+       "logentry-protect-unprotect": "$1 {{GENDER:$2|atrakino}} $3",
+       "logentry-protect-protect": "$1 {{GENDER:$2|užrakino}} $3 $4",
+       "logentry-protect-protect-cascade": "$1 {{GENDER:$2|užrakino}} $3 $4 [pakopinė]",
        "logentry-protect-modify": "$1 {{GENDER:$2|pakeitė}} apsaugos lygį $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|pakeitė}} apsaugos lygį $3 $4 [pakopinė]",
        "logentry-rights-rights": "$1 {{GENDER:$2|pakeitė}} grupės narystę $3 iš $4 į $5",
        "log-action-filter-delete": "Trynimo tipas:",
        "log-action-filter-import": "Importo tipas:",
        "log-action-filter-managetags": "Žymės tvarkymo veiksmo tipas:",
-       "log-action-filter-move": "Kėlimo tipas:",
+       "log-action-filter-move": "Perkėlimo tipas:",
        "log-action-filter-newusers": "Paskyros kūrimo tipas:",
+       "log-action-filter-patrol": "Patikrinimo tipas:",
        "log-action-filter-protect": "Apsaugos tipas:",
        "log-action-filter-rights": "Teisių tipo keitimas:",
        "log-action-filter-upload": "Įkėlimo tipas:",
        "log-action-filter-managetags-delete": "Žymės trynimas",
        "log-action-filter-managetags-activate": "Žymės aktyvavimas",
        "log-action-filter-managetags-deactivate": "Žymės deaktyvavimas",
+       "log-action-filter-move-move": "Perkėlimai, nepakeičiant nukreipimų",
+       "log-action-filter-move-move_redir": "Perkėlimai, pakeičiant buvusius nukreipimus",
        "log-action-filter-newusers-autocreate": "Automatinis kūrimas",
+       "log-action-filter-patrol-patrol": "„Rankinis“ patikrinimas",
+       "log-action-filter-patrol-autopatrol": "Automatinis patikrinimas",
        "log-action-filter-protect-protect": "Apsauga",
        "log-action-filter-protect-modify": "Apsaugos keitimas",
        "log-action-filter-protect-move_prot": "Apsauga perkelta",
index dd81bea..7c50f35 100644 (file)
        "talk": "Diskusija",
        "views": "Apskates",
        "toolbox": "Rīki",
+       "tool-link-emailuser": "Nosūtīt e-pastu {{GENDER:$1|šim dalībniekam|šai dalībniecei}}",
        "userpage": "Skatīt dalībnieka lapu",
        "projectpage": "Skatīt projekta lapu",
        "imagepage": "Skatīt faila lapu",
        "newimages-showbots": "Parādīt botu augšupielādētos failus",
        "newimages-hidepatrolled": "Paslēpt pārbaudītās augšupielādes",
        "noimages": "Nav nekā ko redzēt.",
+       "gallery-slideshow-toggle": "Pārslēgt sīktēlus",
        "ilsubmit": "Meklēt",
        "bydate": "<b>pēc datuma</b>",
        "sp-newimages-showfrom": "Rādīt jaunos attēlus sākot no $1, $2",
        "feedback-submit": "Iesniegt",
        "feedback-thanks": "Paldies! Jūsu atsauksmes ir ievietotas lapā \"[$2  $1]\".",
        "feedback-thanks-title": "Paldies!",
-       "searchsuggest-search": "Meklēt",
+       "searchsuggest-search": "Meklēt {{SITENAME}}",
        "searchsuggest-containing": "Meklējamā frāze:",
        "api-error-badaccess-groups": "Jums nav atļauts augšupielādēt failus šajā wiki.",
        "api-error-copyuploaddisabled": "Augšupielāde no URL šajā serverī ir atspējota.",
        "authmanager-realname-label": "Tavs īstais vārds",
        "authmanager-realname-help": "Dalībnieka īstais vārds",
        "authprovider-resetpass-skip-label": "Izlaist",
-       "specialpage-securitylevel-not-allowed-title": "Nav atļauts"
+       "specialpage-securitylevel-not-allowed-title": "Nav atļauts",
+       "edit-error-short": "Kļūda: $1",
+       "edit-error-long": "Kļūdas:\n\n$1"
 }
index ed6dde8..ad92ab9 100644 (file)
        "right-move-rootuserpages": "मूल प्रयोक्ता पन्ना स्थानान्तरित करी",
        "right-move-categorypages": "श्रेणी पृष्ठ स्थानान्तरित करी",
        "right-movefile": "सञ्चिकासभ स्थानान्तरित करी",
-       "right-suppressredirect": "पà¥\83षà¥\8dठ à¤\98सà¤\95à¥\87बाकाल पुनर्निर्देश नै छोडी",
+       "right-suppressredirect": "पà¥\83षà¥\8dठ à¤¸à¥\8dथानानà¥\8dतरित à¤\95रà¥\88तकाल पुनर्निर्देश नै छोडी",
        "right-upload": "सञ्चिकासभ उपारोपित करी",
        "right-reupload": "वर्तमान सञ्चिकासभक पुनर्लेखन करी",
        "right-reupload-own": "अपन उपारोपित पन्नासभक पुनर्लेखन करी",
        "grant-uploadeditmovefile": "फाइल अपलोड, बदलनाए, स्थानान्तरण करनाए",
        "grant-uploadfile": "नव सञ्चिकासभ उपारोपित करी",
        "grant-basic": "सामान्य अधिकार",
-       "grant-viewdeleted": "हटाएल फाइल व पृष्ठ देखी",
+       "grant-viewdeleted": "मà¥\87टाएल फाइल व पृष्ठ देखी",
        "grant-viewmywatchlist": "अपन साकांक्षसूची देखी",
        "newuserlogpage": "प्रयोक्ता रचना लग",
        "newuserlogpagetext": "ई प्रयोक्ता निर्माणक वृत्तलेख अछि।",
        "file-thumbnail-no": "संचिकानाम शुरू होइए <strong>$1</strong> सँ।\nलगैए जे ई छोट आकारक ''(लघुचित्र)'' क चित्र अछि।\nजँ अहाँ लग पूर्ण आनन्तर्यक चित्र अछि तँ से उपारोपित करू, नै तँ संचिकानाम बदलू।",
        "fileexists-forbidden": "ऐ नामक एकटा संचिका पहिनहियेसँ अछि, आ फेरसँ ओ पुनर्लेखित नै कएल जा सकैए।\nजँ अहाँ तैयो अपन संचिका उपारोपित करए चाहै छी तँ कृपा कऽ पाछाँ जाउ आ एकटा नव नाम चुनू।\n[[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "ऐ नामसँ एकटा संचिका साझी संचिका बखारीमे पहिनहियेसँ अछि।\nजँ अहाँ अखनो अपन संचिका उपारोपित करए चाहै छी, कृपा कऽ पाछाँ जाउ आ एकटा नव नाम चुनू।\n[[File:$1|thumb|center|$1]]",
-       "file-exists-duplicate": "à¤\88 à¤«à¤¾à¤\87ल à¤\8fà¤\95र {{PLURAL:$1|file|files}} à¤¦à¥\8dवितà¥\80यà¤\95 अछि:",
+       "file-exists-duplicate": "à¤\88 à¤«à¤¾à¤\87ल à¤¨à¤¿à¤®à¥\8dनलिà¤\96ित {{PLURAL:$1|फाà¤\87ल|फाà¤\87लसभ}}à¤\95 à¤ªà¥\8dरति अछि:",
        "file-deleted-duplicate": "ऐ संचिका ([[:$1]]) सँ मेल खाइत संचिका पहिनहिये मेटा देल गेल अछि।\nअहाँ ओइ संचिकाक मेटाएल जएबाक इतिहास फेरसँ उपारोपित करबासँ पहिने देखू।",
        "file-deleted-duplicate-notitle": "ऐ स पहिले इ फाइलके अहिने एगो फाइलके हटाएल गेल अछि , आर शीर्षक नुकाएल गेल अछि।\nएकरा फेर स अपलोड करै स पहिले अहाँ कोनो एहन व्यक्ति स स्थितिके  समीक्षा करै लेल कहु जेकरा लंग नुकाएल गेल फाइल देखवाक क्षमता अछि।",
        "uploadwarning": "उपारोपण चेतौनी",
        "filedelete-nofile-old": "'''$1''' एकर कोनो संचित संस्करण खास गुणक संग नै अछि।",
        "filedelete-otherreason": "दोसर/ अतिरिक्त कारण:",
        "filedelete-reason-otherlist": "दोसर कारण",
-       "filedelete-reason-dropdown": "* à¤¸à¤¾à¤®à¤¾à¤¨à¥\8dय à¤¹à¤\9fà¥\87बाà¤\95 à¤\95ारण\n** à¤¸à¤°à¥\8dवाधिà¤\95ार à¤\89लà¥\8dलà¤\82à¤\98न\n** à¤¦à¥\8dवितà¥\80यà¤\95 à¤¸à¤\82à¤\9aिà¤\95ा",
+       "filedelete-reason-dropdown": "* à¤¸à¤¾à¤®à¤¾à¤¨à¥\8dय à¤¹à¤\9fà¥\87बाà¤\95 à¤\95ारण\n** à¤¸à¤°à¥\8dवाधिà¤\95ार à¤\89लà¥\8dलà¤\99à¥\8dà¤\98न\n** à¤ªà¥\8dरतिलिपि à¤«à¤¾à¤\87ल",
        "filedelete-edit-reasonlist": "मेटेबाक कारणक सम्पादन करू",
        "filedelete-maintenance": "सुस्थापन कालमे संचिकाकेँ मेटएबाक आ फेरसँ अनबाक क्रिया कनी काल लेल अशक्त कएल गेल अछि।",
        "filedelete-maintenance-title": "संचिका हटा नै सकैए",
        "statistics-header-hooks": "दोसर तथ्याङ्क",
        "statistics-articles": "सामग्री पृष्ठ",
        "statistics-pages": "पन्ना",
-       "statistics-pages-desc": "वारà¥\8dता à¤ªà¤¨à¥\8dना, à¤¬à¤¦à¤²à¥\87न à¤\87तà¥\8dयादि à¤¸à¤¹à¤¿à¤¤ à¤¸à¤­à¤\9fा à¤µà¤¿à¤\95ि à¤ªà¤¨à¥\8dना à¤¸à¤­।",
+       "statistics-pages-desc": "वारà¥\8dता à¤ªà¥\83षà¥\8dठ, à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शन à¤\86दि à¤¸à¤®à¥\87त à¤µà¤¿à¤\95िà¤\95 à¤¸à¤­ à¤ªà¥\83षà¥\8dठ।",
        "statistics-files": "उपारोपित सञ्चिका",
        "statistics-edits": "{{SITENAME}} अएबासँ लऽ कऽ भेल पन्ना सम्पादन",
        "statistics-edits-average": "प्रति पन्ना औसत सम्पादन",
        "pageswithprop-submit": "जाए",
        "pageswithprop-prophidden-long": "लम्बा पाठक गुण नुकाएल ($1) अछि",
        "pageswithprop-prophidden-binary": "बाइनरी गुण ($1) नुकाएल अछि।",
-       "doubleredirects": "दà¥\8dवितà¥\80यà¤\95 à¤²à¤¾à¤\97à¤\8fबला à¤¬à¤¦à¤²à¥\87न",
+       "doubleredirects": "दà¥\81à¤\97à¥\81ना à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87श",
        "doubleredirectstext": "ई पन्ना ओइ पन्ना सभक संकलन छी जे बदलेन करैए दोसर बदलेनबला पन्नासँ।\nप्रत्येक पाँती पहिल आ दोसर बदलेनक लागि रखने अछि आ संगे दोसर बदलेनक लक्ष्य सेहो, जे वास्तवमे \"वास्तव\" लक्ष्य पन्ना अछि, जकरापर पहिल बदलेनकेँ जेबाक चाही। \n <del>Crossed out</del> प्रविष्टिक हल भेटल अछि।",
        "double-redirect-fixed-move": "[[$1]] घसकाएल गेल।\nई आब [[$2]] दिस जा रहल अछि।",
-       "double-redirect-fixed-maintenance": "द्वितीयक बदलेन [[$1]] सँ [[$2]] कएल गेल।",
-       "double-redirect-fixer": "बदलà¥\87न à¤¸à¥\8dथायितà¥\8dव",
+       "double-redirect-fixed-maintenance": "[[$1]] सँ [[$2]]क दुगुणा पुनर्प्रेषणक रखरखाव कार्यमे स्वतः ठीक करि रहल अछि।",
+       "double-redirect-fixer": "पà¥\81नरà¥\8dपà¥\8dरà¥\87षण à¤®à¤¿à¤¸à¥\8dतà¥\8dरà¥\80",
        "brokenredirects": "तुटल पुनर्निर्देशन पृष्ठ",
-       "brokenredirectstext": "à¤\88 à¤¬à¤¦à¤²à¥\87न सभ नै अवस्थित पन्ना सभक दिस जाइत अछि।",
+       "brokenredirectstext": "à¤\88 à¤ªà¥\81नरà¥\8dनिरà¥\8dदà¥\87शनसभ नै अवस्थित पन्ना सभक दिस जाइत अछि।",
        "brokenredirects-edit": "सम्पादन करी",
        "brokenredirects-delete": "मेटाबी",
        "withoutinterwiki": "बिना भाषा लिङ्कक पन्ना",
        "protectedpages": "सुरक्षित पृष्ठ",
        "protectedpages-indef": "अनन्तकालिक सुरक्षा मात्र",
        "protectedpages-cascade": "तराउपड़ी सुरक्षा मात्र",
-       "protectedpages-noredirect": "बदलà¥\87न à¤¨à¥\81à¤\95ाà¤\8aà¤\81",
+       "protectedpages-noredirect": "पà¥\81नरà¥\8dनिरà¥\8dदà¥\87श à¤¨à¥\81à¤\95ाबà¥\80",
        "protectedpagesempty": "कोनो पन्ना ऐ सभ परिमिति लेल सुरक्षित नै राखल गेल अछि।",
        "protectedpages-timestamp": "समएकाल",
        "protectedpages-page": "पृष्ठ",
        "emailsubject": "विषय:",
        "emailmessage": "सन्देश:",
        "emailsend": "पठाबी",
-       "emailccme": "हमर à¤¸à¤¨à¥\8dदà¥\87शà¤\95 à¤¦à¥\8dवितà¥\80यà¤\95 à¤¹à¤®à¤° à¤\88-पतà¥\8dरपर पठाबी",
-       "emailccsubject": "à¤\85हाà¤\81à¤\95 à¤¸à¤\82दà¥\87शà¤\95 à¤¦à¥\8dवितà¥\80यà¤\95 $1: $2",
+       "emailccme": "हमर à¤¸à¤¨à¥\8dदà¥\87शà¤\95 à¤ªà¥\8dरति à¤¹à¤®à¤° à¤\87मà¥\87लमà¥\87 पठाबी",
+       "emailccsubject": "à¤\85हाà¤\81à¤\95 à¤\87मà¥\87लà¤\95 à¤ªà¥\8dरति à¤\9cà¥\87 $1à¤\95 à¤­à¥\87à¤\9cल à¤\97à¥\87ल: $2",
        "emailsent": "ई-पत्र पठेलौं",
        "emailsenttext": "अहाँक ई-पत्र सन्देश पठाएल गेल।",
        "emailuserfooter": "ई ई-मेल $1 {{GENDER:$1|द्वारा}} {{GENDER:$2|$2}}क भेजल गेल छल जेकर लेल \"{{int:emailuser}}\" कार्यके {{SITENAME}} पर प्रयोगमे लाबल गेल छल।",
        "enotif_impersonal_salutation": "{{SITENAME}} प्रयोगकर्ता",
        "enotif_subject_deleted": "{{SITENAME}} पन्ना $1 के {{gender:$2|$2}} हटेलक",
        "enotif_subject_created": "{{SITENAME}} पन्ना $1 को {{gender:$2|$2}} बनेलक",
-       "enotif_subject_moved": "{{SITENAME}} à¤ªà¥\83षà¥\8dठ $1 à¤\95à¥\87 {{gender:$2|$2}} à¤\98सà¤\95ेलक",
+       "enotif_subject_moved": "{{SITENAME}} à¤ªà¥\83षà¥\8dठ $1 à¤\95à¥\87 {{gender:$2|$2}} à¤¸à¥\8dथानानà¥\8dतरित à¤\95रि à¤¦ेलक",
        "enotif_subject_restored": "{{SITENAME}} पृष्ठ $1 के {{gender:$2|$2}}द्वारा पुनर्स्थापित करल गेल अछि",
        "enotif_subject_changed": "{{SITENAME}} पृष्ठ $1 के {{gender:$2|$2}}द्वारा परिवर्तित केल गेल अछि",
        "enotif_body_intro_deleted": "{{SITENAME}} पृष्ठ $1 के {{gender:$2|$2}}द्वारा $PAGEEDITDATE क मेटाए देलक, देखी $3।",
        "import-rootpage-nosubpage": "दयाल गेल उपसर्ग पन्ना \"$1\" के नामस्थान में उप-पन्ना नै बनाबाल जा सकएत अछि ।",
        "importlogpage": "आयात सूची",
        "importlogpagetext": "पन्ना सभक प्रशासनिक आयात दोसर विकीक सम्पादन इतिहासक संग।",
-       "import-logentry-upload-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}}",
+       "import-logentry-upload-detail": "$1 अवतरण आयात {{PLURAL:$1|केलक|कएल गेल}}",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|सुधार|सुधार सभ}} $2 सँ",
        "javascripttest": "जावास्क्रिप्ट परिक्षण",
        "javascripttest-pagetext-unknownaction": "अज्ञात क्रिया \"$1\" ।",
        "tooltip-t-permalink": "पृष्ठक ई संस्करणक स्थायी लिङ्क",
        "tooltip-ca-nstab-main": "सामग्री वाला पृष्ठ देखी",
        "tooltip-ca-nstab-user": "प्रयोक्ता पन्ना देखी",
-       "tooltip-ca-nstab-media": "मà¥\80डिया à¤ªà¥\83षà¥\8dठ à¤¦à¥\87à¤\96à¥\82",
+       "tooltip-ca-nstab-media": "मिडिया à¤ªà¥\83षà¥\8dठ à¤¦à¥\87à¤\96à¥\80",
        "tooltip-ca-nstab-special": "ई एकटा विशिष्ट पन्ना छी, आ अहाँ एकरा सम्पादित नै कऽ सकै छी",
        "tooltip-ca-nstab-project": "परियोजना पन्ना देखी",
        "tooltip-ca-nstab-image": "सञ्चिकाक पृष्ठ देखी",
        "tooltip-ca-nstab-mediawiki": "प्रणालीक सन्देश देखी",
        "tooltip-ca-nstab-template": "नमूना देखी",
-       "tooltip-ca-nstab-help": "सहायता à¤ªà¥\83षà¥\8dठ à¤¦à¥\87à¤\96à¥\82",
+       "tooltip-ca-nstab-help": "सहायता à¤ªà¥\83षà¥\8dठ à¤¦à¥\87à¤\96à¥\80",
        "tooltip-ca-nstab-category": "श्रेणी पन्ना देखी",
        "tooltip-minoredit": "एकरा मामली सम्पादन चिन्हित करू",
        "tooltip-save": "अपन परिवर्तन सुरक्षित करी",
        "pageinfo-protect-cascading-from": "सुरक्षा-विकल्प व्यापक भऽ रहल अछि स्थान-सऽ",
        "pageinfo-category-info": "संवर्ग जानकारी",
        "pageinfo-category-total": "सम्पादनक संख्या",
-       "pageinfo-category-pages": "पà¥\83षà¥\8dठ à¤¸à¤\82ख्या",
+       "pageinfo-category-pages": "पà¥\83षà¥\8dठ à¤¸à¤\99à¥\8dख्या",
        "pageinfo-category-subcats": "उपसंवर्ग के संख्या",
        "pageinfo-category-files": "फाइल सभके संख्या",
        "markaspatrolleddiff": "जाँच सम्पन्न करी",
        "descending_abbrev": "जानकारी",
        "table_pager_next": "अगला पृष्ठ",
        "table_pager_prev": "पहिलुका पृष्ठ",
-       "table_pager_first": "पहला पृष्ठ",
+       "table_pager_first": "पहिल पृष्ठ",
        "table_pager_last": "अन्तिम पृष्ठ",
        "table_pager_limit": "एक पृष्ठ पर $1 सामग्री देखाबी",
        "table_pager_limit_label": "सामग्री प्रति पृष्ठ",
        "autosumm-blank": "पृष्ठ खाली कएल गेल",
        "autosumm-replace": "\"$1\" सहित पाठ परिवर्तित भेल",
        "autoredircomment": "[[$1]] के अनुप्रेषित",
-       "autosumm-new": "'$1' à¤¸à¤\82à¤\97 à¤¨à¤¬ पृष्ठ बनाओल गेल",
+       "autosumm-new": "'$1' à¤¸à¤\82à¤\97 à¤¨à¤µ पृष्ठ बनाओल गेल",
        "autosumm-newblank": "खालि पन्ना बनाओल गेल",
        "lag-warn-normal": "$1 सँ नव बदलल गेल {{PLURAL:$1|सेकेण्ड|सेकेण्ड}} ऐ सूचीमे नै देखाएल गेल।",
        "lag-warn-high": "उच्च दत्तनिधि वितरक देरीक कारण, $1 सँ नव परिवर्तन {{PLURAL:$1|सेकेण्ड|सेकेण्ड}} ऐ सूचीमे नै देखाएल जा सकल।",
        "redirect-file": "फाइल नाम",
        "redirect-logid": "प्रवेश आइडी",
        "redirect-not-exists": "बैनर नैं मिल्ल",
-       "fileduplicatesearch": "दà¥\8dवितà¥\80यà¤\95 à¤¸à¤\82à¤\9aिà¤\95ा à¤¤à¤¾à¤\95à¥\82",
-       "fileduplicatesearch-summary": "हà¥\88श à¤®à¤¾à¤¨à¤\95 à¤\86धारपर à¤¦à¥\8dवितà¥\80यà¤\95 à¤¸à¤\82à¤\9aिà¤\95ा à¤¤à¤¾à¤\95à¥\82।",
+       "fileduplicatesearch": "पà¥\8dरतिलिपि à¤«à¤¾à¤\87ल à¤¤à¤¾à¤\95à¥\80",
+       "fileduplicatesearch-summary": "हà¥\8dयाश à¤®à¤¾à¤¨à¤\95 à¤\86धारपर à¤ªà¥\8dरतिलà¥\8dपà¥\80 à¤«à¤¾à¤\87ल à¤¤à¤¾à¤\95à¥\80।",
        "fileduplicatesearch-filename": "संचिकानाम:",
        "fileduplicatesearch-submit": "ताकू",
        "fileduplicatesearch-info": "$1 × $2 चित्राणु<br /> फाइल आकार: $3<br /> माइम प्रकार: $4",
-       "fileduplicatesearch-result-1": "सà¤\82à¤\9aिà¤\95ा \"$1\" à¤²à¥\87ल à¤\95à¥\8bनà¥\8b à¤¤à¤¾à¤¦à¤¾à¤¤à¥\8dमà¥\8dय à¤¦à¥\8dवितà¥\80यà¤\95 à¤¨à¥\88।",
-       "fileduplicatesearch-result-n": "सà¤\82à¤\9aिà¤\95ा \"$1\" à¤\95à¥\87à¤\81 à¤\9bà¥\88 {{PLURAL:$2|1 à¤¤à¤¾à¤¦à¤¾à¤¤à¥\8dमà¥\8dय à¤¦à¥\8dवितà¥\80यà¤\95|$2तादातà¥\8dमà¥\8dय à¤¦à¥\8dवितà¥\80यà¤\95}}.",
+       "fileduplicatesearch-result-1": "फाà¤\87ल \"$1\" à¤®à¥\87 à¤\95à¥\8bनà¥\8b à¤ªà¥\8dरतिलिपि à¤¨à¥\88 à¤\85à¤\9bि।",
+       "fileduplicatesearch-result-n": "फाà¤\87ल \"$1\" à¤®à¥\87 {{PLURAL:$2|1 à¤¤à¤¾à¤¦à¤¾à¤¤à¥\8dमà¥\8dय à¤¦à¥\8dवितà¥\80यà¤\95|$2 à¤¤à¤¾à¤¦à¤¾à¤¤à¥\8dमà¥\8dय à¤¦à¥\8dवितà¥\80यà¤\95}} à¤­à¥\87à¤\9fल à¤\85à¤\9bि।",
        "fileduplicatesearch-noresults": "कोनो \"$1\" नाम्ना संचिका नै।",
        "specialpages": "विशेष पन्नासभ",
        "specialpages-note-top": "कुंजी",
        "revdelete-restricted": "संचालक लेल प्रायोगिक प्रतिबन्ध",
        "revdelete-unrestricted": "संचालक लेल हटाओल प्रतिबन्ध",
        "logentry-import-upload": "$1 {{GENDER:$2|आयात केल गेल}} $3 संचिका उपारोपन के माध्यम सँ",
-       "logentry-import-interwiki": "$1 {{GENDER:$2|à¤\86यात à¤\95à¥\87ल à¤\97à¥\87ल}} $3 à¤\95à¥\8bनà¥\8b à¤\94र à¤µà¤¿à¤\95ि सँ",
+       "logentry-import-interwiki": "$1 {{GENDER:$2|à¤\86यात à¤\95à¤\8fल à¤\97à¥\87ल}} $3 à¤\95à¥\8bनà¥\8b à¤\94र à¤µà¤¿à¤\95िसँ",
        "logentry-merge-merge": "$1 {{GENDER:$2|विलय केल गेल}} $3 के $4 में (संशोधन $5 धरि)",
        "logentry-move-move": "$1द्वारा $3 पृष्ठ $4 पर {{GENDER:$2|स्थानान्तरित}} कएलक",
        "logentry-move-move-noredirect": "$1 द्वारा $3 पर पुनर्निर्देशन नै छोडि ओकरा $4 पर {{GENDER:$2|स्थानान्तरित}} केलक",
        "pagelang-use-default": "डिफल्ट भाषा प्रयोग करी",
        "pagelang-select-lang": "भाषा चुनु",
        "pagelang-submit": "भेजी",
-       "right-pagelang": "पà¥\83षà¥\8dठ à¤\95à¥\87 à¤­à¤¾à¤·à¤¾ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95रà¥\82",
-       "action-pagelang": "पà¥\83षà¥\8dठ à¤\95à¥\87 à¤­à¤¾à¤·à¤¾ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95रà¥\82",
+       "right-pagelang": "पà¥\83षà¥\8dठ à¤­à¤¾à¤·à¤¾ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95रà¥\80",
+       "action-pagelang": "पà¥\83षà¥\8dठ à¤­à¤¾à¤·à¤¾ à¤ªà¤°à¤¿à¤µà¤°à¥\8dतन à¤\95रà¥\80",
        "log-name-pagelang": "भाषा परिवर्तन लग",
        "log-description-pagelang": "ई पृष्ठ भाषासभमे परिवर्तनक लग छी।",
        "logentry-pagelang-pagelang": "$1 {{GENDER:$2|बदलि देल गेल}} पृष्ठ भाषा $3 क लेल $4 सँ $5।",
index eca8513..eb5a34a 100644 (file)
        "page_first": "прв",
        "page_last": "последен",
        "histlegend": "Разлика помеѓу преработките: Означете ги преработките што сакате да ги споредите и притиснете на Enter или копчето на дното од страницата.<br />\nЛегенда: '''({{int:cur}})''' = разлика со последна преработка, '''({{int:last}})''' = разлика со претходна преработка, '''{{int:minoreditletter}}''' = ситна промена.",
-       "history-fieldset-title": "Ð\9fÑ\80елиÑ\81Ñ\82Ñ\83ваÑ\9aе Ð½Ð° Ð¸Ñ\81Ñ\82оÑ\80иÑ\98а",
+       "history-fieldset-title": "Ð\9fÑ\80еглед Ð½Ð° Ð¸Ñ\81Ñ\82оÑ\80иÑ\98аÑ\82а",
        "history-show-deleted": "Само избришани",
        "histfirst": "најстари",
        "histlast": "најнови",
        "grant-basic": "Основни права",
        "grant-viewdeleted": "Преглед на избришани податотеки и страници",
        "grant-viewmywatchlist": "Преглед на вашите набљудувања",
+       "grant-viewrestrictedlogs": "Погл. ограничени дневнички ставки",
        "newuserlogpage": "Дневник на регистрирања на корисници",
        "newuserlogpagetext": "Ова е дневник на регистрирани корисници.",
        "rightslog": "Дневник на корисничките права",
        "sp-contributions-newbies-title": "Придонеси на нови корисници",
        "sp-contributions-blocklog": "Дневник на блокирања",
        "sp-contributions-suppresslog": "притаени придонесите на {{GENDER:$1|корисникот|корисничката}}",
-       "sp-contributions-deleted": "избришани придонесите на {{GENDER:$1|корисникот|корисничката}}",
+       "sp-contributions-deleted": "избришани придонеси на {{GENDER:$1|корисникот}}",
        "sp-contributions-uploads": "подигања",
        "sp-contributions-logs": "дневници",
        "sp-contributions-talk": "разговор",
        "movelogpagetext": "Подолу е наведен список на преместени страници.",
        "movesubpage": "{{PLURAL:$1|Потстраница|Потстраници}}",
        "movesubpagetext": "Оваа страница има $1 {{PLURAL:$1|потстраница прикажана|потстраници прикажани}} подолу.",
+       "movesubpagetalktext": "Оваа страница има $1 {{PLURAL:$1|потстраница прикажана|потстраници прикажани}} подолу.",
        "movenosubpage": "Оваа страница нема потстраници.",
        "movereason": "Причина:",
        "revertmove": "врати",
        "pageinfo-category-pages": "Број на страници",
        "pageinfo-category-subcats": "Број на поткатегории",
        "pageinfo-category-files": "Број на податотеки",
+       "pageinfo-user-id": "Корисничка назнака",
        "markaspatrolleddiff": "Означи како проверена верзија",
        "markaspatrolledtext": "Означи ја верзијата како проверена",
        "markaspatrolledtext-file": "Означи ја верзијава како испатролирана",
        "newimages-showbots": "Прикажувај подигања од ботови",
        "newimages-hidepatrolled": "Сокриј испатролриани подигања",
        "noimages": "Нема ништо.",
+       "gallery-slideshow-toggle": "Преод на минијатури",
        "ilsubmit": "Барај",
        "bydate": "по датум",
        "sp-newimages-showfrom": "Прикажи нови податотеки од $2, $1",
        "feedback-thanks": "Благодариме! Вашиот одѕив е објавен на страницата „[$2 $1]“.",
        "feedback-thanks-title": "Ви благодариме!",
        "feedback-useragent": "Кориснички вршител:",
-       "searchsuggest-search": "Пребарување",
+       "searchsuggest-search": "Пребарајте по {{SITENAME}}",
        "searchsuggest-containing": "содржи...",
        "api-error-autoblocked": "Вашата IP-адреса е автоматски блокирана бидејќи ја има користено блокиран корисник.",
        "api-error-badaccess-groups": "Не ви е дозволено да подигате податотеки на ова вики.",
        "usercssispublic": "Напомена: потстраниците со CSS не треба да содржат дсоверливи податоци бидејќи истите се видливи и за други корисници.",
        "restrictionsfield-badip": "Неважечки IP-дијапазон на адреси: $1",
        "restrictionsfield-label": "Допуштени IP-опсези:",
-       "restrictionsfield-help": "Една IP-адреса или CIDR-опсег по ред. За да овозможите сè, користете<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Една IP-адреса или CIDR-опсег по ред. За да овозможите сè, користете<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Грешка: $1",
+       "edit-error-long": "Грешки:\n\n$1"
 }
index 0d18c0d..3e85f15 100644 (file)
        "category-file-count-limited": "खालील {{PLURAL:$1|संचिका|$1 संचिका}} या वर्गात आहेत.",
        "listingcontinuesabbrev": "पुढे चला",
        "index-category": "अनुक्रमित पाने",
-       "noindex-category": "विना-à¤\85नà¥\81à¤\95à¥\8dरमित पाने",
+       "noindex-category": "à¤\85नà¥\81à¤\95à¥\8dरमित à¤¨à¤¸à¤²à¥\87लà¥\80 पाने",
        "broken-file-category": "तुटलेल्या संचिका दुव्यांसह असलेली पाने",
        "about": "च्या विषयी",
        "article": "आशयाचे पान",
        "movelogpagetext": "स्थानांतरित केलेल्या पानांची यादी.",
        "movesubpage": "{{PLURAL:$1|उपपान|उपपाने}}",
        "movesubpagetext": "या पानास $1 {{PLURAL:$1|उपपान|उपपाने}} असून ती पुढे दर्शवली आहेत:",
+       "movesubpagetalktext": "संबंधित चर्चा पानाची $1 {{PLURAL:$1|उपपान|उपपाने}} खाली दर्शविली आहेत.",
        "movenosubpage": "या पानात उपपाने नाहीत.",
        "movereason": "कारण:",
        "revertmove": "पूर्वपदास न्या",
        "feedback-thanks": " \"[$2 $1]\" या पानात आपला पश्चप्रदाय (फिडबॅक) टाकत आहोत.",
        "feedback-thanks-title": "आपणास धन्यवाद!",
        "feedback-useragent": "सदस्य प्रतिनीधी:",
-       "searchsuggest-search": "शोधा",
+       "searchsuggest-search": "शोधा {{SITENAME}}",
        "searchsuggest-containing": ".......हे असलेले",
        "api-error-badaccess-groups": "आपणास ह्या विकिवर संचिका चढवण्याची परवानगी नाही",
        "api-error-badtoken": "अंतर्गत चूक: अयोग्य टोकन",
        "randomrootpage": "अविशिष्ट मूळ पान",
        "log-action-filter-suppress-block": "रोधामार्फत सदस्य दाबणे",
        "changecredentials": "अधिकारपत्रे (क्रेडेंटियल्स)बदला",
-       "removecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) हटवा"
+       "removecredentials": "अधिकारपत्रे (क्रेडेंटियल्स) हटवा",
+       "edit-error-short": "त्रुटी: $1",
+       "edit-error-long": "त्रुटी:$1"
 }
index 6e71765..369ba48 100644 (file)
@@ -65,8 +65,8 @@
        "thu": "Mācuililhui",
        "fri": "6 ilhui",
        "sat": "7 ilhui",
-       "january": "Ic cē mētztli",
-       "february": "Ic ōmemētztli",
+       "january": "Icce metztli",
+       "february": "Icome metztli",
        "march": "Ic ēyi mētztli",
        "april": "Ic nāuhtetl mētztli",
        "may_long": "Ic mācuīlli mētztli",
        "october-date": "Īcmahtlactlimētztli $1",
        "november-date": "Īcmahtlactlioncēmētztli $1",
        "december-date": "Īcmahtlactliomōmemētztli $1",
-       "pagecategories": "{{PLURAL:$1|Tlaìxmatkàyòtlàlilòtl|Tlaìxmatkàyòtlàlilòme}}",
+       "pagecategories": "{{PLURAL:$1|Neneuhcayotl|Neneuhcayomeh}}",
        "category_header": "Tlâkuilòlpiltin ìpan tlaìxmatkàtlàlilòtl \"$1\"",
        "subcategories": "Tlaìxmatkàtlàlilòpilòmë",
        "category-media-header": "Media \"$1\" neneuhcāyōc",
        "category-empty": "''Cah ahtlein inīn neneuhcāyōc.''",
        "hidden-categories": "{{PLURAL:$1|tlatlàtìlli tlaìxmatkàyòtlàlilòtl|tlatlàtìltìn tlaìxmatkàyòtlàlilòme}}",
        "hidden-category-category": "Tlatlàtìlkàtlaìxmatkàtlàlilòmë",
-       "category-subcat-count": "{{PLURAL:$2|Inìn tlaìxmatkàyòtlàlilòtl kipia san inìn tlaìxmatkàyòtlàlilòpilli.|Inìn tlaìxmatkàyòtlàlilòtl {{PLURAL:$1|kipia inìn tlaìxmatkàyòtlàlilòpilli|kimpia inîke $1 tlaìxmatkàyòtlàlilòpiltìn}}, ìpan $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|Inin neneuhcayotl zan quipiya in tetoquilli tlani-neneuhcayotl.|Inn neneuhcayotl {{PLURAL:$1|quipiya intetoquilli tlani-neneuhcayotl|in tetoquiltin $1 tlani-neneuhcayomeh}}, itech tlacecempohualoni $2.}}",
        "category-subcat-count-limited": "Inīn {{PLURAL:$1|neneuhcāyōtzintli cah|$1 neneuhcāyōtzintli cateh}} inīn neneuhcāyōc.",
-       "category-article-count": "{{PLURAL:$2|Inìn tlaìxmatkàyòtlàlilòtl san kipia|Inìn tlaìxmatkàyòtlàlilòtl kimpia {{PLURAL:$1|inìn tlaìxtlapalli|inîke $1 tlaìxtlapaltìn}}, ìwikpa $2.}}",
+       "category-article-count": "{{PLURAL:$2|Inin neneuhcayotl zan quipiya in tetoquilli tlahcuilolli.|{{PLURAL:$1|In tetoquilli tlahcuilolli itech pohui|In tetoquiltin $1 tlahcuiloltin itech pohui}}, inin neneuhcayotl itech tlacecempohualoni ipan $2.}}",
        "category-article-count-limited": "Inīn {{PLURAL:$1|zāzanilli cah|$1 zāzanilli cateh}} inīn neneuhcāyōc.",
        "category-file-count": "{{PLURAL:$2|Inìn tlaìxmatkàyòtlàlilòtl san kipia|Inìn tlaìxmatkàyòtlalilòtl kimpia {{PLURAL:$1|inìn èwalli|inîke $1 èwaltìn}}, ìwikpa $2.}}",
        "category-file-count-limited": "{{PLURAL:$1|Inìn tlâkuilòlèwalli kä|Inîkë $1 tlâkuilòlèwaltìn katêkë}} ìpan inìn tlaìxmatkàtlàlilòtl.",
        "cancel": "Xiccāhua",
        "moredotdotdot": "Huehca ōmpa...",
        "mypage": "Noāmauh",
-       "mytalk": "Nozānīl",
+       "mytalk": "Teixnamiquiliztli",
        "anontalk": "Tēixnāmiquiliztli",
        "navigation": "Nēnemōhualiztli",
-       "and": "&#32;īhuān",
+       "and": "&#32;ihuan",
        "qbfind": "Xicahci",
        "qbbrowse": "Xitlatepotztoca",
        "qbedit": "Xicpatla",
        "faq": "Zan īc tētlatlanīliztli",
        "faqpage": "Project:FAQ",
        "actions": "Āyiliztli",
-       "namespaces": "Tōcātlacāuhtli",
+       "namespaces": "Tocatlacauhtli",
        "variants": "Nepāpan",
-       "navigation-heading": "Nemiliztlahtōlpōhualāmatl",
+       "navigation-heading": "Nemiliztlahtolpohualamatl",
        "errorpagetitle": "Aiuhcāyōtl",
        "returnto": "Ximocuepa īhuīc $1.",
-       "tagline": "Īhuīcpa {{SITENAME}}",
-       "help": "Tēpalēhuiliztli",
-       "search": "Nican tictemoz",
-       "searchbutton": "Tictēmōz",
+       "tagline": "Itechcopa {{SITENAME}}",
+       "help": "Tepalehuiliztli",
+       "search": "Tlatemoliztli",
+       "searchbutton": "Tlatemoliztli",
        "go": "Xiyauh",
        "searcharticle": "Xiyauh",
        "history": "Tlaīxtli ītlahtōllo",
-       "history_short": "Tlahtōllōtl",
+       "history_short": "Tlahtollotl",
        "updatedmarker": "ōmoyancuīx īhuīcpa xōcoyōc notlahpololiz",
        "printableversion": "Tepoztlahcuilōlli",
        "permalink": "Mochipa tzonhuiliztli",
        "unprotectthispage": "Xicpatla inīn tlaīxtli ītlapiyaliz",
        "newpage": "Yancuic tlaīxtli",
        "talkpage": "Xictlahto inīn tlaīxtli ītechcopa",
-       "talkpagelinktext": "Nenonotzaliztli",
+       "talkpagelinktext": "Teixnamiquiliztli",
        "specialpage": "Nònkuâkìskàtlaìxtlapalli",
        "personaltools": "In tlein nitēquitiltilia",
        "articlepage": "Xiquitta in tlamantlaīxtli",
-       "talk": "Zānīlli",
+       "talk": "Teixnamiquiliztli",
        "views": "Tlachiyaliztli",
-       "toolbox": "Tequitīhuani",
+       "toolbox": "Tequitihualoni",
        "userpage": "Xiquitta tlatequitiltilīlli zāzanilli",
        "projectpage": "Xiquitta tlachīhualiztli zāzanilli",
        "imagepage": "Xiquitta in zāzanilli īāma",
        "otherlanguages": "Occequīntīn tlahtōlcopa",
        "redirectedfrom": "(Ōmotlacuep īhuīcpa $1)",
        "redirectpagesub": "Ōmotlacuep zāzanilli",
-       "lastmodifiedat": "Inīn zāzanilli ōtlapatlac catca īpan $2, $1.",
+       "lastmodifiedat": "Inin tlahcuilolli omopatlac immanin $1, ipan $2.",
        "viewcount": "Inīn zāzanilli quintlapōhua {{PLURAL:$1|cē tlahpololiztli|$1 tlahpololiztli}}.",
        "protectedpage": "Ōmoquīxtix zāzanilli",
        "jumpto": "Īhuīcpa ticholōz:",
        "jumptonavigation": "nēnemōhualiztli",
-       "jumptosearch": "tlatēmoliztli",
-       "aboutsite": "Ītechcopa {{SITENAME}}",
-       "aboutpage": "Project:Ītechcopa",
+       "jumptosearch": "Tlatemoliztli",
+       "aboutsite": "Itechcopa {{SITENAME}}",
+       "aboutpage": "Project:Itechcopa",
        "copyright": "In tlahcuilōlli cah tlacēcencāhuani īpan $1 tel ahmo intlā īcuepca motēnēhua.",
        "copyrightpage": "{{ns:project}}:Tlachīhualōni ītlapiyaliz",
-       "currentevents": "Āxcāncāyōtl",
+       "currentevents": "Axcancayotl",
        "currentevents-url": "Project:Āxcāncāyōtl",
-       "disclaimers": "Nahuatīllahtōl",
+       "disclaimers": "tlamamalquixtiliztli",
        "edithelp": "Tlapatlaliztechcopa tēpalēhuiliztli",
        "helppage-top-gethelp": "Tēpalēhuiliztli",
-       "mainpage": "Huēyitlaīxtli",
-       "mainpage-description": "Huēyitlaīxtli",
+       "mainpage": "Yacatlahcuilolli",
+       "mainpage-description": "Yacatlahcuilolli",
        "policy-url": "Project:Nahuatīltōn",
        "portal": "Calīxcuātl tocalpōl",
        "portal-url": "Project:Calīxcuātl tocalpōl",
-       "privacy": "Tlahcuilōlli piyaliznahuatīlli",
+       "privacy": "Tlahcuilolli piyaliznahuatilli",
        "privacypage": "Project:Tlahcuilōlpiyaliztechcopa nahuatīltōn",
        "badaccess": "Tlahuelītiliztechcopa ahcuallōtl",
        "badaccess-group0": "Tehhuātl ahmo tiquichīhua inōn tiquiēlēhuia.",
        "editold": "xicpatla",
        "viewsourceold": "xiquitta mēyalli",
        "editlink": "xicpatla",
-       "viewsourcelink": "xiquitta mēyalli",
+       "viewsourcelink": "Tiquittaz itzintiliz",
        "editsectionhint": "Xicpatla in: $1",
-       "toc": "Inīn tlahcuilōlco",
+       "toc": "In tlein quipiya inin tlahcuilolli",
        "showtoc": "xicnēxti",
        "hidetoc": "xictlāti",
        "collapsible-collapse": "Motlàtìs",
        "site-atom-feed": "$1 Atom huelītiliztli",
        "page-rss-feed": "\"$1\" RSS huelītiliztli",
        "page-atom-feed": "\"$1\" RSS huelītiliztli",
-       "red-link-title": "$1 (ayāc in centlaīxtli)",
-       "nstab-main": "Tlaīxtli",
+       "red-link-title": "$1 (ahmo oncah tlahcuilolli)",
+       "nstab-main": "Tlahcuilolli-amatl",
        "nstab-user": "Tlatequitiltilīlli",
        "nstab-media": "Mēdiatl",
-       "nstab-special": "Nònkuâkìskàtlaìxtlapalli",
+       "nstab-special": "Noncuahquizqui tlahcuilolli",
        "nstab-project": "Ìtlaìxtlapal in tlayẻkàntekitl",
-       "nstab-image": "Ihcuilōlli",
+       "nstab-image": "Tlahcuilolpiyalli",
        "nstab-mediawiki": "Tlahcuilōltzintli",
        "nstab-template": "Nemachiòtl",
        "nstab-help": "Tèpalèwilistli",
        "nstab-category": "Tlaìxmatkàyòtlàlilòtl",
-       "mainpage-nstab": "Huēyitlaīxtli",
+       "mainpage-nstab": "Yacatlahcuilolli",
        "nosuchaction": "Ahmo ia tlachīhualiztli",
        "nosuchspecialpage": "Âmò ka inòn nònkuâkìskàtlaìxtlapalli",
        "nospecialpagetext": "<strong>Tiknẻki sè nònkuâkìskàtlaìxtlapalli tlèn âmò kä.</strong>\n\nKualli tikỉtas sè ìntlapòpòwaltekpànal in nònkuâkìskàtlaìxtlapaltìn ìpan [[Special:SpecialPages|{{int:specialpages}}]].",
        "welcomeuser": "Ximopanōlti, $1!",
        "yourname": "Tequihuihcātōcāitl:",
        "userlogin-yourname": "Tequihuihcātōcāitl",
+       "userlogin-yourname-ph": "Xiquihcuilo motoca iuhqui tequitihuani",
        "yourpassword": "Motlahtōlichtacāyo",
+       "userlogin-yourpassword": "Ichtacamachiyotl",
+       "createacct-yourpassword-ph": "Xictlali centetl ichtacamachiyotl",
        "yourpasswordagain": "Motlahtōlichtacāyo occeppa",
+       "createacct-yourpasswordagain": "Xicneltilia in ichtacamachiyotl",
+       "createacct-yourpasswordagain-ph": "Occepa xictlali in ichtacamachiyotl",
        "yourdomainname": "Moāxcāyō",
        "login": "Xicalaqui",
        "nav-login-createaccount": "Ximocalaqui / ximomachiyōmaca",
        "createaccount": "Xicchīhua tlapōhualli",
        "gotaccount": "¿Ye ticpiya cē tlapōhualli? '''$1'''.",
        "gotaccountlink": "Ximocalaqui",
+       "createacct-email-ph": "xiquihcuilo mocorreo electrónico",
        "createaccountmail": "Ticnemītīz ahmo cemihcac zāzoichtacātlahtōlli nō in tiquēhualtīz in maltzinteyōtl monetitlanizyeyān",
        "createaccountreason": "Tleīpampa:",
        "createacct-reason": "Tleīpampa",
        "pt-login": "Xicalaqui",
        "pt-login-button": "Xicalaqui",
        "pt-createaccount": "Xicchīhua motlapōhual",
+       "pt-userlogout": "Tiquizaz",
        "changepassword": "Xicpatla motlahtōlichtacāyo",
        "resetpass_header": "Xicpatla motlahtōlichtacāyo",
        "oldpassword": "Huēhueh motlahtōlichtacayo:",
        "revertmerge": "Tiquīxipehuaz",
        "history-title": "«$1» ītlaceppahuiliztlahtōllo",
        "lineno": "Pāntli $1:",
-       "editundo": "Tichuelōz",
-       "searchresults": "Tlatēmoliztli",
+       "editundo": "Ticxitiniz",
+       "searchresults": "motlatemoliz itlananquilizhuan",
        "searchresults-title": "«$1» tlatēmōliztli īmochīhualiz",
        "prevn": "{{PLURAL:$1|$1}} achtopa",
        "nextn": "niman {{PLURAL:$1|$1}}",
        "searchprofile-images-tooltip": "Tiquintēmōz tlahcuilōlli",
        "searchprofile-everything-tooltip": "Tictēmōz mochi tlapiyalizpan (mopiyah tēixnāmiquiliztli zāzanilli)",
        "search-result-size": "$1 ({{PLURAL:$2|1 tlahtōl|$2 tlahtōltin}})",
-       "search-redirect": "(tlacuepaliztli $1)",
+       "search-redirect": "(ixquichca ompa mitzhuica $1)",
        "search-section": "(tlahtōltzintli $1)",
        "search-category": "(tlaìxmatkàyòtlàlilòtl $1)",
        "search-suggest": "Ahnōceh tiquihtōznequiya: $1",
        "rcshowhidemine": "$1 notlahcuilōl",
        "rcshowhidemine-show": "Xicnēxti",
        "rclinks": "Xiquintta xōcoyōc $1 tlapatlaliztli xōcoyōc $2 tōnalpan.<br />$3",
-       "diff": "ahneneuh",
-       "hist": "tlahtōl",
+       "diff": "ahneneuhqui",
+       "hist": "tlahtollotl",
        "hide": "Tiquintlātīz",
        "show": "Xicnēxti",
        "minoreditletter": "p",
        "newsectionsummary": "Yancuīc tlahtōltzintli: /* $1 */",
        "recentchangeslinked": "Tlapatlaliztli tzonhuilizpan",
        "recentchangeslinked-feed": "Tlapatlaliztli tzonhuilizpan",
-       "recentchangeslinked-toolbox": "Tlapatlaliztli tzonhuilizpan",
+       "recentchangeslinked-toolbox": "Itloc itlapatlalizhuan",
        "recentchangeslinked-title": "Tlapatlaliztli \"$1\" ītechcopa",
        "recentchangeslinked-page": "Tlaīxtli ītōcā:",
-       "upload": "Tlahcuilōlquetza",
+       "upload": "Tlahcuilolquetzaliztli",
        "uploadbtn": "Tlahcuilōlquetza",
        "uploadnologin": "Ahmo ōtimocalac",
        "uploaderror": "Tlaquetzaliztli ahcuallōtl",
        "filehist-user": "Tequihuihqui",
        "filehist-dimensions": "Octacayōtl",
        "filehist-comment": "TlahtōIcaquiliztīlōni",
-       "imagelinks": "Ihcuilōlli ītequiuh",
+       "imagelinks": "In canin oquitlalihqueh",
        "linkstoimage": "Inīn {{PLURAL:$1|zāzanilli motzonhuilia|$1 zāzanilli motzonhuiliah}} inīn tlahcuilōlhuīc:",
        "nolinkstoimage": "Ahmo cateh zāzaniltin tlein tzonhuiliah inīn tlahcuilōlhuīc.",
        "morelinkstoimage": "Tiquinttāz [[Special:WhatLinksHere/$1|achi tzonhuiliztli]] inīn tlahcuilōlhuīc.",
        "blanknamespace": "(Huēyi)",
        "contributions": "In {{GENDER:$1|tlatequitiltilīlli}} ītlahcuilōl",
        "contributions-title": "Tlatequitiltilīlli $1 ītlahcuilōl",
-       "mycontris": "Notlahcuilōl",
+       "mycontris": "Notlahcuilol",
        "contribsub2": "$1 ($2)",
        "uctop": "(āxcān tlapatlaliztli)",
        "month": "Īhuīcpa mētztli (auh achtopa):",
        "sp-contributions-search": "Tiquintlatēmōz tlapatlaliztli",
        "sp-contributions-username": "IP nozo tlatequitiltilīlli ītōcā:",
        "sp-contributions-submit": "Tlatēmōz",
-       "whatlinkshere": "In tlein quitzonhuilia nicān",
+       "whatlinkshere": "In tlein quitzonhuilia nican",
        "whatlinkshere-title": "Zāzaniltin quitzonhuiliah $1",
        "whatlinkshere-page": "Zāzanilli:",
        "linkshere": "Inīn zāzaniltin quitzonhuiliah '''[[:$1]]''' īhuīc:",
        "tooltip-pt-mycontris": "{{GENDER:|Motlahcuilōl}}",
        "tooltip-pt-login": "Tihuelīti timocalaqui, tēl ahmo tihuīquilia.",
        "tooltip-pt-logout": "Tiquīzāz",
-       "tooltip-ca-talk": "Inīn tlahcuilōlli zānīllī ītechcopa",
-       "tooltip-ca-edit": "Xicpatla inīn tlaīxtli",
+       "tooltip-ca-talk": "Iteixnamiquiliz itechpa inin tlahcuilolli",
+       "tooltip-ca-edit": "Ticpatlaz inin tlahcuilolli",
        "tooltip-ca-addsection": "Tictzintīz yancuic xeliuhcāyōtl.",
        "tooltip-ca-viewsource": "Inīn zāzanilli ōmoquīxti. Tihuelīti tiquitta ītlahtōlcaquiliztilōni.",
        "tooltip-ca-history": "Achtopa āxcān zāzanilli īhuān in tlatequitiltilīlli ōquinchīuhqueh",
        "tooltip-ca-watch": "Ticcēntilīz inīn zāzanilli motlachiyalizhuīc",
        "tooltip-ca-unwatch": "Ahtictlachiyāz inīn zāzanilli",
        "tooltip-search": "Tlatēmōz īpan {{SITENAME}}",
-       "tooltip-search-go": "Tiyaz in zāzanilhuīc īca inīn huel melāhuac tōcaitl intlā yez",
+       "tooltip-search-go": "Tiyaz ihuicpa tlahcuilolli ica inin huel melahuac tocaitl intla oncah",
        "tooltip-search-fulltext": "Tictemōz inīn tlahcuilōlli in āmac",
-       "tooltip-p-logo": "Xiquitta in tohuēyitlaīx",
-       "tooltip-n-mainpage": "Tiquittaz in huēyitlaīxtli",
+       "tooltip-p-logo": "Tiquittaz in yacatlahcuilolli",
+       "tooltip-n-mainpage": "Tiquittaz in yacatlahcuilolli",
        "tooltip-n-mainpage-description": "Xiquitta in tohuēyitlaīx",
        "tooltip-n-portal": "Tlachīhualiztechcopa, inōn tihuelīti titlachīhua, tlatēmoyān",
        "tooltip-n-recentchanges": "Yancuic īpan tlapatlaliztli in huiqui",
        "tooltip-n-randompage": "Tiquittaz centlaīxtli",
        "tooltip-n-help": "In tēmachtīlōyān",
        "tooltip-t-whatlinkshere": "Mochīntīn zāzaniltin huiquipan quitzonhuiliah nicān",
-       "tooltip-t-recentchangeslinked": "Yancuic tlapatlaliztli inīn zāzanilhuīcpa moquintzonhuilia",
+       "tooltip-t-recentchangeslinked": "Yancuic tlapatlaliztli ipan tlahcuiloltin tlein quitzonhuilia nican",
        "tooltip-feed-rss": "RSS tlachicāhualiztli inīn zāzaniltechcopa",
        "tooltip-feed-atom": "Atom tlachicāhualiztli inīn zāzaniltechcopa",
        "tooltip-t-contributions": "Tlapōhualmatl ītechpa {{GENDER:$1|inīn tlatequitiltilīlli}} ītlahcuilōl",
        "tooltip-t-emailuser": "Tiquihcuilōz inīn tlatequitiltililhuīc",
-       "tooltip-t-upload": "Tiquinquetzāz tlahcuilōlli",
+       "tooltip-t-upload": "Tiquinquetzaz tlahcuiloltin",
        "tooltip-t-specialpages": "Ìntlapòpòwaltekpànal mochtìn in nònkuâkìskàtlaìxtlapaltìn",
-       "tooltip-t-print": "Tepoztlahcuilōlli",
-       "tooltip-ca-nstab-main": "Xiquitta in tlamantlaīxtli",
+       "tooltip-t-print": "Tepoztlahcuilolli",
+       "tooltip-ca-nstab-main": "Tiquittaz tlein quipiya in tlahcuilolli",
        "tooltip-ca-nstab-user": "Xiquitta tlatequitiltilīlli īzāzanil",
        "tooltip-ca-nstab-special": "Inīn nōncuahquīzqui āmatl, auh ahmohuelitizpatla",
        "tooltip-ca-nstab-project": "Xiquitta in tlatequipanōllaīxtli",
        "fileduplicatesearch-filename": "Tlahcuilōlli ītōcā:",
        "fileduplicatesearch-submit": "Tlatēmōz",
        "fileduplicatesearch-info": "$1 × $2 pixelli<br />Tlahcuilōlli īxquichiliz: $3<br />MIME iuhcāyōtl: $4",
-       "specialpages": "Nònkuâkìskàtlaìxtlapaltìn",
+       "specialpages": "Noncuahquizqui tlahcuilolli",
        "specialpages-note": "* Yeliztli nōncuahquīzqui āmatl.\n* <span class=\"mw-specialpagerestricted\">Tlaquīxtīlli nōncuahquīzqui āmatl.</span>\n* <span class=\"mw-specialpagecached\">Tlatlātīlli nōncuahquīzqui āmatl (aocmo monemitīa).</span>",
        "specialpages-group-other": "Oksẻki nònkuâkìskàtlaìxtlapaltìn",
        "specialpages-group-login": "Ximocalaqui / ximomachiyōmaca",
        "htmlform-selectorother-other": "Occē",
        "rightsnone": "ahtlein",
        "revdelete-summary": "ticpatlāz tlahcuilōltōn",
-       "searchsuggest-search": "Mà motèmo",
+       "searchsuggest-search": "Tlatemoliztli",
        "api-error-ok-but-empty": "Tlâtek îtlakawilistli: Âmò tènankilia in tlatèmakani.",
        "api-error-overwrite": "Awel motlâkuilnepanòltis sè èwalli tlèn yi katki.",
        "api-error-stashfailed": "Tlâtek îtlakawilistli: In tlatèmakani awel òkeuh in èwalpanòni.",
index 0b49df5..b46c21b 100644 (file)
        "tag-list-wrapper": "([[Special:Tags|$1 ê piau-chhiam]]: $2)",
        "logentry-move-move": "$1 {{GENDER:$2|sóa}} $3 chit ia̍h khì $4",
        "logentry-newusers-create": "已經{{GENDER:$2|開好}}用者口座 $1",
-       "searchsuggest-search": "Chhoē",
+       "searchsuggest-search": "Chhoē {{SITENAME}}",
        "expandtemplates": "Khok-chhiong pang-bô͘",
        "expand_templates_input": "Su-ji̍p bûn-jī:",
        "expand_templates_output": "Kiat-kó:",
index f356b98..20db454 100644 (file)
        "duplicate-defaultsort": "Advarsel: Standardsorteringen «$2» tar over for den tidligere sorteringen «$1».",
        "duplicate-displaytitle": "<strong>Advarsel:</strong> Visningstittel \"$2\" erstatter tidligere visningstittel \"$1\".",
        "restricted-displaytitle": "<strong>Advarsel:</strong> Visningstittelen «$1» ble ignorert siden den ikke tilsvarer sidens faktiske tittel.",
-       "invalid-indicator-name": "<p>Feil:</strong> Sidestatus-indikatornes <code>navn</code>-attributt kan ikke være tomt.",
+       "invalid-indicator-name": "<p>Feil:</strong> Sidestatus-indikatornes <code>name</code>-attributt kan ikke være tomt.",
        "version": "Versjon",
        "version-extensions": "Installerte utvidelser",
        "version-skins": "Installerte drakter",
        "feedback-thanks": "Din tilbakemelding til siden \"[ $2  $1 ]\" er sendt. Takk skal du ha!",
        "feedback-thanks-title": "Takk!",
        "feedback-useragent": "Brukeragent",
-       "searchsuggest-search": "Søk",
+       "searchsuggest-search": "Søk i {{SITENAME}}",
        "searchsuggest-containing": "inneholder …",
        "api-error-autoblocked": "Din IP-adresse har blitt blokkert automatisk fordi den ble brukt av en blokkert bruker.",
        "api-error-badaccess-groups": "Du har ikke tillatelse til å laste opp filer til denne wikien.",
index 9c59829..0456e94 100644 (file)
        "customjsprotected": "तपाईंलाई यो जाभास्कृप्ट पृष्ठ सम्पादन गर्ने अनुमति छैन, किनकी यसमा कुनै अर्को प्रयोगकर्ताको व्यक्तिगत अभिरुचीहरू संग्रहित छन् ।",
        "mycustomcssprotected": "यो CSSपृष्ठ सम्पादन गर्नको लागि लागि तपाईंलाई अनुमति छैन ।",
        "mycustomjsprotected": "यो जावास्क्रिप्ट पृष्ठ सम्पादन गर्नको लागि तपाईंलाई अनुमति छैन ।",
-       "myprivateinfoprotected": "तपाà¤\88à¤\81सà¤\81à¤\97 à¤¤à¤ªà¤¾à¤\88à¤\81को निजी जानकारीहरू सम्पादन गर्ने अनुमती छैन",
+       "myprivateinfoprotected": "तपाà¤\88à¤\82सà¤\81à¤\97 à¤¤à¤ªà¤¾à¤\88à¤\82को निजी जानकारीहरू सम्पादन गर्ने अनुमती छैन",
        "mypreferencesprotected": "तपाईंसँग तपाईंको अभिरुचीहरू सम्पादन गर्ने अनुमती छैन",
        "ns-specialprotected": "विशेष पृष्ठहरू सम्पादन गर्न सकिदैन।",
        "titleprotected": "[[User:$1|$1]]द्वारा यो शीर्षक निर्माणहुनबाट जोगाइएको छ।\nकारण <em>$2</em> हो ।",
        "welcomecreation-msg": "तपाईंको खाता तयार भयो । \nतपाईंले चाहनु भएको खण्डमा {{SITENAME}} [[Special:Preferences|प्राथमिकताहरू]] परिवर्तन गर्न सक्नु हुनेछ ।",
        "yourname": "प्रयोगकर्ता नाम:",
        "userlogin-yourname": "प्रयोगकर्ता नाम",
-       "userlogin-yourname-ph": "तपाà¤\88à¤\81को प्रयोगकर्तानाम लेख्नुहोस्",
+       "userlogin-yourname-ph": "तपाà¤\88à¤\82को प्रयोगकर्तानाम लेख्नुहोस्",
        "createacct-another-username-ph": "प्रयोगकर्तानाम लेख्नुहोस्",
        "yourpassword": "पासवर्ड",
        "userlogin-yourpassword": "पासवर्ड",
-       "userlogin-yourpassword-ph": "तपाà¤\88à¤\81को पासवर्ड लेख्नुहोस्",
+       "userlogin-yourpassword-ph": "तपाà¤\88à¤\82को पासवर्ड लेख्नुहोस्",
        "createacct-yourpassword-ph": "पासवर्ड लेख्नुहोस्",
        "yourpasswordagain": "पासवर्ड फेरि टाईप गर्नुहोस्",
        "createacct-yourpasswordagain": "पासवर्ड निश्चित गर्नुहोस्",
        "createaccountreason": "कारण:",
        "createacct-reason": "कारण",
        "createacct-reason-ph": "किन तपाईं नयाँ खाता खोलिरहनु भएको हो ?",
-       "createacct-submit": "तपाà¤\88à¤\81को खाता सिर्जना गर्नुहोस",
+       "createacct-submit": "तपाà¤\88à¤\82को खाता सिर्जना गर्नुहोस",
        "createacct-another-submit": "खाता खोल्नुहोस्",
        "createacct-benefit-heading": "{{SITENAME}} तपाईं जस्तै मानिसहरूद्वारा सिर्जना गरिएको हो ।",
        "createacct-benefit-body1": "{{PLURAL:$1|सम्पादन|सम्पादनहरू}}",
        "createacct-error": "खाता बनाउँदा त्रुटि",
        "createaccounterror": "खाता बनाउन सकिएन: $1",
        "nocookiesnew": "तपाईंको खाता बनाइयो, तर तपाईं प्रवेश गर्नुभएको छैन ।\n{{SITENAME}} ले प्रयोगकर्ता प्रवेश गराउन कुकीहरू प्रयोग गर्छ ।\nतपाईंका कुकीहरू निस्क्रिय छन् ।\nकृपया सक्रिय बनाइ , नाम र प्रवेशशब्द राखी प्रवेश गर्नुहोला ।",
-       "nocookieslogin": "{{SITENAME}} ले प्रयोगकर्ता प्रवेश गराउन कुकीहरू प्रयोग गर्छ । तपाईंको कुकीहरू निस्क्रिय गरिएको छ । कृपया सक्रिय बनाइ , नाम र प्रवेशशब्द राखी प्रवेश गर्नुहोला ।",
+       "nocookieslogin": "{{SITENAME}} ले प्रयोगकर्ता प्रवेश गराउन कुकीहरू प्रयोग गर्छ। तपाईंको कुकीहरू निष्कृय गरिएको छ। कृपया सक्रिय बनाइ पुन प्रवेश गर्नुहोला।",
        "nocookiesfornew": "प्रयोगकर्ताको खाता निर्माण गरिएन, हामीले यसको मूल स्रोत निर्धारण गर्न सकेनौं।\nनिश्चित गर्नुहोस् तपाईंले कुकी सक्रिय गर्नुभएको छ, पुनः यस पृष्ठलाई खोल्ने प्रयास गर्नुहोस्।",
        "nocookiesforlogin": "{{int:nocookieslogin}}",
        "noname": "तपाईंले सही प्रयोगकर्ता नाम दिनु भएन।",
        "loginsuccesstitle": "प्रवेश सफल",
        "loginsuccess": "'''तपाईंले {{SITENAME}}मा  \"$1\" को रुपमा प्रवेश गर्नुभएकोछ।'''",
        "nosuchuser": "\"$1\" को नामबाट कुनै पनि प्रयोगकर्ता भेटिएनन् ।\nप्रयोगकर्ता नाम वर्णसंवेदनशील हुन्छन् ।\nहिज्जे जाँच्नुहोस् , या [[Special:CreateAccount|नयाँ खाता बनाउनुहोस्]].",
-       "nosuchusershort": " \"$1\" à¤¨à¤¾à¤®à¤\95à¥\8b à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤­à¥\87à¤\9fिà¤\8fन।\n à¤¤à¤ªà¤¾à¤\88à¤\81को हिज्जे जाँच्नुहोस् ।",
+       "nosuchusershort": " \"$1\" à¤¨à¤¾à¤®à¤\95à¥\8b à¤\95à¥\81नà¥\88 à¤ªà¤¨à¤¿ à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤­à¥\87à¤\9fिà¤\8fन।\n à¤¤à¤ªà¤¾à¤\88à¤\82को हिज्जे जाँच्नुहोस् ।",
        "nouserspecified": "तपाँईले प्रयोगकर्ताको नाम जनाउनुपर्छ।",
        "login-userblocked": "यस प्रयोगकर्तालाई रोक लगाइएको छ। प्रवेश गर्ने अनुमति छैन।",
        "wrongpassword": "पासवर्ड गलत हालियो।\nकृपया फेरि प्रयास गर्नुहोला।",
        "mailerror": " चिठी :$1 पठाउँदा त्रुटी भयो",
        "acct_creation_throttle_hit": "तपाईंको आईपी ठेगानाबाट आएका आगन्तुकद्वारा बितेको चौबिस घण्टामा यस विकिमा {{PLURAL:$1|एउटा खाता बनाइसकिएको छ|$1 खाताहरु बनाइसकिएका छन्}}, यस समयावधिमा यति नैं अधिकतम सीमा हो।\nअतः यस समय यस आईपी ठेगानाको प्रयोग गर्ने आगन्तुकले अरु खाता खोल्न सक्नेछैनन्।",
        "emailauthenticated": "तपाईंको इमेल ठेगाना $2 को $3 मा प्रमाणित गरिएको थियो।",
-       "emailnotauthenticated": "तपाà¤\88à¤\81को इमेल ठेगाना अहिले सम्म प्रमाणित गरिएको छैन ।\nनिम्न सुविधाको लागि कुनै पनि इमेल पठाइने छैन ।",
+       "emailnotauthenticated": "तपाà¤\88à¤\82को इमेल ठेगाना अहिले सम्म प्रमाणित गरिएको छैन ।\nनिम्न सुविधाको लागि कुनै पनि इमेल पठाइने छैन ।",
        "noemailprefs": "निम्न सुविधाहरू राम्ररी काम गर्नको लागि तपाईंको अभिरुचिमा आफ्नो ई-मेल ठेगाना खुलाउनुहोस् ।",
        "emailconfirmlink": "तपाईंको ई-मेल ठेगाना पक्का गर्नुहोस्",
        "invalidemailaddress": "ई-मेल ठेगाना स्वीकार गर्न सकिएन किन भनें यो सही प्रारूपमा छैन, कृपया सही प्रारूपको  ठेगाना दिनुहोस्।",
        "newpassword": "नयाँ पासवर्ड:",
        "retypenew": "प्रवेश शब्द पुन: दिनुहोस् :",
        "resetpass_submit": "पासवर्ड व्यवस्थित गरी र प्रवेशगर्ने",
-       "changepassword-success": "तपाà¤\88à¤\81को पासवर्ड सफलतापूर्वक परिवर्तन भयो!",
+       "changepassword-success": "तपाà¤\88à¤\82को पासवर्ड सफलतापूर्वक परिवर्तन भयो!",
        "changepassword-throttled": "तपाईंले भर्खरै धेरै पल्ट प्रवेश (लग इन)को निम्ति प्रयास गर्नुभएको छ। \nकृपया $1 पर्खेर मात्र प्रयास गर्नुहोस्।",
        "resetpass_forbidden": "पासवर्ड परिवर्तन गर्न मिल्दैन",
        "resetpass-no-info": "यो पृष्ठ सिधै हेर्नको लागि तपाईँले प्रवेश गर्नुपर्छ ।",
        "subject-preview": "विषय/शीर्षपंक्ति पूर्वरुप:",
        "previewerrortext": "तपाईंको परिवर्तनको पूर्वावलोकन बनाउन खोज्दा समस्या आएको छ ।",
        "blockedtitle": "प्रयोककर्तालाई रोक लगाइएको छ",
-       "blockedtext": "'''तपाà¤\88à¤\81à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¾à¤® à¤¯à¤¾ IP ठेगानालाई रोक लगाइएको छ ।'''\n\nरोक लगाउने  $1.\nरोक लगाउनाको कारण ''$2''.\n\n* रोक सुरू हुने : $8\n* रोक सकिने: $6\n* रोकबाट लक्षित: $7\n\nतपाईंले  $1 वा अरु कुनै  [[{{MediaWiki:Grouppage-sysop}}|प्रवन्धक]] सँग रोकको बारेमा छलफल गर्न सम्पर्क गर्न सक्नुहुन्छ ।\nतपाईँले  'प्रयोगकर्तालाई इ-मेल गर्ने ' सुविधा मान्य इमेल ठेगाना [[Special:Preferences|अभिरुचीहरू]]मा नखुलाए सम्म प्रयोगगर्न पाउनुहुने छैन र यसको प्रयोग गर्नबाट रोक लगाइएको छैन ।\nतपाईंको IP ठेगाना $3 को, र रोक्का संख्या #$5.\nकृपया तपाईँको प्रश्नमा सबै जानकारी खुलाउनुहोला ।",
+       "blockedtext": "'''तपाà¤\88à¤\82à¤\95à¥\8b à¤ªà¥\8dरयà¥\8bà¤\97à¤\95रà¥\8dता à¤¨à¤¾à¤® à¤¯à¤¾ à¤\86à¤\87 à¤ªà¥\80 ठेगानालाई रोक लगाइएको छ ।'''\n\nरोक लगाउने  $1.\nरोक लगाउनाको कारण ''$2''.\n\n* रोक सुरू हुने : $8\n* रोक सकिने: $6\n* रोकबाट लक्षित: $7\n\nतपाईंले  $1 वा अरु कुनै  [[{{MediaWiki:Grouppage-sysop}}|प्रवन्धक]] सँग रोकको बारेमा छलफल गर्न सम्पर्क गर्न सक्नुहुन्छ ।\nतपाईँले  'प्रयोगकर्तालाई इ-मेल गर्ने ' सुविधा मान्य इमेल ठेगाना [[Special:Preferences|अभिरुचीहरू]]मा नखुलाए सम्म प्रयोगगर्न पाउनुहुने छैन र यसको प्रयोग गर्नबाट रोक लगाइएको छैन ।\nतपाईंको IP ठेगाना $3 को, र रोक्का संख्या #$5.\nकृपया तपाईँको प्रश्नमा सबै जानकारी खुलाउनुहोला ।",
        "autoblockedtext": "तपाईंको IP ठेगानामाथि रोक लगाइएकोछ किन भनें यो अर्को प्रयोगकर्ताले प्रयोग गरेको थियो, जसलाई $1ले रोक लगाएका थिए। \nरोक लगाउनुको कारण:\n:''$2''  \n\n* रोकावट सुरु: $8\n* रोकावट सकिने: $6\n* रोकावटको प्रयोजन: $7\n\nतपाईं $1 सित सम्पर्क गर्न सक्नुहुन्छ अथवा कुनै [[{{MediaWiki:Grouppage-sysop}}|प्रबन्धक]]सँग रोकबारे चर्चा गर्न सक्नुहुन्छ ।\n\nध्यान दिनुहोस् कि तपाईंले यस प्रयोगकर्ताका लागि ई-मेलको प्रयोग तबसम्म गर्नसक्नुहुन्न जबसम्म तपाईंको [[Special:Preferences|अभिरुचि]] पंजिकृत गर्नु हुन्न वा यस ई-मेलको प्रयोगमाथि रोक लगाइएको हुँदैन । \n\nतपाईंको वर्तमान IP ठेगाना हो- $3, अनि रोक लगाइएको ID हो- #$5.\nकृपया कुनै बेला सोधनी गर्नु परे उपर्युक्त विवरण दर्शाउनु होला ।",
        "blockednoreason": "कारण दिइएको छैन",
        "whitelistedittext": "पाना सम्पादन गर्न तपाँईले $1 गर्नु पर्दछ।",
        "edit-hook-aborted": "हुकले सम्पादन बन्द गरिदियो ।\nयसले कुनै कारण दिएन ।",
        "edit-gone-missing": "पृष्ठ अद्यतन गर्न सकिएन\nयो मेटिएको जस्तो देखिन्छ ।",
        "edit-conflict": "द्वन्द्व सम्पादन गर्ने ।",
-       "edit-no-change": "तपाà¤\88à¤\81को सम्पादन वेवास्ता गरियो, किनकि कुनै पनि पाठ परिवर्तन गरिएन ।",
+       "edit-no-change": "तपाà¤\88à¤\82को सम्पादन वेवास्ता गरियो, किनकि कुनै पनि पाठ परिवर्तन गरिएन ।",
        "postedit-confirmation-created": "पृष्ठ सिर्जना गरियो ।",
        "postedit-confirmation-restored": "पृष्ठ पूर्वरूपमा फर्कायो ।",
        "postedit-confirmation-saved": "तपाईंको सम्पादन संग्रह गरिएको छ ।",
        "showingresults": "देखाउँदै  {{PLURAL:$1|'''१''' नतिजा|'''$1''' नतिजाहरू }} , #'''$2''' बाट सुरुहुने ।",
        "showingresultsinrange": "देखाई रहेको छ{{PLURAL:$1|<strong>1</strong> result|<strong>$1</strong> परिणाम}} सम्म पहुँच  #<strong>$2</strong> देखि #<strong>$3</strong> मा।",
        "search-showingresults": "{{PLURAL:$4|<strong>$3</strong> मा बाट <strong>$1</strong> परिणाम|<strong>$3</strong> मा बाट परिणाम <strong>$1 - $2</strong>}}",
-       "search-nonefound": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\95à¥\8dवà¥\87रà¥\80सँग मेल खाने नतिजाहरू भेटिएनन्",
+       "search-nonefound": "तपाà¤\88à¤\82à¤\95à¥\8b à¤\96à¥\8bà¤\9cसँग मेल खाने नतिजाहरू भेटिएनन्",
        "powersearch-legend": "उन्नत खोज",
        "powersearch-ns": "नेमस्पेसेजहरूमा खोज्ने :",
        "powersearch-togglelabel": "जाँच्ने :",
        "yourvariant": "लेखको भाषा संस्करण:",
        "prefs-help-variant": "तपाईंको मनपरेको संस्करण वा हिज्जे यस विकि भित्र सामग्री पृष्ठहरू प्रदर्शित गर्नका निमित्त।",
        "yournick": "नयाँ हस्ताक्षर:",
-       "prefs-help-signature": "वारà¥\8dतालाप à¤ªà¥\83षà¥\8dठà¤\95ा à¤\9fिपà¥\8dपणà¥\80हरà¥\82 \"<nowiki>~~~~</nowiki>\" à¤¦à¥\8dवारा à¤¦à¤¸à¥\8dतà¤\96त à¤\97रिनà¥\81परà¥\8dà¤\9b ,à¤\9cà¥\81न à¤ªà¤\9bि à¤¤à¤ªà¤¾à¤\88à¤\81को दस्तखत र समयरेखामा रुपान्तरित हुनेछ ।",
+       "prefs-help-signature": "वारà¥\8dतालाप à¤ªà¥\83षà¥\8dठà¤\95ा à¤\9fिपà¥\8dपणà¥\80हरà¥\82 \"<nowiki>~~~~</nowiki>\" à¤¦à¥\8dवारा à¤¦à¤¸à¥\8dतà¤\96त à¤\97रिनà¥\81परà¥\8dà¤\9b ,à¤\9cà¥\81न à¤ªà¤\9bि à¤¤à¤ªà¤¾à¤\88à¤\82को दस्तखत र समयरेखामा रुपान्तरित हुनेछ ।",
        "badsig": "अमान्य कच्चा दस्तखत।\nHTML ट्यागहरु जाँच्नुहोस् ।",
        "badsiglength": "तपाईंको दस्तखत धेरै लामो छ।\nयो $1 {{PLURAL:$1|अक्षर|अक्षरहरू}} भन्दा लामो हुनु हुँदैन ।",
        "yourgender": "कसरी वताउन चाहनुहुन्छ ?",
        "right-editusercssjs": "अरु प्रयोगकर्ताको CSS र JS फाइलहरू सम्पादन गर्ने",
        "right-editusercss": "अरु प्रयोगकर्ताको CSS फाइलहरू सम्पादन गर्ने",
        "right-edituserjs": "अरु प्रयोकर्ताको जाभास्क्रिप्ट फाइलहरू सम्पादन गर्ने",
-       "right-editmyusercss": "तपाà¤\88à¤\81को आफ्नो CSS फाइलहरू सम्पादन गर्नुहोस्",
-       "right-editmyuserjs": "तपाà¤\88à¤\81को आफ्नो जाभा स्क्रिप्ट फाइलहरू सम्पादन गर्ने",
-       "right-viewmywatchlist": "तपाà¤\88à¤\81à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\81ची हेर्नुहोस्",
+       "right-editmyusercss": "तपाà¤\88à¤\82को आफ्नो CSS फाइलहरू सम्पादन गर्नुहोस्",
+       "right-editmyuserjs": "तपाà¤\88à¤\82को आफ्नो जाभा स्क्रिप्ट फाइलहरू सम्पादन गर्ने",
+       "right-viewmywatchlist": "तपाà¤\88à¤\82à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82ची हेर्नुहोस्",
        "right-editmywatchlist": "आफ्नो अबलोकन सूची सम्पादन गर्नुहोस् । ख्याल राख्नु यस अधिकार विना पनि केहि कार्यबाट पृष्ठहरू थप गर्न सकिन्छ ।",
        "right-viewmyprivateinfo": "आफ्नो व्यक्तिगत डेटा हेर्नुहोस (उदाहरण इमेल ठेगाना, सहि नाम)",
        "right-editmyprivateinfo": "आफ्नो निजी जानकारी (जस्तैः इमेल ठेगाना, बास्तविक नाम) सम्पादन गर्नुहोस्",
        "action-userrights-interwiki": "अरु विकिका प्रयोगकर्ताहरूको प्रयोगकर्ता अधिकारलाई सम्पादन गर्ने",
        "action-siteadmin": "डेटाबेस बन्दगर्ने वा खोल्ने",
        "action-sendemail": "इमेलहरु पठाउने",
-       "action-editmywatchlist": "तपाà¤\88à¤\81à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\81ची सम्पादन गर्नुहोस",
-       "action-viewmywatchlist": "तपाà¤\88à¤\81à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\81à¤\9aà¥\80 à¤¹à¥\87रà¥\8dनà¥\81हà¥\8bस",
+       "action-editmywatchlist": "तपाà¤\88à¤\82à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82ची सम्पादन गर्नुहोस",
+       "action-viewmywatchlist": "तपाà¤\88à¤\82à¤\95à¥\8b à¤¨à¤¿à¤\97रानà¥\80 à¤¸à¥\82à¤\9aà¥\80 à¤¹à¥\87रà¥\8dनà¥\81हà¥\8bसà¥\8d",
        "action-viewmyprivateinfo": "तपाईंको व्यक्तिगत जानकारी हेर्नुहोस",
-       "action-editmyprivateinfo": "तपाà¤\88à¤\81को व्यक्तिगत जानकारी सम्पादन गर्नुहोस",
+       "action-editmyprivateinfo": "तपाà¤\88à¤\82को व्यक्तिगत जानकारी सम्पादन गर्नुहोस",
        "action-editcontentmodel": "पृष्ठको सामग्री नमुना सम्पादन",
        "action-managechangetags": "डाटाबेसबाट ट्यागहरू बनाउने र मेटाउने",
        "action-applychangetags": "तपाईंको परिवर्तनसँगै ट्यागहरू लागु गर्ने",
        "tooltip-ca-undelete": "मेटिएको भए पनि यो पृष्ठको सम्पादनहरू पुन:प्राप्त गर्नुहोस्",
        "tooltip-ca-move": "यो पृष्ठलाई सार्नुहोस्",
        "tooltip-ca-watch": "यो पृष्ठलाई तपाईंको अवलोकनसूचीमा थप्नुहोस्",
-       "tooltip-ca-unwatch": "यà¥\8b à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¤à¤ªà¤¾à¤\88à¤\81को अवलोकनसूचीबाट हटाउनुहोस्",
+       "tooltip-ca-unwatch": "यà¥\8b à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¤à¤ªà¤¾à¤\88à¤\82को अवलोकनसूचीबाट हटाउनुहोस्",
        "tooltip-search": "{{SITENAME}} मा खोज्नुहोस्",
        "tooltip-search-go": "यदि यो नामको पृष्ठ रहेको छ भने त्यसमा जाने",
        "tooltip-search-fulltext": "यो पाठको लागि पृष्ठहरू खोज्नुहोस्",
        "tooltip-preview": "तपाईंको परिवर्तनको पूर्वरूप , कृपया सङ्ग्रह गर्नु अघि यो प्रयोग गर्नुहोला !",
        "tooltip-diff": "तपाईंले पाठमा के के परिवर्तन गर्नुभयो भनेर देखाउने",
        "tooltip-compareselectedversions": "यस पृष्ठको छानिएका दुई पुनरावलोकन बीच फरक हेर्नुहोस्",
-       "tooltip-watch": "यà¥\8b à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¤à¤ªà¤¾à¤\88à¤\81को अवलोकनसूचीमा थप्नुहोस्",
+       "tooltip-watch": "यà¥\8b à¤ªà¥\83षà¥\8dठलाà¤\88 à¤¤à¤ªà¤¾à¤\88à¤\82को अवलोकनसूचीमा थप्नुहोस्",
        "tooltip-watchlistedit-normal-submit": "शीर्षकहरू हटाउने",
        "tooltip-watchlistedit-raw-submit": "निगरानी सूची अध्यावधि गर्ने",
        "tooltip-recreate": "मेटिएको भए ता पनि यो पृष्ट पुन:निर्माण गर्नुहोस् ।",
index 79c3ea9..97dffa4 100644 (file)
        "oct": "Diphalane",
        "nov": "Dibatsela",
        "dec": "Manthole",
+       "january-date": "$1 Pherekgong",
+       "february-date": "$1 Dibokwane",
+       "march-date": "$1 Hlakola",
+       "april-date": "$1 Moranang",
+       "may-date": "$1 Mopitlo",
+       "june-date": "$1 Phupu",
+       "july-date": "$1 Mosegamanye",
+       "august-date": "$1 Phato",
+       "september-date": "$1 Lewedi",
+       "october-date": "$1 Diphalane",
+       "november-date": "$1 Dibatsela",
+       "december-date": "$1 Mathole",
        "pagecategories": "{{PLURAL:$1|Sehlopha|Dihlopha}}",
        "category_header": "Matlakala go sehlopha \"$1\"",
        "subcategories": "Dihlophana",
        "moredotdotdot": "Tše dingwe...",
        "mypage": "Letlakala",
        "mytalk": "Bolela",
-       "anontalk": "Poledišano ya IP ye",
+       "anontalk": "Poledišano",
        "navigation": "Tšwelotšo",
        "and": "&#32;le",
        "qbfind": "Humana",
+       "qbbrowse": "Leba",
        "qbedit": "Fetola",
        "qbpageoptions": "Letlakala le",
        "qbmyoptions": "Matlakala a ka",
        "updatedmarker": "fetotšwe esale ketelo yaka ya mafelelo",
        "printableversion": "''Version'' ya go gatišega",
        "permalink": "Hlomaganyo yao e tiišeditšwego",
+       "view": "Leba",
+       "view-foreign": "Leba go $1",
        "edit": "Fetola",
        "create": "Tlhoma",
        "editthispage": "Fetola letlakala  le",
        "disclaimers": "Hlapa-matsogo",
        "disclaimerpage": "Project:Hlapa-Matsogo",
        "edithelp": "Thušo ya go fetola",
+       "helppage-top-gethelp": "Thušo",
        "mainpage": "Letlakala la Pele",
        "mainpage-description": "Letlakala la Pele",
        "policy-url": "Project:Melao",
-       "portal": "''Portal'' ya badudi",
-       "portal-url": "Project:Portal ya Badudi",
+       "portal": "Sebaka sa badudi",
+       "portal-url": "Project:Sebaka sa Badudi",
        "privacy": "Melao ya praebesi",
        "privacypage": "Project:Polisi ya praefesi",
        "badaccess": "Thušo ya tumello",
        "toc": "Mateng",
        "showtoc": "bontšha",
        "hidetoc": "fihla",
+       "confirmable-yes": "Ee",
+       "confirmable-no": "Aowa",
        "thisisdeleted": "Nyakorela goba hlaphola $1?",
        "viewdeleted": "Nyakorela $1?",
        "restorelink": "{{PLURAL:$1|e tee phetogo ye phumutšwego|phetogo tše $1 tše phumutšwego}}",
        "protectedpagetext": "Letlakala le le notletšwe go thibela diphetogo.",
        "viewsourcetext": "O ka lebelela goba wa kôpiša mothapo wa letlakala le:",
        "namespaceprotected": "Ga ona tokelo ya go fetola matlakala  go  '''$1''' .",
+       "exception-nologin": "Ga wa tsena",
        "yourname": "Leina la mošomiši:",
        "yourpassword": "Ditlhaka-tša-siphiri:",
        "yourpasswordagain": "Tlanya ditlhaka-tša-siphiri gape:",
-       "remembermypassword": "Gopola sedi yaka ya go tsena khomphutha ye (bogolo bja  $1 ya {{PLURAL:$1| letšatši le|matšatši a}})",
        "login": "Tsena",
        "nav-login-createaccount": "Tsena / Tlhola tšhupaleloko (''account'')",
        "userlogin": "Tsena / tlhola tšhupaleloko (''account'')",
+       "userloginnocreate": "Tsena",
        "logout": "Etšwa/Tswalela",
        "userlogout": "Etšwa/Tswalela",
        "notloggedin": "Ga wa tsena",
        "createaccountreason": "Lebaka:",
        "badretype": "Ditlhaka-tša-siphiri tše o di šomišitšego ga di swane.",
        "noname": "Gawa fana ka leina la mošomiši la go loka.",
-       "loginsuccesstitle": "O tsene ka katlego",
+       "loginsuccesstitle": "O tsene",
        "loginsuccess": "'''Bjale o tsene go {{SITENAME}} bjalo ka \"$1\".'''",
-       "nosuchuser": "Ga gona mošomiši wa leina la \"$1\".\nMaina a huduetša ke ditlhaka.\nLebele mopeleto wa gago goba [[Special:CreateAccount|o tlhome mošomiši yo mophsa]].",
+       "nosuchuser": "Ga gona mošomiši wa leina la \"$1\".\nMaina a huduetša ke seemo sa ditlhaka (case sensitive).\nLebele mopeleto wa gago goba [[Special:CreateAccount|o tlhome mošomiši yo mophsa]].",
        "nosuchusershort": "Ga gona mošomiši wa leina la \"$1\". Hlokomela mopeleto wa gago.",
        "nouserspecified": "O swanela ke go fana ka leina la mošomiši.",
        "wrongpassword": "O loketše ditlhaka-tša-siphiri tšeo e sego tšona. Ka kgopelo, leka gape.",
        "passwordremindertext": "Motho yo mongwe (goba wena, gotšwa IP atrese $1) o\nkgopetše gore re moromele Ditlhaka-tša-siphiri tše mfsa tša {{SITENAME}} ($4).\n\nDitlhaka-tša-siphiri tša  mošomiši \"$2\" go tloga bjale ke  \"$3\".\n\nDitlhaka-tša-siphiri di tla šoma {{PLURAL:$5|letšatši|matšatši a $5}}.\n\nGa eba motho yo mongwe esego wena o dirile kgopelo ye, goba o gopola Ditlhaka-tša-siphiri gomme ga o sa\nhloka gore e fetolwe, hlokomologa molaetša wo, o tšwele pele o šumiše Ditlhaka-tša-siphiri tša kgale.",
        "noemail": "Ga gona e-mail atrese ya mošomiši \"$1\".",
        "passwordsent": "\nDihlaka tša siphiri (''password'') tše mphsa di rometšwe go e-mail atrese ya \"$1\".\nRe kgopela gore o tsene ge fetša go e hwetša.",
-       "blocked-mailpassword": "IP atrese ya gago e thibetšwe go dira diphetogo, ka fao ga wa dumellwa\ngo šomiša thulusu ya go hwetša Ditlhaka-tša-siphiri go thibela go hlapanya.",
+       "blocked-mailpassword": "IP atrese ya gago e thibetšwe go dira diphetogo.\nGo thibela go hlapanya, ga wa dumellwa\ngo šomiša thulusu ya go hwetša Ditlhaka-tša-siphiri ka aterese ye.",
        "eauthentsent": "Molaetša wa go tiišetša o  rometšwe go e-mail atrese.\n\nPele re romela melaetša ye mengwe go atrese ye, o kgopelwa go latela ditaelo tšeo dilego molaetšeng go tiišetša gore atrese ke ya gago.",
        "throttled-mailpassword": "Kgopelo ya go fetola ditlhaka-tša-siphiri e rometšwe {{PLURAL:$1|iring|diiring tše $1}} tša gofeta.\nGo thibela go hlapanya/kgobošo, kgopotšo e tee ka {{PLURAL:$1|iri|diiri tše $1}} e tla romellwa.",
        "mailerror": "Gobile le phošo go romeleng molaetša  : $1",
-       "acct_creation_throttle_hit": "Ka maswabi, IP Aterese ya gago e tlhomile {{PLURAL:$1|tšhupaleloko|$1 tša ditšhupaleloko}} e se kgale.\nGa wa dumelwa go tlhoma tše dingwe ka se sebaka.",
+       "acct_creation_throttle_hit": "Ka maswabi, IP Aterese ya gago e tlhomile {{PLURAL:$1|tšhupaleloko|$1 tša ditšhupaleloko}} sebakeng sa $2.\nGa wa dumelwa go tlhoma tše dingwe ka se sebaka.",
        "emailauthenticated": "E-mail atrese ya gago e kgonthišitšwe ka $2  $3.",
        "accountcreated": "Tšhupaleloko (Account) e tlhodilwe",
        "accountcreatedtext": "Tšhupaleloko (account) ya modiri [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) e tlhodilwe.",
        "loginlanguagelabel": "Polelo: $1",
+       "pt-login": "Tsena",
+       "pt-login-button": "Tsena",
+       "pt-createaccount": "Bula tšhupaleloko",
+       "pt-userlogout": "Etšwa/Tswalela",
        "changepassword": "Fetola ditlhaka-tša-siphiri",
        "resetpass_text": "<!-- Tsenya ditlhaka mo -->",
        "oldpassword": "Ditlhaka-tša-siphiri tša kgale:",
        "newpassword": "Ditlhaka-tša-siphiri tše mpsha:",
        "retypenew": "Tlanya ditlhaka tše mphsa tša siphiri gape:",
-       "changepassword-success": "Ditlhaka tša siphiri di fetotšwe ka katlego!",
+       "resetpass_submit": "Lokela ditlhaka-tša-siphiri o tsene",
+       "changepassword-success": "Ditlhaka tša siphiri di fetotšwe!",
        "bold_sample": "Mongwalo wa '''Bold'''",
        "bold_tip": "Ditlhaka tše Bold",
        "italic_sample": "Ditlhaka tše Italic",
        "accmailtext": "Ditlhaka-tša-siphiri tša  [[User talk:$1|$1]]  di rometšwe go $2. Di ka fetolwa go letlaka la <em>[[Special:ChangePassword|go fetola ditlhaka-tša-siphiri ]]</em> ge o tsena.",
        "newarticle": "(mpsha)",
        "newarticletext": "O latetše hlomaganyo go letlakala leo le sego gona ka se sebaka.\nGo tlhola letlakala, thoma go ngwalo lepokising le letelago\n(lebelela [$1 letlakala la thušo] go hwetša šedi).\nGa eba o le fa ka phošo, o ka boela morago ka go šumiša konopo ya '''back''' go ''browser'' ya gago.",
-       "noarticletext": "Ga gona ditlhaka letlakaleng le, oka [[Special:Search/{{PAGENAME}}|fetleka leina la letlakala]] matlakaleng a mangwe, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} fetleka \"logs\"], goba [{{fullurl:{{FULLPAGENAME}}|action=edit}} wa fetola letlakala le]</span>.",
-       "noarticletext-nopermission": "Ga gona ditlhaka letlakaleng le, \noka [[Special:Search/{{PAGENAME}}|fetleka leina la letlakala]] matlakaleng a mangwe,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} fetleka \"logs\"],\n goba [{{fullurl:{{FULLPAGENAME}}|action=edit}} wa fetola letlakala le]</span>.",
+       "noarticletext": "Ga gona ditlhaka letlakaleng le.\nO ka [[Special:Search/{{PAGENAME}}|fetleka leina la letlakala]] matlakaleng a mangwe, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} fetleka \"logs\"], goba [{{fullurl:{{FULLPAGENAME}}|action=edit}} wa fetola letlakala le]</span>.",
+       "noarticletext-nopermission": "Ga gona ditlhaka letlakaleng le.\nO ka [[Special:Search/{{PAGENAME}}|fetleka leina la letlakala]] matlakaleng a mangwe,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} fetleka \"logs\"],\n goba [{{fullurl:{{FULLPAGENAME}}|action=edit}} wa fetola letlakala le]</span>.",
        "note": "'''Ela hloko:'''",
        "previewnote": "'''Elelwa gore ye ke taetšo ya sebopego sa letlakala fela.'''\nDiphetogo tša gago ga šetšo di bolokwa!",
        "editing": "O fetola $1",
        "yourlanguage": "Polelo:",
        "yournick": "Tshaeno:",
        "badsiglength": "Leina la boreelo le letelele kudu.\nLe swanela goba fase ga $1 {{PLURAL:$1|ya tlhaka|tša ditlhaka}}",
-       "prefs-help-realname": "Leina la nnete gale gapeletšwe, efela ge o kgetha go fana ka lona, le tla šomišwa go bontšha diabe mešomong ya gago.",
+       "prefs-help-realname": "Leina la nnete gale gapeletšwe.\nGe o kgetha go fana ka lona, le tla šomišwa go bontšha diabe mešomong ya gago.",
        "prefs-help-email": "Aterese ya E-poso gae hlokagale, efela e ka hlokagala ge dihlaka tša sephiri di fetolwa, ge o ka lebala dihlaka tša gago tša sephiri",
        "prefs-help-email-others": "O ka kgetha gore batho ba bangwe ba bolele le wena ka  e-poso ga kgokaganyo letlakala la gago goba letlakala la dipoledišano.\nGa re fane ka e-poso ya gago go bašumiši ba bangwe ge ba polela le wena ka yona.",
        "prefs-help-email-required": "E-mail atrese eya nyakega.",
        "rightslog": "''log'' ya ditumello tša mošomiši",
        "action-edit": "Fetola letlakala  le",
        "nchanges": "$1 {{PLURAL:$1|phetogo|diphetogo}}",
+       "enhancedrc-history": "histori",
        "recentchanges": "Diphetogo tša bjale",
        "recentchanges-legend": "Dikgetho tša diphetogo tša bjale",
        "recentchanges-summary": "Lebalana diphetogo tše di mphsa-mphsa go wiki  letlakaleng le.",
        "rcnotefrom": "Tlase ke diphetogo go tloga ka <strong>$3, $4</strong> (go  fihla ka <strong>$1</strong>).",
        "rclistfrom": "Laêtša dipheto tše mfsa go thoma go $3 $2",
        "rcshowhideminor": "$1 ya diphetogo tše nnyenyane",
+       "rcshowhideminor-hide": "Fihla",
        "rcshowhidebots": "$1 bots",
+       "rcshowhidebots-show": "Bontšha",
        "rcshowhideliu": "$1 bašumiši bao batsebjawago",
+       "rcshowhideliu-hide": "Fihla",
        "rcshowhideanons": "$1 bašumiši bago se tsebege",
+       "rcshowhideanons-hide": "Fihla",
        "rcshowhidepatr": "$1 diphetogo tše ''patrolled''",
        "rcshowhidemine": "$1 diphetogo tsa ka",
+       "rcshowhidemine-hide": "Fihla",
        "rclinks": "Bontšha diphetogo tša bofelo tše $1 matšatšing a  $2  a bofelo <br />$3",
        "diff": "phapang",
        "hist": "histori",
        "blanknamespace": "(Hlogo)",
        "contributions": "Diabe tša mošomiši",
        "contributions-title": "Diabe tša mošumiši go $1",
-       "mycontris": "Diabe tša ka",
+       "mycontris": "Diabe",
        "contribsub2": "Ya $1 ($2)",
-       "uctop": "(godimo)",
+       "uctop": "(bjale)",
        "month": "Go tloga kgweding (le peleng):",
        "year": "Go tloga ngwageng (le peleng):",
        "sp-contributions-newbies": "Laetša diabe tša bašumiši ba bafsa fela",
        "tooltip-pt-login": "O a kgothatšwa gore o tsene, e efela ga se kgapeletšo.",
        "tooltip-pt-logout": "Etšwa fa/Tswalela/Log out",
        "tooltip-ca-talk": "Poledišano mabapi le letlakala le",
-       "tooltip-ca-edit": "O ka fetola letlakala le. Kgopelo ke gore o šumiše konopo ya go Laetša sebopego sa letlakala pele o le boloka.",
+       "tooltip-ca-edit": "Fetola letlakala  le",
        "tooltip-ca-addsection": "Lokela sekgao se seswa",
        "tooltip-ca-viewsource": "Letlakala le le lotilew. O ka lebelela mothopo fela.",
        "tooltip-ca-history": "Lebelela thumeletšo ya go feta ya letlakala le",
        "lastmodifiedatby": "Letlakala le  fetotšwe la mafelelo ka $2, $1 ke $3.",
        "others": "tše dingwe",
        "siteusers": "{{SITENAME}} {{PLURAL:$2|mošumiši|bašumiši}} $1",
+       "pageinfo-toolboxlink": "Tsebo ya Letlakala",
        "filedeleteerror-short": "Phošo go phumuleng faele: $1",
        "filedeleteerror-long": "Diphošo di hlagile ge go phumulwa faele:\n\n$1",
        "filedelete-missing": "Faele \"$1\" ga e phumulege ka ge e segona.",
        "specialpages": "Matlakala a kgethegilego",
        "external_image_whitelist": " #Tlogela letlakale ka mokgwa wo<pre>\n#Tsenya  \"regular expression fragments\" (parata ya magareng ga //) below\n#These will be matched with the URLs of external (hotlinked) images\n#Those that match will be displayed as images, otherwise only a link to the image will be shown\n#Lines beginning with # are treated as comments\n#This is case-insensitive\n\n#Put all regex fragments above this line. Leave this line exactly as it is</pre>",
        "tag-filter": "[[Special:Tags|Tag]] \"filter\":",
+       "searchsuggest-search": "Fetleka  {{SITENAME}}",
        "expand_templates_output": "Phetho"
 }
index 41ddef5..705cc5c 100644 (file)
        "category-file-count-limited": "W tej kategorii {{PLURAL:$1|jest 1 plik|są $1 pliki|jest $1 plików}}.",
        "listingcontinuesabbrev": "cd.",
        "index-category": "Strony indeksowane",
-       "noindex-category": "Strony niezindeksowane",
+       "noindex-category": "Strony nieindeksowane",
        "broken-file-category": "Strony z odwołaniami do nieistniejących plików",
        "about": "O {{GRAMMAR:MS.lp|{{SITENAME}}}}",
        "article": "artykuł",
        "mergehistory-fail-bad-timestamp": "Znacznik czasu jest nieprawidłowy.",
        "mergehistory-fail-invalid-source": "Strona źródłowa jest nieprawidłowa.",
        "mergehistory-fail-invalid-dest": "Strona docelowa jest nieprawidłowa.",
+       "mergehistory-fail-no-change": "Łączenie historii nie połączyło żadnych wersji. Proszę ponownie sprawdzić stronę i parametry czasowe.",
        "mergehistory-fail-permission": "Brak uprawnień, aby połączyć historię.",
        "mergehistory-fail-self-merge": "Strona źródłowa i docelowa są takie same.",
        "mergehistory-fail-toobig": "Nie można połączyć historii, gdyż wymagałoby to przeniesienia więcej niż maksymalnej dopuszczalnej liczby $1 {{PLURAL:$1|wersji}}.",
        "file-thumbnail-no": "Nazwa pliku zaczyna się od <strong>$1</strong>.\nWydaje się, że jest to pomniejszona grafika ''(miniaturka)''.\nJeśli posiadasz tę grafikę w pełnym rozmiarze – prześlij ją. Jeśli chcesz wysłać tę – zmień nazwę przesyłanego obecnie pliku.",
        "fileexists-forbidden": "Plik o tej nazwie już istnieje i nie może zostać nadpisany.\nJeśli chcesz przesłać plik cofnij się i prześlij go pod inną nazwą. [[File:$1|thumb|center|$1]]",
        "fileexists-shared-forbidden": "Plik o tej nazwie już istnieje we współdzielonym repozytorium plików.\nCofnij się i załaduj plik pod inną nazwą. [[File:$1|thumb|center|$1]]",
+       "fileexists-no-change": "Przesyłany plik jest identyczny z aktualną wersją <strong>[[:$1]]</strong>.",
        "fileexists-duplicate-version": "{{PLURAL:$2|Przesłany plik jest dokładną kopią starszej wersji pliku|Przesłane pliki są dokładnymi kopiami starszych wersji plików}} <strong>[[:$1]]</strong>.",
        "file-exists-duplicate": "Ten plik jest kopią {{PLURAL:$1|pliku|następujących plików}}:",
        "file-deleted-duplicate": "Identyczny do tego plik ([[:$1]]) został wcześniej usunięty.\nSprawdź historię usunięć tamtego pliku zanim prześlesz go ponownie.",
        "pageinfo-category-pages": "Liczba stron",
        "pageinfo-category-subcats": "Liczba podkategorii",
        "pageinfo-category-files": "Liczba plików",
+       "pageinfo-user-id": "ID użytkownika",
        "markaspatrolleddiff": "oznacz edycję jako „sprawdzoną”",
        "markaspatrolledtext": "Oznacz tę stronę jako „sprawdzoną”",
        "markaspatrolledtext-file": "Oznacz tę wersję pliku jako „sprawdzoną”",
        "htmlform-date-placeholder": "RRRR-MM-DD",
        "htmlform-time-placeholder": "GG:MM:SS",
        "htmlform-datetime-placeholder": "RRRR-MM-DD GG:MM:SS",
+       "htmlform-date-invalid": "Podana przez Ciebie wartość nie jest rozpoznawana jako data. Spróbuj użyć formatu RRRR-MM-DD.",
+       "htmlform-time-invalid": "Podana przez Ciebie wartość nie jest rozpoznawana jako czas. Spróbuj użyć formatu GG:MM:SS.",
+       "htmlform-datetime-invalid": "Podana przez Ciebie wartość nie jest rozpoznawana jako data i czas. Spróbuj użyć formatu RRRR-MM-DD GG:MM:SS.",
+       "htmlform-date-toolow": "Podana przez Ciebie wartość jest wcześniejsza niż dozwolona data $1.",
+       "htmlform-date-toohigh": "Podana przez Ciebie wartość jest późniejsza niż dozwolona data $1.",
+       "htmlform-time-toolow": "Podana przez Ciebie wartość jest wcześniejsza niż dozwolony czas $1.",
+       "htmlform-time-toohigh": "Podana przez Ciebie wartość jest późniejsza niż dozwolony czas $1.",
+       "htmlform-datetime-toolow": "Podana przez Ciebie wartość jest wcześniejsza niż dozwolona data i czas $1.",
+       "htmlform-datetime-toohigh": "Podana przez Ciebie wartość jest późniejsza niż dozwolona data i czas $1.",
        "htmlform-title-badnamespace": "[[:$1]] nie znajduje się w przestrzeni nazw „{{ns:$2}}”.",
        "htmlform-title-not-creatable": "Nie można użyć „$1” do utworzenia tytułu strony",
        "htmlform-title-not-exists": "$1 nie istnieje.",
        "unlinkaccounts": "Odłącz konta",
        "unlinkaccounts-success": "Konta zostały odłączone.",
        "userjsispublic": "Uwaga: Podstrony z kodem JavaScript są widoczne publicznie i nie powinny zawierać poufnych danych.",
+       "usercssispublic": "Uwaga: Podstrony z kodem CSS są widoczne publicznie i nie powinny zawierać poufnych danych.",
        "restrictionsfield-badip": "Nieprawidłowy adres IP lub zakres adresów: $1",
        "restrictionsfield-label": "Dozwolone zakresy adresów IP:",
-       "restrictionsfield-help": "Jeden adres IP lub zakres CIDR w wierszu. Aby zaznaczyć wszystkie, użyj<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Jeden adres IP lub zakres CIDR w wierszu. Aby zaznaczyć wszystkie, użyj<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Błąd: $1",
+       "edit-error-long": "Błędy:\n\n$1"
 }
index 55f2cd0..fbd2f57 100644 (file)
        "nstab-category": "Categoria",
        "mainpage-nstab": "Página principal",
        "nosuchaction": "Operação não existe",
-       "nosuchactiontext": "A operação especificada pela URL é inválida.\nÉ possível que tenha escrito mal a URL ou seguido uma ligação incorreta.\nIsto pode também indicar um defeito no software da {{SITENAME}}.",
+       "nosuchactiontext": "A operação especificada pelo URL é inválida.\nÉ possível que tenha escrito mal o URL ou seguido uma ligação incorreta.\nIsto pode também indicar um defeito no software da {{SITENAME}}.",
        "nosuchspecialpage": "Esta página especial não existe",
        "nospecialpagetext": "<strong>Solicitou uma página especial inválida.</strong>\n\nEncontra uma lista das páginas especiais válidas em [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Erro",
        "databaseerror-query": "Consulta: $1",
        "databaseerror-function": "Função: $1",
        "databaseerror-error": "Erro: $1",
-       "transaction-duration-limit-exceeded": "Para evitar a criação de lag replicação alta, esta operação foi abortada porque a duração de gravação ($1) excedeu o limite de $2 {{PLURAL:$2|segundo|segundos}}. Se está a mudar muitos itens de uma vez, tente fazer várias operações menores em vez disso.",
+       "transaction-duration-limit-exceeded": "Para evitar grandes atrasos na replicação, esta operação foi cancelada porque a duração de gravação ($1) excedeu o limite de $2 {{PLURAL:$2|segundo|segundos}}. Se está a mudar muitos objetos de uma só vez, tente desmultiplicar a operação em várias de menor dimensão.",
        "laggedslavemode": "'''Aviso:''' A página pode não conter as atualizações mais recentes.",
        "readonly": "Base de dados bloqueada (limitada a leituras)",
        "enterlockreason": "Introduza um motivo para bloquear, incluindo uma estimativa de quando será desbloqueada",
        "readonlytext": "A base de dados está atualmente bloqueada para novas entradas e outras modificações, provavelmente para uma manutenção de rotina, após a qual voltará à sua normalidade.\n\nO administrador que a bloqueou deu a seguinte explicação: $1",
-       "missing-article": "A base de dados não encontrou o texto de uma página que deveria ter encontrado, com o nome \"$1\" $2.\n\nGeralmente, esta situação ocorre ao clicar numa ligação para diferenças desatualizada ou para o histórico de uma página que tenha sido removida.\n\nSe nenhuma destas situações se verifica, pode ter encontrado um defeito no programa.\nAnote a URL e reporte este incidente a um [[Special:ListUsers/sysop|administrador]], por favor.",
+       "missing-article": "A base de dados não encontrou o texto de uma página que deveria ter encontrado, com o nome \"$1\" $2.\n\nGeralmente, esta situação ocorre ao clicar numa ligação para diferenças desatualizada ou para o histórico de uma página que tenha sido removida.\n\nSe nenhuma destas situações se verifica, pode ter encontrado um defeito no programa.\nAnote o URL e reporte este incidente a um [[Special:ListUsers/sysop|administrador]], por favor.",
        "missingarticle-rev": "(revisão#: $1)",
        "missingarticle-diff": "(Dif.: $1, $2)",
        "readonly_lag": "A base de dados foi automaticamente bloqueada enquanto os servidores secundários se sincronizam com o primário",
        "logdelete-selected": "{{PLURAL:$1|Evento do registo selecionado|Eventos do registo selecionados}}:",
        "revdelete-text-text": "Revisões eliminadas ainda aparecerão no histórico da página, mas parte do seu conteúdo estará inacessível para o público.",
        "revdelete-text-file": "Versões eliminadas do ficheiro ainda aparecerão no histórico da página, mas parte do seu conteúdo estará inacessível para o público.",
-       "logdelete-text": "Os eventos eliminados ainda aparecerão no histórico da página, mas pare de seu conteúdo será inacessível ao público.",
+       "logdelete-text": "Os eventos eliminados ainda aparecerão no histórico da página, mas parte do seu conteúdo será inacessível ao público.",
        "revdelete-text-others": "Outros administradores serão ainda capazes de aceder ao conteúdo oculto e torná-lo visível novamente, a menos que sejam definidas restrições adicionais.",
        "revdelete-confirm": "Por favor, confirme que pretende executar esta operação, que compreende as suas consequências e que o faz em concordância com as [[{{MediaWiki:Policy-url}}|políticas e recomendações]].",
        "revdelete-suppress-text": "A supressão '''só''' deverá ser usada nos seguintes casos:\n* Informação potencialmente caluniosa, difamatória ou injuriosa\n* Informação pessoal imprópria\n*: ''endereços de domicílio e números de telefone, números de identificação nacional, etc''",
        "revdelete-legend": "Definir restrições de visibilidade",
-       "revdelete-hide-text": "Revisão do texto",
+       "revdelete-hide-text": "Texto da revisão",
        "revdelete-hide-image": "Ocultar conteúdo do ficheiro",
        "revdelete-hide-name": "Ocultar destino e parâmetros",
        "revdelete-hide-comment": "Resumo da edição",
-       "revdelete-hide-user": "Nome de utilizador/endereço de IP",
+       "revdelete-hide-user": "Nome de utilizador/endereço IP",
        "revdelete-hide-restricted": "Ocultar dados dos administradores e de todos os outros",
        "revdelete-radio-same": "(manter)",
        "revdelete-radio-set": "Oculto",
        "right-purge": "Limpar a ''cache'' de uma página no servidor sem confirmação",
        "right-autoconfirmed": "Não ser afetado pelos limites de frequência baseados no número de IP",
        "right-bot": "Ser tratado como um processo automatizado",
-       "right-nominornewtalk": "Não despoletar o aviso de mensagens novas ao fazer edições menores a páginas de discussão",
+       "right-nominornewtalk": "Não desencadear o aviso de mensagens novas ao fazer edições menores a páginas de discussão",
        "right-apihighlimits": "Usar limites superiores nas consultas ''(queries)'' via API",
        "right-writeapi": "Usar a API de escrita",
        "right-delete": "Eliminar páginas",
        "right-edituserjs": "Editar os ficheiros JS de outros utilizadores",
        "right-editmyusercss": "Editar os seus próprios ficheiros CSS de utilizador",
        "right-editmyuserjs": "Editar os seus próprios ficheiros JavaScript de utilizador",
-       "right-viewmywatchlist": "Ver a sua lista de vigiados",
+       "right-viewmywatchlist": "Ver a sua lista de páginas vigiadas",
        "right-editmywatchlist": "Editar a sua própria lista de páginas vigiadas. Observe que algumas ações continuaram a adicionar páginas, mesmo sem este direito.",
        "right-viewmyprivateinfo": "Ver os seus próprios dados privados (ex.: endereço de correio eletrónico, nome real)",
        "right-editmyprivateinfo": "Editar os seus próprios dados privados (ex.: endereço de correio eletrónico, nome real)",
        "grant-generic": "Conjunto de direitos \"$1\"",
        "grant-group-page-interaction": "Interagir com páginas",
        "grant-group-file-interaction": "Interagir com conteúdo multimédia",
-       "grant-group-watchlist-interaction": "Interagir com a sua lista de vigiados",
+       "grant-group-watchlist-interaction": "Interagir com a sua lista de páginas vigiadas",
        "grant-group-email": "Enviar correio electrónico",
        "grant-group-high-volume": "Realizar atividades em grande quantidade",
        "grant-group-customization": "Personalização e preferências",
        "grant-editinterface": "Editar o domínio MediaWiki e o CSS/JavaScript do utilizador",
        "grant-editmycssjs": "Editar o seu CSS/JavaScript personalizado",
        "grant-editmyoptions": "Editar as suas preferências de utilizador",
-       "grant-editmywatchlist": "Editar a sua lista de vigiados",
+       "grant-editmywatchlist": "Editar a sua lista de páginas vigiadas",
        "grant-editpage": "Editar páginas existentes",
        "grant-editprotected": "Editar páginas protegidas",
        "grant-highvolume": "Alta quantidade de edições",
        "grant-uploadfile": "Carregar novos ficheiros",
        "grant-basic": "Direitos básicos",
        "grant-viewdeleted": "Ver páginas e ficheiros eliminados",
-       "grant-viewmywatchlist": "Ver a sua lista de vigiados",
+       "grant-viewmywatchlist": "Ver a sua lista de páginas vigiadas",
+       "grant-viewrestrictedlogs": "Ver entradas de registo restritas",
        "newuserlogpage": "Registo de criação de utilizadores",
        "newuserlogpagetext": "Este é um registo de novas contas de utilizador",
        "rightslog": "Registo de privilégios de utilizadores",
        "action-upload": "enviar este ficheiro",
        "action-reupload": "sobrescrever este ficheiro existente",
        "action-reupload-shared": "sobrepor este ficheiro num repositório partilhado",
-       "action-upload_by_url": "enviar este ficheiro através de uma URL",
+       "action-upload_by_url": "enviar este ficheiro através de um URL",
        "action-writeapi": "utilizar o modo de escrita da API",
        "action-delete": "eliminar esta página",
        "action-deleterevision": "eliminar esta edição",
        "upload_directory_read_only": "O servidor de Internet não possui permissão de escrita no diretório de carregamento de ficheiros ($1).",
        "uploaderror": "Erro ao carregar",
        "upload-recreate-warning": "'''Aviso: Um ficheiro com esse nome foi eliminado ou movido.'''\n\nPara sua conveniência, é apresentado de seguida o registo de eliminação e de movimento da página:",
-       "uploadtext": "Utilize o formulário abaixo para fazer o carregamento de novos ficheiros.\nPara ver ou pesquisar ficheiros anteriormente enviados, consulte a [[Special:FileList|lista de ficheiros]].\nOs reenvios de um ficheiro são também registados no [[Special:Log/upload|registo de carregamentos]] e as eliminações no [[Special:Log/delete|registo de eliminações]].\n\nPara utilizar um ficheiro numa página, depois de ter feito o carregamento, insira uma ligação com um dos seguintes formatos:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.jpg]]</nowiki></code>''' para mostrar uma imagem nas suas dimensões originais;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.png|200px|thumb|left|texto]]</nowiki></code>''' para mostrar uma imagem com a dimensão horizontal de 200 pixeis, dentro de uma caixa, na margem esquerda, contendo 'texto' como descrição (pode usar subconjuntos destas características);\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:ficheiro.ogg]]</nowiki></code>''' para apresentar uma ligação direta para o ficheiro em vez de mostrá-lo, quer este tenha por conteúdo uma imagem ou outros dados.",
+       "uploadtext": "Utilize o formulário abaixo para fazer o carregamento de novos ficheiros.\nPara ver ou pesquisar ficheiros anteriormente enviados, consulte a [[Special:FileList|lista de ficheiros]].\nOs reenvios de um ficheiro são também registados no [[Special:Log/upload|registo de carregamentos]] e as eliminações no [[Special:Log/delete|registo de eliminações]].\n\nPara utilizar um ficheiro numa página, depois de ter feito o carregamento, insira uma ligação com um dos seguintes formatos:\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.jpg]]</nowiki></code>''' para mostrar uma imagem nas suas dimensões originais;\n* '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:ficheiro.png|200px|thumb|left|texto]]</nowiki></code>''' para mostrar uma imagem com a dimensão horizontal de 200 píxeis, dentro de uma caixa, na margem esquerda, contendo 'texto' como descrição (pode usar subconjuntos destas características);\n* '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:ficheiro.ogg]]</nowiki></code>''' para apresentar uma ligação direta para o ficheiro em vez de mostrá-lo, quer este tenha por conteúdo uma imagem ou outros dados.",
        "upload-permitted": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|permitido|permitidos}}: $1.",
        "upload-preferred": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|preferido|preferidos}}: $1.",
        "upload-prohibited": "{{PLURAL:$2|Tipo|Tipos}} de ficheiro {{PLURAL:$2|proibido|proibidos}}: $1.",
        "uploaded-setting-href-svg": "O uso da tag \"set\" para adicionar o atributo \"href\" ao elemento mãe está bloqueado.",
        "uploaded-wrong-setting-svg": "O uso da tag \"set\" para adicionar um destino remoto/de dados/<i>script</i> a qualquer atributo está bloqueado. No ficheiro SVG enviado foi encontrado <code>&lt;set to=\"$1\"&gt;</code>.",
        "uploaded-setting-handler-svg": "A configuração do atributo \"handler\" com destino remoto/de dados/<i>script</i> em ficheiros SVG está bloqueada. Foi detetado <code>$1=\"$2\"</code> no ficheiro SVG carregado.",
-       "uploaded-remote-url-svg": "A configuração de qualquer atributo de estilo com uma URL remota em ficheiros SVG está bloqueada. Foi detetado <code>$1=\"$2\"</code> no ficheiro SVG carregado.",
-       "uploaded-image-filter-svg": "Foi encontrado um filtro de imagem com a URL: <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG carregado.",
+       "uploaded-remote-url-svg": "A configuração de qualquer atributo de estilo com um URL remoto em ficheiros SVG está bloqueada. Foi detetado <code>$1=\"$2\"</code> no ficheiro SVG carregado.",
+       "uploaded-image-filter-svg": "Foi encontrado um filtro de imagem com o URL: <code>&lt;$1 $2=\"$3\"&gt;</code> no ficheiro SVG carregado.",
        "uploadscriptednamespace": "Este ficheiro SVG contém um domínio que não é permitido \"$1\".",
        "uploadinvalidxml": "Erro detectado na análise do XML do ficheiro carregado.",
        "uploadvirus": "O ficheiro contém um vírus! \nDetalhes: $1",
        "upload-file-error-text": "Ocorreu um erro interno ao tentar criar um ficheiro temporário no servidor.\nContacte um [[Special:ListUsers/sysop|administrador]], por favor.",
        "upload-misc-error": "Erro de carregamento desconhecido",
        "upload-misc-error-text": "Ocorreu um erro desconhecido durante o envio.\nVerifique se o endereço (URL) é válido e acessível e tente novamente.\nCaso o problema persista, contacte um [[Special:ListUsers/sysop|administrador]].",
-       "upload-too-many-redirects": "A URL continha demasiados redirecionamentos",
+       "upload-too-many-redirects": "O URL continha demasiados redirecionamentos",
        "upload-http-error": "Ocorreu um erro HTTP: $1",
        "upload-copy-upload-invalid-domain": "Não é possível realizar carregamentos remotos neste domínio.",
        "upload-foreign-cant-upload": "Esta wiki não está configurada para carregar ficheiros para o repositório externo solicitado.",
        "img-auth-streaming": "A fazer a transmissão de \"$1\".",
        "img-auth-public": "A função do img_auth.php é produzir ficheiros a partir de uma wiki privada.\nEsta wiki está configurada como uma wiki pública.\nPara optimizar a segurança, o img_auth.php está impossibilitado de executar.",
        "img-auth-noread": "O utilizador não tem acesso de leitura ao ficheiro \"$1\".",
-       "http-invalid-url": "URL inválida: $1",
-       "http-invalid-scheme": "URL iniciadas pelo prefixo \"$1\" não são aceites.",
+       "http-invalid-url": "URL inválido: $1",
+       "http-invalid-scheme": "URL iniciados pelo prefixo \"$1\" não são aceites.",
        "http-request-error": "O pedido HTTP falhou devido a um erro desconhecido.",
        "http-read-error": "Erro de leitura HTTP.",
        "http-timed-out": "O pedido HTTP expirou.",
-       "http-curl-error": "Ocorreu um erro ao aceder à URL: $1",
+       "http-curl-error": "Ocorreu um erro ao aceder ao URL: $1",
        "http-bad-status": "Ocorreu um problema durante o pedido HTTP: $1 $2",
-       "upload-curl-error6": "Não foi possível aceder à URL",
-       "upload-curl-error6-text": "Não foi possível aceder à URL.\nVerifique se o endereço está correto e o sítio disponível, por favor.",
+       "upload-curl-error6": "Não foi possível aceder ao URL",
+       "upload-curl-error6-text": "Não foi possível aceder ao URL.\nVerifique se o endereço está correto e o sítio disponível, por favor.",
        "upload-curl-error28": "Tempo limite para o envio do ficheiro excedido",
        "upload-curl-error28-text": "O sítio demorou muito tempo a responder. Verifique que o sítio está disponível, aguarde alguns momentos e tente novamente, por favor. Talvez queira tentar num horário menos congestionado.",
        "license": "Licença:",
        "nolicense": "Nenhuma selecionada",
        "licenses-edit": "Editar opções de licença",
        "license-nopreview": "(Antevisão indisponível)",
-       "upload_source_url": "(um ficheiro de uma URL válida, publicamente acessível)",
+       "upload_source_url": "(um ficheiro de um URL válido, publicamente acessível)",
        "upload_source_file": "(um ficheiro no seu computador)",
        "listfiles-delete": "eliminar",
        "listfiles-summary": "Esta página especial mostra todos os ficheiros carregados.",
        "ancientpages": "Páginas mais antigas",
        "move": "Mover",
        "movethispage": "Mover esta página",
-       "unusedimagestext": "Os seguintes ficheiros existem mas não são usados na wiki.\nNo entanto, outros sítios na Internet podem ter ligação para um ficheiro através de uma URL direta e, por isso, podem estar listados ficheiros que estão a ser ativamente usados por entidades externas.",
+       "unusedimagestext": "Os seguintes ficheiros existem mas não são usados na wiki.\nNo entanto, outros sítios na Internet podem ter ligação para um ficheiro através de um URL direto e, por isso, podem estar listados ficheiros que estão a ser ativamente usados por entidades externas.",
        "unusedcategoriestext": "As seguintes categorias existem, embora nenhuma página ou categoria faça uso delas.",
        "notargettitle": "Sem alvo",
        "notargettext": "Especifique sobre que página alvo ou utilizador pretende executar esta função.",
        "movelogpagetext": "Abaixo encontra-se uma lista de páginas movidas.",
        "movesubpage": "{{PLURAL:$1|Subpágina|Subpáginas}}",
        "movesubpagetext": "Esta página tem $1 {{PLURAL:$1|subpágina mostrada|subpáginas mostradas}} abaixo.",
+       "movesubpagetalktext": "A página de discussão correspondente tem $1 {{PLURAL:$1|subpágina|subpáginas}}, mostradas abaixo.",
        "movenosubpage": "Esta página não tem subpáginas.",
        "movereason": "Motivo:",
        "revertmove": "reverter",
        "tooltip-ca-talk": "Discussão sobre o conteúdo da página",
        "tooltip-ca-edit": "Editar esta página",
        "tooltip-ca-addsection": "Iniciar uma nova secção",
-       "tooltip-ca-viewsource": "Esta página está protegida.\nApenas pode visualizar o seu conteúdo",
+       "tooltip-ca-viewsource": "Esta página está protegida.\nSó pode ver o conteúdo.",
        "tooltip-ca-history": "Edições anteriores desta página.",
        "tooltip-ca-protect": "Proteger esta página",
        "tooltip-ca-unprotect": "Alterar a proteção desta página",
        "tooltip-compareselectedversions": "Ver as diferenças entre as duas versões selecionadas desta página.",
        "tooltip-watch": "Adicionar esta página à lista de páginas vigiadas",
        "tooltip-watchlistedit-normal-submit": "Remover títulos",
-       "tooltip-watchlistedit-raw-submit": "Atualizar a lista de vigiados",
+       "tooltip-watchlistedit-raw-submit": "Atualizar a lista de páginas vigiadas",
        "tooltip-recreate": "Recriar a página apesar de ter sido eliminada",
        "tooltip-upload": "Iniciar o carregamento",
        "tooltip-rollback": "\"{{int:rollbacklink}}\" reverte, com um só clique, as edições do último editor desta página.",
        "pageinfo-category-pages": "Número de páginas",
        "pageinfo-category-subcats": "Número de subcategorias",
        "pageinfo-category-files": "Número de ficheiros",
+       "pageinfo-user-id": "Identificador do utilizador",
        "markaspatrolleddiff": "Marcar como patrulhada",
        "markaspatrolledtext": "Marcar esta página como patrulhada",
        "markaspatrolledtext-file": "Marcar esta versão do ficheiro como patrulhada",
        "thumbsize": "Tamanho da miniatura:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|página|páginas}}",
        "file-info": "tamanho: $1, tipo MIME: $2",
-       "file-info-size": "$1 × $2 pixels, tamanho: $3, tipo MIME: $4",
-       "file-info-size-pages": "$1 × $2 pixels, tamanho do ficheiro: $3, tipo MIME: $4, $5 {{PLURAL:$5|página|páginas}}",
+       "file-info-size": "$1 × $2 píxeis, tamanho: $3, tipo MIME: $4",
+       "file-info-size-pages": "$1 × $2 píxeis, tamanho do ficheiro: $3, tipo MIME: $4, $5 {{PLURAL:$5|página|páginas}}",
        "file-nohires": "Sem resolução maior disponível.",
-       "svg-long-desc": "ficheiro SVG, de $1 × $2 pixels, tamanho: $3",
-       "svg-long-desc-animated": "ficheiro SVG animado, de $1 × $2 pixels, tamanho: $3",
+       "svg-long-desc": "ficheiro SVG, de $1 × $2 píxeis, tamanho: $3",
+       "svg-long-desc-animated": "ficheiro SVG animado, de $1 × $2 píxeis, tamanho: $3",
        "svg-long-error": "Ficheiro SVG inválido: $1",
        "show-big-image": "Ficheiro original",
        "show-big-image-preview": "Tamanho desta antevisão: $1.",
        "show-big-image-preview-differ": "Tamanho desta antevisão em $3 do ficheiro $2: $1",
        "show-big-image-other": "{{PLURAL:$2|Outra resolução|Outras resoluções}}: $1.",
-       "show-big-image-size": "$1 × $2 pixels",
+       "show-big-image-size": "$1 × $2 píxeis",
        "file-info-gif-looped": "cíclico",
        "file-info-gif-frames": "$1 {{PLURAL:$1|quadro|quadros}}",
        "file-info-png-looped": "ciclo infinito",
        "exif-imagelength": "Altura",
        "exif-bitspersample": "Bits por componente",
        "exif-compression": "Esquema de compressão",
-       "exif-photometricinterpretation": "Composição pixel",
+       "exif-photometricinterpretation": "Composição do píxel",
        "exif-orientation": "Orientação",
        "exif-samplesperpixel": "Número de componentes",
        "exif-planarconfiguration": "Arranjo de dados",
        "monthsall": "todos",
        "confirmemail": "Confirmar endereço de correio eletrónico",
        "confirmemail_noemail": "Não tem um endereço de correio eletrónico válido nas suas [[Special:Preferences|preferências de utilizador]].",
-       "confirmemail_text": "{{SITENAME}} requer que valide o seu endereço de correio eletrónico antes de usar as funcionalidades de correio.\nClique o botão abaixo para enviar uma mensagem de confirmação para o seu endereço.\nA mensagem incluirá uma URL que contém um código;\ninsira a URL no seu navegador para confirmar que o seu endereço de correio eletrónico é válido.",
+       "confirmemail_text": "{{SITENAME}} requer que valide o seu endereço de correio eletrónico antes de usar as funcionalidades de correio.\nClique o botão abaixo para enviar uma mensagem de confirmação para o seu endereço.\nA mensagem incluirá um URL que contém um código;\ninsira o URL no seu navegador para confirmar que o seu endereço de correio eletrónico é válido.",
        "confirmemail_pending": "Um código de confirmação já lhe foi enviado;\ncaso tenha criado a conta recentemente, é recomendado que aguarde alguns minutos até o receber antes de tentar pedir um novo código.",
        "confirmemail_send": "Enviar código de confirmação",
        "confirmemail_sent": "Correio de confirmação enviado.",
        "scarytranscludedisabled": "[Transclusão interwikis foi impossibilitada]",
        "scarytranscludefailed": "[Não foi possível obter a predefinição a partir de $1]",
        "scarytranscludefailed-httpstatus": "[Não foi possível obter a predefinição a partir de $1: HTTP $2]",
-       "scarytranscludetoolong": "[URL longa demais]",
+       "scarytranscludetoolong": "[O URL é demasiado longo]",
        "deletedwhileediting": "<strong>AVISO:</strong> Esta página foi eliminada depois de ter começado a editá-la!",
        "confirmrecreate": "Depois de ter começado a editar esta página, {{GENDER:$1|o utilizador|a utilizadora|o(a) utilizador(a)}} [[User:$1|$1]] ([[User talk:$1|discussão]]) eliminou-a pelo seguinte motivo:\n: <em>$2</em>\nPor favor, confirme que quer realmente recriar esta página.",
        "confirmrecreate-noreason": "{{GENDER:$1|O utilizador|A utilizadora|O(a) utilizador(a)}} [[User:$1|$1]] ([[User talk:$1|discussão]]) eliminou esta página depois de ter começado a editá-la. Confirme que deseja recriar a página, por favor.",
        "version-libraries-description": "Descrição",
        "version-libraries-authors": "Autores",
        "redirect": "Redirecionar por ficheiro, utilizador, página, revisão, ou ID de registo",
-       "redirect-summary": "Esta página especial redireciona para um ficheiro (dado o nome do ficheiro), para uma página (dado um ID de revisão ou página) ou para uma página de utilizador (dado um ID numérico do utilizador), ou para uma entrada do registo (dado o ID do registo). Utilização: [[{{#Special:Redirect}}/file/Example.jpg]], \n[[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], ou [[{{#Special:Redirect}}/logid/186]].",
+       "redirect-summary": "Esta página especial redireciona para um ficheiro (dado o nome do ficheiro), para uma página (dado um ID de revisão ou página), para uma página de utilizador (dado um ID numérico do utilizador) ou para uma entrada do registo (dado o ID do registo). Utilização: [[{{#Special:Redirect}}/file/Example.jpg]], \n[[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], ou [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Ir",
        "redirect-lookup": "Pesquisa:",
        "redirect-value": "Valor:",
        "fileduplicatesearch-summary": "Procure ficheiros duplicados tendo por base o seu resumo criptográfico.",
        "fileduplicatesearch-filename": "Ficheiro:",
        "fileduplicatesearch-submit": "Pesquisar",
-       "fileduplicatesearch-info": "$1 × $2 pixels<br />Tamanho: $3<br />tipo MIME: $4",
+       "fileduplicatesearch-info": "$1 × $2 píxeis<br />Tamanho: $3<br />tipo MIME: $4",
        "fileduplicatesearch-result-1": "O ficheiro \"$1\" não possui cópias idênticas.",
        "fileduplicatesearch-result-n": "O ficheiro \"$1\" possui {{PLURAL:$2|uma cópia idêntica|$2 cópias idênticas}}.",
        "fileduplicatesearch-noresults": "Não foi encontrado nenhum ficheiro com o nome \"$1\".",
        "specialpages-group-developer": "Ferramentas de desenvolvimento",
        "blankpage": "Página em branco",
        "intentionallyblankpage": "Esta página foi intencionalmente deixada em branco",
-       "external_image_whitelist": " # Deixe esta linha exatamente como ela está<pre>\n# Coloque fragmentos de expressões regulares (apenas a parte entre //) abaixo\n# Estas serão comparadas com as URL das imagens externas (com ligação direta)\n# As que corresponderem serão apresentadas como imagens, caso contrário apenas será apresentado um link para a imagem\n# As linhas que começam com um símbolo de cardinal (#) são tratadas como comentários\n# Esta lista não distingue maiúsculas de minúsculas\n\n# Coloque todos os fragmentos de expressões regulares (regex) acima desta linha. Deixe esta linha exatamente como ela está</pre>",
+       "external_image_whitelist": " # Deixe esta linha exatamente como ela está<pre>\n# Coloque fragmentos de expressões regulares (apenas a parte entre //) abaixo\n# Estas serão comparadas com os URL das imagens externas (com ligação direta)\n# As que corresponderem serão apresentadas como imagens, caso contrário apenas será apresentado um link para a imagem\n# As linhas que começam com um símbolo de cardinal (#) são tratadas como comentários\n# Esta lista não distingue maiúsculas de minúsculas\n\n# Coloque todos os fragmentos de expressões regulares (regex) acima desta linha. Deixe esta linha exatamente como ela está</pre>",
        "tags": "Etiquetas de modificação válidas",
        "tag-filter": "Filtro de [[Special:Tags|etiquetas]]:",
        "tag-filter-submit": "Filtrar",
        "logentry-delete-revision-legacy": "$1 {{GENDER:$2|alterou}} a visibilidade de revisões na página $3",
        "logentry-suppress-delete": "$1 {{GENDER:$2|suprimiu}} a página $3",
        "logentry-suppress-event": "$1 {{GENDER:$2|alterou}} secretamente a visibilidade de {{PLURAL:$5|uma entrada|$5 entradas}} em $3: $4",
-       "logentry-suppress-revision": "$1 secretamente alterou a visibilidade de {{PLURAL:$5|uma revisão|$5 revisões}} em $3: $4",
+       "logentry-suppress-revision": "$1 alterou secretamente a visibilidade de {{PLURAL:$5|uma revisão|$5 revisões}} em $3: $4",
        "logentry-suppress-event-legacy": "$1 {{GENDER:$2|alterou}} secretamente a visibilidade de entradas de registo em $3",
        "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|alterou}} secretamente a visibilidade de revisões da página $3",
        "revdelete-content-hid": "conteúdo oculto",
        "usercssispublic": "Nota: As subpáginas de CSS não devem conter dados confidenciais porque podem ser vistas por outros utilizadores.",
        "restrictionsfield-badip": "Endereço IP (ou gama de endereços IP) inválido: $1",
        "restrictionsfield-label": "Gamas de endereços IP permitidas:",
-       "restrictionsfield-help": "Um endereço IP ou uma gama CIDR por linha. Para ativar todos,\nuse<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Um endereço IP ou uma gama CIDR por linha. Para ativar todos,\nuse<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Erro: $1",
+       "edit-error-long": "Erros:\n\n$1"
 }
index a934741..04048d4 100644 (file)
        "grant-basic": "Name for grant \"basic\".\n{{Related|Grant}}",
        "grant-viewdeleted": "Name for grant \"viewdeleted\".\n{{Related|Grant}}",
        "grant-viewmywatchlist": "Name for grant \"viewmywatchlist\".\n{{Related|Grant}}\n{{Identical|View your watchlist}}",
+       "grant-viewrestrictedlogs": "Name for grant \"viewrestrictedlogs\".\n{{Related|Grant}}",
        "newuserlogpage": "{{doc-logpage}}\n\nPart of the \"Newuserlog\" extension. It is both the title of [[Special:Log/newusers]] and the link you can see in [[Special:RecentChanges]].",
        "newuserlogpagetext": "Part of the \"Newuserlog\" extension. It is the description you can see on [[Special:Log/newusers]].",
        "rightslog": "{{doc-logpage}}\n\nIn [[Special:Log]]",
        "pageinfo-category-pages": "See also:\n* {{msg-mw|Pageinfo-category-subcats}}\n* {{msg-mw|Pageinfo-category-files}}\n{{Identical|Number of pages}}",
        "pageinfo-category-subcats": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-files}}",
        "pageinfo-category-files": "See also:\n* {{msg-mw|Pageinfo-category-pages}}\n* {{msg-mw|Pageinfo-category-subcats}}",
+       "pageinfo-user-id": "The numeric ID for a user",
        "markaspatrolleddiff": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolledtext}}\n{{Identical|Mark as patrolled}}",
        "markaspatrolledlink": "{{notranslate}}\nParameters:\n* $1 - link which has text {{msg-mw|Markaspatrolledtext}}",
        "markaspatrolledtext": "{{doc-actionlink}}\nSee also:\n* {{msg-mw|Markaspatrolleddiff}}",
        "htmlform-date-toohigh": "Used as error message in HTML forms. Parameters:\n* $1 - maximum date\nSee also:\n* {{msg-mw|Htmlform-invalid-input}}\n* {{msg-mw|Htmlform-required}}\n* {{msg-mw|Apifeatureusage-htmlform-date-invalid}}\n* {{msg-mw|Apifeatureusage-htmlform-date-toolow}}",
        "htmlform-time-toolow": "Used as error message in HTML forms. Parameters:\n* $1 - minimum date\nSee also:\n* {{msg-mw|Htmlform-invalid-input}}\n* {{msg-mw|Htmlform-required}}\n* {{msg-mw|Apifeatureusage-htmlform-time-invalid}}\n* {{msg-mw|Apifeatureusage-htmlform-time-toohigh}}",
        "htmlform-time-toohigh": "Used as error message in HTML forms. Parameters:\n* $1 - maximum date\nSee also:\n* {{msg-mw|Htmlform-invalid-input}}\n* {{msg-mw|Htmlform-required}}\n* {{msg-mw|Apifeatureusage-htmlform-time-invalid}}\n* {{msg-mw|Apifeatureusage-htmlform-time-toolow}}",
-       "htmlform-datetime-toolow": "Used as error message in HTML forms. Parameters:\n* $1 - minimum date\nSee also:\n* {{msg-mw|Htmlform-invalid-input}}\n* {{msg-mw|Htmlform-required}}\n* {{msg-mw|Apifeatureusage-htmlform-datetime-invalid}}\n* {{msg-mw|Apifeatureusage-htmlform-datetime-toohigh}}",
-       "htmlform-datetime-toohigh": "Used as error message in HTML forms. Parameters:\n* $1 - maximum date\nSee also:\n* {{msg-mw|Htmlform-invalid-input}}\n* {{msg-mw|Htmlform-required}}\n* {{msg-mw|Apifeatureusage-htmlform-datetime-invalid}}\n* {{msg-mw|Apifeatureusage-htmlform-datetime-toolow}}",
+       "htmlform-datetime-toolow": "Used as error message in HTML forms. Parameters:\n* $1 - minimum date\nSee also:\n* {{msg-mw|Htmlform-invalid-input}}\n* {{msg-mw|Htmlform-required}}",
+       "htmlform-datetime-toohigh": "Used as error message in HTML forms. Parameters:\n* $1 - maximum date\nSee also:\n* {{msg-mw|Htmlform-invalid-input}}\n* {{msg-mw|Htmlform-required}}",
        "htmlform-title-badnamespace": "Error message shown if the page title provided by the user is not in the required namespace. $1 is the page, $2 is the numerical namespace index.",
        "htmlform-title-not-creatable": "Error message shown if the page title provided by the user is not creatable (a special page). $1 is the page title.",
        "htmlform-title-not-exists": "Error message shown if the page title provided by the user does not exist. $1 is the page title.",
        "api-error-was-deleted": "API error message that can be used for client side localisation of API errors.",
        "duration-seconds": "Used as duration. Parameters:\n* $1 - number of seconds\n{{Related|Duration}}\n{{Identical|Second}}",
        "duration-minutes": "Used as duration. Parameters:\n* $1 - number of minutes\n{{Related|Duration}}\n{{Identical|Minute}}",
-       "duration-hours": "Used as duration. Parameters:\n* $1 - number of hours\n{{Related|Duration}}",
-       "duration-days": "Used as duration. Parameters:\n* $1 - number of days\n{{Related|Duration}}",
-       "duration-weeks": "Used as duration. Parameters:\n* $1 - number of weeks\n{{Related|Duration}}",
-       "duration-years": "Used as duration. Parameters:\n* $1 - number of years\n{{Related|Duration}}",
+       "duration-hours": "Used as duration. Parameters:\n* $1 - number of hours\n{{Related|Duration}}\n{{Identical|Hour}}",
+       "duration-days": "Used as duration. Parameters:\n* $1 - number of days\n{{Related|Duration}}\n{{Identical|Day}}",
+       "duration-weeks": "Used as duration. Parameters:\n* $1 - number of weeks\n{{Related|Duration}}\n{{Identical|Week}}",
+       "duration-years": "Used as duration. Parameters:\n* $1 - number of years\n{{Related|Duration}}\n{{Identical|Year}}",
        "duration-decades": "Used as duration. Parameters:\n* $1 - number of decades\n{{Related|Duration}}",
        "duration-centuries": "Used as duration. Parameters:\n* $1 - number of centuries\n{{Related|Duration}}",
        "duration-millennia": "Used as duration. Parameters:\n* $1 - number of millennia\n{{Related|Duration}}",
index bb89a09..45543b5 100644 (file)
        "notextmatches": "Manam ima p'anqakunap qillqankunapipas tarisqachu",
        "prevn": "{{PLURAL:$1|$1}} ñawpaq",
        "nextn": "{{PLURAL:$1|$1}} qatiq",
+       "prev-page": "ñawpaqnin p'anqa",
+       "next-page": "qatiqnin p'anqa",
        "prevn-title": "Ñawpaq $1 {{PLURAL:$1|taripasqa|taripasqakuna}}",
        "nextn-title": "Qatiq $1 {{PLURAL:$1|taripasqa|taripasqakuna}}",
        "shown-title": "Huk p'anqapi $1 {{PLURAL:$1|taripasqata|taripasqakunata}} rikuchiy",
        "htmlform-chosen-placeholder": "Akllanata akllay",
        "htmlform-cloner-create": "Astawan yapay",
        "htmlform-cloner-delete": "Qichuy",
-       "sqlite-has-fts": "$1 hunt'a qillqa maskana yanapawan",
-       "sqlite-no-fts": "$1 mana hunt'a qillqa maskana yanapawan",
        "logentry-delete-delete": "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3 nisqa p'anqatam qullun",
        "logentry-delete-restore": "{{GENDER:$2|}}$1 sutiyuq ruraqqa $3 nisqa p'anqatam qullusqamanta paqarichin",
        "logentry-delete-event": "{{GENDER:$2|}}$1 sutiyuq ruraqqa {{PLURAL:$5|huk hallch'ay|$5 hallch'ay}} ruraypa rikunalla kayninta wakinchan $3 p'anqapi: $4",
index 5cce849..d113101 100644 (file)
        "recreate": "Recreează",
        "confirm_purge_button": "OK",
        "confirm-purge-top": "Doriți să reîncărcați pagina?",
-       "confirm-purge-bottom": "Actualizaea unei pagini șterge cache-ul și forțează cea mai recentă variantă să apară.",
+       "confirm-purge-bottom": "Actualizarea unei pagini șterge cache-ul și forțează cea mai recentă variantă să apară.",
        "confirm-watch-button": "OK",
        "confirm-watch-top": "Adăugați această pagină la lista de pagini urmărite?",
        "confirm-unwatch-button": "OK",
index c521225..9a10860 100644 (file)
        "minoredit": "Малое изменение",
        "watchthis": "Следить за этой страницей",
        "savearticle": "Записать страницу",
-       "savechanges": "СоÑ\85Ñ\80аниÑ\82Ñ\8c Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ\8f",
+       "savechanges": "Ð\97апиÑ\81аÑ\82Ñ\8c Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83",
        "publishpage": "Создать страницу",
        "publishchanges": "Записать страницу",
        "preview": "Предпросмотр",
        "content-model-css": "CSS",
        "content-json-empty-object": "Пустой объект",
        "content-json-empty-array": "Пустой массив",
-       "deprecated-self-close-category": "Страницы, использующие недопустимые самозакрывающеся HTML-теги",
+       "deprecated-self-close-category": "СÑ\82Ñ\80аниÑ\86Ñ\8b, Ð¸Ñ\81полÑ\8cзÑ\83Ñ\8eÑ\89ие Ð½ÐµÐ´Ð¾Ð¿Ñ\83Ñ\81Ñ\82имÑ\8bе Ñ\81амозакÑ\80Ñ\8bваÑ\8eÑ\89иеÑ\81Ñ\8f HTML-Ñ\82еги",
        "deprecated-self-close-category-desc": "Страница содержит недопустимые самозакрывающиеся HTML-теги, такие как <code>&lt;b/></code> или <code>&lt;span/></code>. В скором времени их действие изменится, чтобы соответствовать спецификации HTML5, так что использование этих устаревших тегов в вики-тексте нежелательно.",
        "duplicate-args-warning": "<strong>Внимание:</strong> [[:$1]] вызывает [[:$2]] с более чем одним значением параметра «$3». Будет использовано только последнее указанное значение.",
        "duplicate-args-category": "Страницы, использующие повторяющиеся аргументы в вызовах шаблонов",
        "movelogpagetext": "Ниже представлен список переименованных страниц.",
        "movesubpage": "{{PLURAL:$1|1=Подстраница|Подстраницы}}",
        "movesubpagetext": "У этой страницы $1 {{PLURAL:$1|подстраница|подстраницы|подстраниц}}.",
+       "movesubpagetalktext": "У соответствующей страницы обсуждения есть $1 {{PLURAL:$1|подстраница, показанная |подстраниц, показанных|подстраницы, показанные}} ниже.",
        "movenosubpage": "У этой страницы нет подстраниц.",
        "movereason": "Причина:",
        "revertmove": "возврат",
        "pageinfo-category-pages": "Количество страниц",
        "pageinfo-category-subcats": "Количество подкатегорий",
        "pageinfo-category-files": "Количество файлов",
+       "pageinfo-user-id": "Идентификатор участника",
        "markaspatrolleddiff": "Отметить как проверенную",
        "markaspatrolledtext": "Отметить эту статью как проверенную",
        "markaspatrolledtext-file": "Пометить эту версию файла как отпатрулированную",
        "usercssispublic": "Обратите внимание: подстраницы CSS не должны содержать конфиденциальные сведения, поскольку они доступны для просмотра другим участникам.",
        "restrictionsfield-badip": "Недопустимый IP-адрес или диапазон адресов: $1",
        "restrictionsfield-label": "Разрешённые диапазоны IP-адресов:",
-       "restrictionsfield-help": "По одному IP-адресу или CIDR-диапазону в строке. Чтобы разрешить всё, используйте <br /><code>0.0.0.0/0</code><br /><code>::/0</code>"
+       "restrictionsfield-help": "По одному IP-адресу или CIDR-диапазону в строке. Чтобы разрешить всё, используйте <br /><code>0.0.0.0/0</code><br /><code>::/0</code>",
+       "edit-error-short": "Ошибка: $1",
+       "edit-error-long": "Ошибки: $1"
 }
index 547099b..f3a4340 100644 (file)
        "tog-showtoolbar": "سنوار اوزار ڏيکاريو",
        "tog-editondblclick": "ٻٽي ڪلڪ تي صفحا سنواريو",
        "tog-watchcreations": "منهنجا سرجيل صفحا ۽ منهنجا چاڙهيل فائيل منهنجي زيرِ نظر فهرست تي رکو",
-       "tog-watchdefault": "منهنجا ترميميل صفحا ۽ فائيل  منهنجي زير نظر فهرست تي رکو",
-       "tog-watchmoves": "جيڪي صفحا ۽ فائيل آءُٗ چوريان، سي منهنجي زير نظر فهرست ۾ شامل ڪريو.",
-       "tog-watchdeletion": "آءُٗ جيڪي صفحا ۽ فائيل  ڊاهيان، سي منهنجي زير نظر فهرست تي رکو",
-       "tog-watchrollback": "انهن صفحن کي منهنجي زير نظر فهرست تي رکو، جن ۾ تبديلين کي مون واپس ورايو آهي.",
+       "tog-watchdefault": "منهنجا ترميميل صفحا ۽ فائيل  منهنجي نظرھيٺ فھرست ۾ رکو",
+       "tog-watchmoves": "جيڪي صفحا ۽ فائيل آءُٗ چوريان، سي منهنجي نظرھيٺ فھرست ۾ شامل ڪريو.",
+       "tog-watchdeletion": "آءُٗ جيڪي صفحا ۽ فائيل  ڊاهيان، سي منهنجي نظرھيٺ فھرست تي رکو",
+       "tog-watchrollback": "انهن صفحن کي منهنجي نظرھيٺ فھرست تي رکو، جن ۾ تبديلين کي مون واپس ورايو آهي.",
        "tog-minordefault": "سمورين تبديلين کي بنان چئي معمولي ترميم تصور ڪريو",
-       "tog-previewontop": "ترÙ\85Ù\8aÙ\85Ù\8a Ø¨Ø§ÚªØ³ Ù\85ٿاÙ\86 Ù¾Ù\8aØ´ Ù\86گاÙ\87Û\81 ڏيکاريو",
-       "tog-previewonfirst": "پهرين ترميم تي پيش نگاهہ ڏيکاريو",
-       "tog-enotifwatchlistpages": "مونکي ايميل ڪريو جڏهن منهنجي زير نظر فهرست ڪا صفحو يا فائيل تبديل ڪيو وڃي",
+       "tog-previewontop": "ترÙ\85Ù\8aÙ\85Ù\8a Ø¯Ù»Ù\8a Ù\85ٿاÙ\86 Ù¾Ù\8aØ´ Ù\86گاھ ڏيکاريو",
+       "tog-previewonfirst": "پهرين ترميم تي پيش نگاھ ڏيکاريو",
+       "tog-enotifwatchlistpages": "مون کي ايميل ڪريو جڏهن منهنجي نظرھيٺ فھرست ۾ ڪو صفحو يا فائيل تبديل ڪيو وڃي",
        "tog-enotifusertalkpages": "منهنجي مباحثي صفحي ۾ تبديليءَ جي صورت ۾ مون کي برق ٽپال اماڻيو",
        "tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ بہ مون کي برق ٽپال ڪريو",
        "tog-enotifrevealaddr": "پڌراين ۾ منهنجو برق ٽپال پتو ظاهر ڪريو.",
        "tog-shownumberswatching": "ڏسندڙ يوزرس جو انگ ڏيکاريو",
        "tog-oldsig": "توھان جو موجوده دستخط:",
+       "tog-fancysig": "صحيح کي وڪيٽيڪسٽ سمجھو (ڪنھن خوڪار ڳنڍڻي کانسواءِ)",
        "tog-uselivepreview": "سڌي سنئين پيش نگاھہ استعمال ڪريو",
        "tog-watchlisthideown": "زير نظر فهرست مان منهنجون ڪيل ترميمون لڪايو",
        "tog-watchlisthidebots": "ٽيٽ فهرست تان بوٽ جون ترميمون لڪايو",
        "tog-watchlisthideminor": "ٽيٽ فهرست تان معمولي ترميمون لڪايو",
        "tog-watchlisthideliu": "لاگ اِن ٿيل يوزرس جون ڪيل ترميمون زيرنظر فهرست ۾ نہ ڏيکاريو",
        "tog-watchlisthideanons": "ٽيٽ فهرست تان اڻڄاتل يوزر جون ترميمون لڪايو",
+       "tog-watchlisthidepatrolled": "نظرھيٺ فھرست مان گشت ڪيل ترميمون لڪايو",
        "tog-watchlisthidecategorization": "صفحن جا زمرا لڪايو",
        "tog-ccmeonemails": "ٻين يوزرس ڏانهن منهنجي موڪليل برق ٽپال جو پرت مون کي اماڻيو",
        "tog-diffonly": "تفاوت هيٺان صفحي جو مواد نہ ڏيکاريو",
@@ -47,6 +49,7 @@
        "underline-always": "هميشہ",
        "underline-never": "ڪڏهن بہ نہ",
        "editfont-style": "ايراضي جو فونٽ اسٽائيل سنواريو:",
+       "editfont-sansserif": "سينس-سيرف فونٽ",
        "editfont-serif": "سيرِف اِنڊو",
        "sunday": "آچر",
        "monday": "سومر",
        "august-date": "آگسٽ $1",
        "september-date": "سيپٽمبر $1",
        "october-date": "آڪٽوبر $1",
-       "november-date": "Ù\86Ù\8eÙ\88Ù\90مبر $1",
+       "november-date": "Ù\86Ù\88مبر $1",
        "december-date": "ڊسمبر $1",
        "period-am": "صبح جو",
        "period-pm": "منجھند کان بعد",
        "category-file-count-limited": "هيٺيون يا هيٺيان {{PLURAL:$1|فائيل آهي|$1 فائيل آهن}} هن تازي زمري ۾.",
        "listingcontinuesabbrev": "جاري.",
        "index-category": "ڏسڻيل صفحا",
-       "noindex-category": "غير-ڏسڻيل صفحا",
+       "noindex-category": "غيرڏسڻيل صفحا",
        "broken-file-category": "فائيل جي ٽٽل ڳنڍڻن وارا صفحا",
        "about": "بابت",
        "article": "موادي صفحو",
        "morenotlisted": "ھي فھرست نامڪمل بہ ٿي سگھي ٿي.",
        "mypage": "منهنجو صفحو",
        "mytalk": "بحث",
-       "anontalk": "ڳالھ ٻولھ",
+       "anontalk": "بحث",
        "navigation": "رهنمائي",
        "and": "&#32؛۽",
        "qbfind": "ڳوليو",
        "talk": "بحث",
        "views": "ڏيٺون",
        "toolbox": "اوزارَ",
+       "tool-link-userrights": "{{GENDER:$1|يوزر}} گروھ تبديل ڪريو",
+       "tool-link-emailuser": "ھن {{GENDER:$1|يوزر}} ڏانھن برقٽپال موڪليو",
        "userpage": "يوزر صفحو ڏسو",
        "projectpage": "رٿائي صفحو ڏسو",
        "imagepage": "ذريعاتي صفحو ڏسو",
        "jumpto": "ڏانھن ٽپ ڏيو:",
        "jumptonavigation": "رهنمائي",
        "jumptosearch": "ڳولا",
+       "view-pool-error": "معذرت سان سرور هاڻي تمام گھڻو سُڪ آهي.\nتمام گھڻا يوزر ھن صفحي کي ڏسڻ جي ڪوشش ڪري رھيا آھن.\nمهرباني ڪري ٿورو ترسو انکان اڳ جو توھان ھن صفحي تائين رسڻ لاءِ ٻيھر ڪوشش ڪريو.\n\n$1",
        "generic-pool-error": "معذرت سان سرور هاڻي تمام گھڻو سُڪ آهي.\nتمام گھڻا يوزر هتي موجود آهن.\nمهرباني ڪري ٿورو ترسي پوءِ ڪوشش ڪريو.",
        "pool-errorunknown": "اڻ ڄاتل چُڪَ",
        "poolcounter-usage-error": "استعمال جي خرابي: $1",
        "aboutsite": "{{SITENAME}} بابت",
        "aboutpage": "Project:بابت",
        "copyright": "ڪجھہ ٻيو ڄاڻايل نہ هجڻ جي صورت ۾ سمورو مواد $1 تحت ميسر ڪجي ٿو.",
-       "copyrightpage": "{{ns:project}}:Ø­Ù\82 Û½ Ù\88اسطا",
+       "copyrightpage": "{{ns:project}}:تاÙ\84Ù\8aÙ\81 Ø¬Ø§ Ø­Ù\82",
        "currentevents": "ھاڻوڪا واقعا",
        "currentevents-url": "Project:ھاڻوڪا واقعا",
        "disclaimers": "غيرجوابداريناما",
        "retrievedfrom": "\"$1\" تان ورتل",
        "youhavenewmessages": "توهان لاءِ $1 ($2) آهن.",
        "youhavenewmessagesmanyusers": "توهان لاءِ ڪيترن ئي يُوزرس ($2) طرفان $1 آيل آهن.",
+       "newmessageslinkplural": "{{PLURAL:$1|ھڪ نئون پيغام|999=نوان پيغام}}",
+       "newmessagesdifflinkplural": "آخري {{PLURAL:$1|تبديلي|999=تبديليون}}",
        "youhavenewmessagesmulti": "$1 تي توهان لاءِ نوان نياپا آهن",
        "editsection": "سنواريو",
        "editold": "سنواريو",
        "databaseerror-query": "استفسار: $1",
        "databaseerror-function": "ڪاڄ: $1",
        "databaseerror-error": "چُڪَ: $1",
+       "laggedslavemode": "<strong>چتاءُ:</strong> صفحي ۾ ھاڻوڪيون تبديليون نه ھجڻ جو امڪان آھي.",
        "readonly": "اعدادخانو بنديل",
        "missingarticle-rev": "(ڀيرو#: $1)",
        "missingarticle-diff": "(تفاوت: $1، $2)",
        "title-invalid-interwiki": "ڄاڻايل عنوان ۾ اهڙو بين‌الوڪِي ڳنڍڻو شامل آهي، جيڪو عنوانن ۾ استعمال ڪري نہ ٿو سگھجي.",
        "title-invalid-characters": "صفحي جي ڄاڻايل عنوان ۾ ناقابل ڪار اکر شامل آهن: $1",
        "title-invalid-leading-colon": "صفحي جي ڄاڻايل عنوان جي ابتدا ۾ ناقابل ڪار ڪالن شامل آهي.",
-       "viewsource": "ڪوڊ ڏسو",
+       "viewsource": "ذريعو ڏسو",
        "viewsource-title": "$1 جو ڪوڊ ڏسو",
        "protectedpagetext": "هيءُ صفحو ترميمن کان تحفظيل آهي.",
        "viewsourcetext": "توهان هن صفحي جو ڪوڊ ڏسي ۽ نقل ڪري سگھو ٿا:",
        "mypreferencesprotected": "توهان جي پنهنجون ترجيحات سنوارڻ جي اجات حاصل ڪانهي.",
        "ns-specialprotected": "خاص صفحا سنواري نٿا سگھجن.",
        "titleprotected": "[[User:$1|$1]] اهڙي عنوان سان صفحو سرجڻ تي روڪ لڳائي ڇڏي آهي. سبب <em>$2</em> ڄاڻايو ويو آهي.",
-       "exception-nologin": "لا اِن ٿيل ناهيو",
+       "exception-nologin": "داخل ٿيل ناهيو",
        "virus-unknownscanner": "اڻ ڄاتل نِس وائرس:",
-       "cannotlogoutnow-title": "ھاڻÙ\8a Ù\84اگ Ø¢Ø¦Ù\88Ù½ Ù\86Ù¿Ù\88 ڪري سگھجي",
-       "cannotlogoutnow-text": "$1 Ø§Ø³ØªØ¹Ù\85اÙ\84 ÚªØ±Ú» Ø¯Ù\88راÙ\86 Ù\84اگ Ø¢Ø¦Ù\88Ù½ ڪرڻ ممڪن نہ آھي.",
+       "cannotlogoutnow-title": "ھاڻÙ\8a Ù»Ø§Ú¾Ø± Ù\86Ù¿Ù\88 Ù\86ڪري سگھجي",
+       "cannotlogoutnow-text": "$1 Ø§Ø³ØªØ¹Ù\85اÙ\84 ÚªØ±Ú» Ø¯Ù\88راÙ\86 Ù»Ø§Ú¾Ø± Ù\86ڪرڻ ممڪن نہ آھي.",
        "welcomeuser": "ڀلي ڪري آيا، $1!",
        "yourname": "يُوزرنانءُ:",
        "userlogin-yourname": "يوزرنانءُ",
        "userlogin-yourname-ph": "پنهنجو يوزرنانءُ ڄاڻايو",
        "createacct-another-username-ph": "يُوزرنانءُ ڄاڻايو",
-       "yourpassword": "ڳجھو لفظ:",
+       "yourpassword": "ڳجھولفظ:",
        "userlogin-yourpassword": "ڳجھولفظ",
        "userlogin-yourpassword-ph": "پنهنجو ڳجھولفظ ڄاڻايو",
        "createacct-yourpassword-ph": "ڳجھولفظ ڄاڻايو",
        "createacct-yourpasswordagain-ph": "ٻيھر ڳجھولفظ داخل ڪريو",
        "userlogin-remembermypassword": "مون کي داخل ٿيل رکو",
        "userlogin-signwithsecure": "محفوظ ڳانڍاپو استعمال ڪريو",
-       "cannotloginnow-title": "ھاڻي لاگ ان نٿو ڪري سگھجي",
-       "cannotloginnow-text": "$1 استعمال ڪرڻ دوران لاگ ان ڪرڻ ممڪن نہ آھي.",
+       "cannotlogin-title": "داخل نٿو ٿي سگھجي",
+       "cannotlogin-text": "داخل ٿيڻ ممڪن نه آھي",
+       "cannotloginnow-title": "ھاڻي داخل نٿو ٿي سگھجي",
+       "cannotloginnow-text": "$1 استعمال ڪرڻ دوران داخل ٿيڻ ممڪن نہ آھي.",
+       "cannotcreateaccount-title": "کاتا نٿو کولي سگھي",
        "yourdomainname": "توهان جو ميدان:",
-       "password-change-forbidden": "هن وڪِي تي توهان ڳجھو لفظ بدلائي نہ ٿا سگھو.",
+       "password-change-forbidden": "هن وڪِي تي توهان ڳجھالفظ بدلائي نٿا سگھو.",
        "login": "داخل ٿيو",
-       "nav-login-createaccount": "لاگ اِن ٿيو / کاتو کوليو",
-       "userlogin": "لاگ اِن ٿيو / کاتو کوليو",
-       "userloginnocreate": "لاگ اِن",
-       "logout": "لاگ آئوٽ",
-       "userlogout": "لاگ آئوٽ",
-       "notloggedin": "لاگ اِن ٿيل ناهيو",
+       "login-security": "پنھنجي سڃاڻپ جي خاطري ڪريو",
+       "nav-login-createaccount": "داخل ٿيو / کاتو کوليو",
+       "userlogin": "داخل ٿيو / کاتو کوليو",
+       "userloginnocreate": "داخل ٿيو",
+       "logout": "ٻاھر نڪرو",
+       "userlogout": "ٻاھر نڪرو",
+       "notloggedin": "داخل ٿيل ناهيو",
        "userlogin-noaccount": "کاتو نٿا رکو؟",
        "userlogin-joinproject": "{{SITENAME}} ۾ شامل ٿيو",
        "nologin": " کاتو نہ ٿا رکو؟ '''$1'''.",
        "nologinlink": "نئون کاتو کوليو",
        "createaccount": "کاتو کوليو",
        "gotaccount": "ڇا اڳي ئي کاتو رکو ٿا؟ '''$1'''.",
-       "gotaccountlink": "لاگ اِن",
-       "userlogin-resetlink": "پنهنجي لاگ اِن جا تفصيل وساري ويٺا؟",
+       "gotaccountlink": "داخل ٿيو",
+       "userlogin-resetlink": "پنهنجي داخل ٿيڻ جا تفصيل وساري ويٺا؟",
        "userlogin-resetpassword-link": "ڳجھولفظ وساري ويٺا آهيو؟",
        "userlogin-helplink2": "داخل ٿيڻ ۾ مدد",
+       "userlogin-reauth": "اھو پڪ ڪرڻ لاءِ ته توھان {{GENDER:$1|$1}} آھيو توھان کي ٻيھر داخل ٿيڻو پوندو.",
        "userlogin-createanother": "ٻيو کاتو کوليو",
        "createacct-emailrequired": "برق ٽپال پتو",
        "createacct-emailoptional": "برق ٽپال پتو (مرضيءَ موجب)",
        "createacct-reason-ph": "توهان ٻيو کاتو ڇو کولي رهيا آهيو",
        "createacct-submit": "پنهنجو کاتو کوليو",
        "createacct-another-submit": "کاتو کوليو",
+       "createacct-continue-submit": "کاتو کولڻ جاري رکو",
+       "createacct-another-continue-submit": "کاتو کولڻ جاري رکو",
        "createacct-benefit-heading": "{{SITENAME}} توهان جهڙن سڄڻن ٺاهيو آهي.",
        "createacct-benefit-body1": "{{PLURAL:$1|ترميم|ترميمون}}",
        "createacct-benefit-body2": "{{PLURAL:$1|صفحو|صفحا}}",
        "createacct-benefit-body3": "حاليه {{PLURAL:$1|ڀاڱيدار}}",
-       "badretype": "توهان جو ڄاڻايل ڳجھو لفظ درست نہ آهي.",
+       "badretype": "توهان جو ڄاڻايل ڳجھولفظ درست نہ آهي.",
        "usernameinprogress": "ان يُوزرنانءُ لاءِ کاتو اڳ ۾ ئي تياريءَ هيٺ آهي. مهرباني ڪري انتظار فرمايو.",
        "userexists": "ڄاڻايل يوزرنانءُ اڳ ۾ ئي استعمال هيٺ آهي. مهرباني ڪري ڪو ٻيو يُوزرنانءُ چونڊيو.",
-       "loginerror": "لاگ اِن چُڪَ",
+       "loginerror": "داخل ٿيڻ ۾ چُڪَ",
        "createacct-error": "کاٿو کولڻ ۾ چُڪَ",
        "createaccounterror": "کاتو کُلي نہ سگھيو: $1",
-       "nocookiesnew": "يُوزر کاتو کلي چڪو، پر توهان لاگ اِن نہ ٿيا آهيو. يُوزرس کي لاگ اِن ڪرڻ لاءِ {{SITENAME}} ڪوڪيز استعمال ڪندي آهي. توهان ڪوڪيز کي ناڪاره بڻائي رکيو آهي. لاگ اِن ٿيڻ لاءِ ڪوڪيز کي ڪارائتو بڻايو.",
+       "nocookiesnew": "يُوزر کاتو کلي چڪو، پر توهان داخل نہ ٿيا آهيو. يُوزرس کي داخل ڪرڻ لاءِ {{SITENAME}} ڪوڪيز استعمال ڪندي آهي. توهان ڪوڪيز کي ناڪاره بڻائي رکيو آهي. داخل ٿيڻ لاءِ ڪوڪيز کي ڪارائتو بڻايو.",
        "nocookieslogin": "يُوزرس کي لاگ اِن ڪرڻ لاءِ {{SITENAME}} ڪوڪيز استعمال ڪندي آهي. توهان ڪوڪيز کي ناڪاره بڻائي رکيو آهي. لاگ اِن ٿيڻ لاءِ ڪوڪيز کي ڪارائتو بڻايو.",
        "noname": "توهان جو ڄاڻايل يُوزرنانءُ ناقابل ڪار آهي.",
-       "loginsuccesstitle": "لاگ اِن ٿيل",
-       "loginsuccess": "'''هاڻي توهان {{SITENAME}} تي بطور \"$1\" لاگ اِن ٿيل آهيو.'''",
+       "loginsuccesstitle": "داخل ٿيل",
+       "loginsuccess": "'''هاڻي توهان {{SITENAME}} تي بطور \"$1\" داخل ٿيل آهيو.'''",
        "nosuchuser": "\"$1\" نالي سان ڪو بہ يوزر نہ آهي.\nننڍن وڏن اکرن ۾ امتياز ڪرڻ لازمي آهي. \nهِجي چڪاسيو، يا [[Special:CreateAccount|نئون کاتو تخليق ڪريو]]",
        "nosuchusershort": "\"$1\" نالي ڪو بہ يُوزر ناهي.\nهِجي جي پڪ ڪندا.",
        "nouserspecified": "توهان کي ڪو يوزرنانءُ ڄاڻائڻو پوندو.",
-       "login-userblocked": "هيءُ يُوزر بندشيل آهي. لاگ اِن جي اجازت نہ ٿي ڏجي.",
-       "wrongpassword": "ڏنل ڳجھو لفظ غير درست آهي. مهرباني ڪري ٻيهر ڪوشش ڪندا.",
-       "wrongpasswordempty": "ڏنل ڳجھو لفظ خالي هو. مهرباني ڪري وري ڪوشش ڪندا.",
-       "passwordtooshort": "ڳجھÙ\8a لفظ گھٽ ۾ گھٽ  {{PLURAL:$1|1 اکر|$1 اکرَن}} تي ٻڌل هوڻ گھرجي.",
-       "passwordtoolong": "ڳجھو لفظ {{PLURAL:$1|1 اکر|$1 اکرن}} کان وڏو نہ ٿو ٿي سگھي.",
-       "password-name-match": "توهان جو ڳجھو لفظ توهان جي يوزرنانءُ کان مختلف هجڻ گھرجي.",
-       "mailmypassword": "ڳجھو لفظ  نئين سِر مقرر ڪريو",
-       "passwordremindertitle": "{{SITENAME}} لاءِ نئون عارضي ڳجھو لفظ",
+       "login-userblocked": "هيءُ يُوزر بندشيل آهي. داخل ٿيڻ جي اجازت نٿي ڏجي.",
+       "wrongpassword": "ڏنل ڳجھولفظ غير درست آهي. مھرباني ڪري ٻيھر ڪوشش ڪندا.",
+       "wrongpasswordempty": "ڏنل ڳجھولفظ خالي هو.\nمهرباني ڪري وري ڪوشش ڪندا.",
+       "passwordtooshort": "ڳجھÙ\88لفظ گھٽ ۾ گھٽ  {{PLURAL:$1|1 اکر|$1 اکرَن}} تي ٻڌل هوڻ گھرجي.",
+       "passwordtoolong": "ڳجھولفظ {{PLURAL:$1|1 اکر|$1 اکرن}} کان وڏو نٿو ٿي سگھي.",
+       "password-name-match": "توهان جو ڳجھولفظ توهان جي يوزرنانءُ کان مختلف هجڻ گھرجي.",
+       "mailmypassword": "ڳجھولفظ ٻيھر مقرر ڪريو",
+       "passwordremindertitle": "{{SITENAME}} لاءِ نئون عارضي ڳجھولفظ",
        "passwordremindertext": "ڪنهن (شايد توهان آءِ پي پتي $1 تان) اسان کي {{SITENAME}} ($4) لاءِ نئون ڳجھو لفظ اماڻڻ جي گھُرَ ڪئي.\"$2\" يوزر لاءِ هڪ ڳجھُ لفظ تخليق ڪيو ويو آهي \"$3\" تي ترتيب ڏنو ويو هو. جيڪڏهن اهو توهان جي ارادو هيو، ته هاڻي توهان کي هينئر ئي لاگ اِن ٿي پنهنجو ڳجھو لفظ تبديل ڪرڻ گھرجي.\nتوهان جو عارضي ڳجھو لفظ {{PLURAL:$5|هڪ ڏينهُن|$5 ڏينهَن}} ۾ ختم ٿيندو.\n\nجيڪڏهن اها گھُرَ اوهان نه ڪئي هئي، يا هاڻي اوهان کي پنهنجو ڳجھو لفظ ياد اچي ويو آهي ۽ توهان ان کي تبديل ڪرڻ نه ٿا چاهيو، ته توهان هن نياپي کي نظر انداز ڪندي پنهنجو پراڻو ڳجھو لفظ ئي استعمال ڪري سگھو ٿا.",
        "noemail": "يُوزر \"$1\" جي ڪو بہ برق ٽپال پتو درج ٿيل ناهي.",
        "noemailcreate": "توهان کي قابل ڪار برق ٽپال پتو مهيا ڪرڻو پوندو.",
        "accountcreated": "کاتو کلي چڪو",
        "accountcreatedtext": "يوزر کاتو [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) جي لاءِ تخليق ٿي چڪو آهي.",
        "createaccount-title": "{{SITENAME}} تي کاتو کولڻ",
-       "login-throttled": "توهان تازو ئي لاگ اِن ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
+       "login-throttled": "توهان تازو ئي داخل ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
        "login-abort-generic": "توهان جو داخل ٿيڻ ناڪام ويو - بند ڪيل",
        "login-migrated-generic": "توهان جو کاتو لڏي چڪو آهي، ۽ هن وڪيءَ تي توهان جو يُوزنانءُ هاڻي وجود نہ ٿو رکي.",
        "loginlanguagelabel": "ٻولي: $1",
        "createacct-another-realname-tip": "اصل نالو ڄاڻائڻ اختياري آهي. جيڪڏهن توهان اصل نالو ڄاڻايو ٿا، تہ اهو توهان کي توهان جي ڪم جي مڃتا ڏيڻ لاءِ ڪم آندو ويندو.",
        "pt-login": "داخل ٿيو",
        "pt-login-button": "داخل ٿيو",
+       "pt-login-continue-button": "داخل ٿيڻ جاري رکو",
        "pt-createaccount": "کاتو کوليو",
        "pt-userlogout": "ٻاھر نڪرو",
        "php-mail-error-unknown": "پي ايڇ پي جي  ڪاڄ اندر اڻڄاتل چُڪَ.",
        "user-mail-no-addy": "برق ٽپال پتو ڄاڻائڻ کان سواءِ برق ٽپال اماڻڻ جي ڪوشش ڪئي وئي.",
-       "changepassword": "ڳجھو لفظ تبديل ڪريو",
-       "resetpass_announce": "لاگ اِن جو عمل پورو ڪرڻ لاءِ، توهان کي نئون ڳجھو لفظ اختيار مقرر ڪرڻو پوندو.",
-       "resetpass_header": "کاتي جو ڳجھو لفظ بدلايو",
-       "oldpassword": "اڳوڻو ڳجھو لفظ:",
-       "newpassword": "نئون ڳجھو لفظ:",
-       "retypenew": "نئون ڳجھو لفظ ٻيهر ٽائيپ ڪندا:",
-       "resetpass_submit": "ڳجھو لفظ طَي ڪريو ۽ لاگ اِن ٿيو",
+       "changepassword": "ڳجھولفظ تبديل ڪريو",
+       "resetpass_announce": "داخل ٿيڻ جو عمل پورو ڪرڻ لاءِ، توهان کي نئون ڳجھولفظ اختيار مقرر ڪرڻو پوندو.",
+       "resetpass_header": "کاتي جو ڳجھولفظ بدلايو",
+       "oldpassword": "اڳوڻو ڳجھولفظ:",
+       "newpassword": "نئون ڳجھولفظ:",
+       "retypenew": "نئون ڳجھولفظ ٻيهر ٽائيپ ڪندا:",
+       "resetpass_submit": "ڳجھولفظ طَي ڪريو ۽ داخل ٿيو",
        "changepassword-success": "توهان جو ڳجھولفظ بدلايو ويو آھي!",
-       "changepassword-throttled": "توهان تازو ئي لاگ اِن ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
+       "changepassword-throttled": "توهان تازو ئي داخل ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
        "botpasswords-label-create": "سرجيو",
        "botpasswords-label-update": "تجديد",
        "botpasswords-label-cancel": "رد",
        "botpasswords-label-delete": "ڊاهيو",
-       "botpasswords-label-resetpassword": "ڳجھو لفظ  نئين سِر مقرر ڪريو",
-       "resetpass_forbidden": "ڳجھو لفظ بدلائي نہ ٿو سگھجي.",
-       "resetpass-no-info": "هيءُ صفحو پڙهڻ لاءِ لاگ اِن ٿيڻ ضروري آهي.",
-       "resetpass-submit-loggedin": "ڳجھو لفظ بدلايو",
+       "botpasswords-label-resetpassword": "ڳجھولفظ ٻيھر مقرر ڪريو",
+       "resetpass_forbidden": "ڳجھالفظ بدلائي نٿا سگھجن",
+       "resetpass_forbidden-reason": "ڳجھالفظ بدلائي نٿا سگھجن:$1",
+       "resetpass-no-info": "هيءُ صفحو پڙهڻ لاءِ داخل ٿيڻ ضروري آهي.",
+       "resetpass-submit-loggedin": "ڳجھولفظ بدلايو",
        "resetpass-submit-cancel": "رد",
        "resetpass-wrong-oldpass": "ناقابل ڪار هاڻوڪو يا عارضي ڳجھولفظ. \nتوهان پنهنجو ڳجھو لفظ اڳ ۾ ئي بدلائي چڪا آهيو يا نئين ڳجھي لفظ لاءِ درخواست ڏئي چڪا آهيو.",
        "resetpass-recycled": "مهرباني ڪري پنهنجي هاڻوڪي ڳجھي لفظ کان ڪو مختلف ڳجھو لفظ چونڊيو.",
        "resetpass-temp-emailed": "توهان برق ٽپال ذريعي اماڻيل عارضي ڳجھي لفظ سان لاگ اِن ٿيا آهيو. لاگ اِن کي مڪمل ڪرڻ لاءِ توهان کي هتي نئون ڳجھو لفظ طَي ڪرڻو ئي پوندو:",
-       "resetpass-temp-password": "عارضي ڳجھو لفظ:",
-       "resetpass-expired": "توهان جو ڳجھو لفظ مدي خارج ٿي چڪو آهي. نئون ڳجھو لفظ مقرر ڪريو ۽ لاگ اِن ٿيو.",
+       "resetpass-temp-password": "عارضي ڳجھولفظ:",
+       "resetpass-expired": "توهان جو ڳجھولفظ مدي خارج ٿي چڪو آهي. نئون ڳجھولفظ مقرر ڪريو ۽ داخل ٿيو.",
        "resetpass-expired-soft": "توهان جو ڳجھو لفظ مدي خارج ٿي چڪو آهي. مهرباني ڪري نئون ڳجھو لفظ چونڊيو، يا ساڳيو ڪم ڪنهن ٻي وقت ڪرڻ لاءِ \"{{int:authprovider-resetpass-skip-label}}\" تي ڪلڪ ڪريو.",
-       "resetpass-validity-soft": "توهان جو ڳجھو لفظ ناقابل ڪار آهي: $1\nمهرباني ڪري نئون ڳجھو لفظ چونڊيو، يا ساڳيو ڪم ڪنهن ٻي وقت ڪرڻ لاءِ \"{{int:authprovider-resetpass-skip-label}}\" تي ڪلڪ ڪريو.",
-       "passwordreset": "ڳجھو لفظ مَٽايو",
-       "passwordreset-text-one": "برق ٽپال ذريعي عارضي ڳجھو لفظ حاصل ڪرڻ لاءِ هيءُ فارم پُر ڪريو.",
-       "passwordreset-disabled": "هن وڪيءَ تي ڳجھو لفظ نئين سِر مقرر ڪرڻ وارو چارو غير فعال بڻايو ويو آهي.",
+       "resetpass-validity-soft": "توهان جو ڳجھولفظ ناقابل ڪار آهي: $1\nمهرباني ڪري نئون ڳجھولفظ چونڊيو، يا ساڳيو ڪم ڪنهن ٻي وقت ڪرڻ لاءِ \"{{int:authprovider-resetpass-skip-label}}\" تي ڪلڪ ڪريو.",
+       "passwordreset": "ڳجھولفظ مَٽايو",
+       "passwordreset-text-one": "برق ٽپال ذريعي عارضي ڳجھولفظ حاصل ڪرڻ لاءِ هيءُ فارم پُر ڪريو.",
+       "passwordreset-disabled": "هن وڪيءَ تي ڳجھولفظ ٻيھر مقرر ڪرڻ وارو چارو غير فعال بڻايو ويو آهي.",
        "passwordreset-emaildisabled": "هن وڪيءَ تي برق‌ٽپال واريون خصوصيتون غير فعال بڻايون ويون آهن.",
        "passwordreset-username": "يُوزرنانءُ:",
        "passwordreset-domain": "ميدان:",
        "resettokens-tokens": "ٽوڪنس:",
        "resettokens-token-label": "$1 (حاليہ قدر: $2)",
        "resettokens-resetbutton": "چونڊيل ٽوڪن ٻيهر ترتيب ڪريو",
-       "bold_sample": "گهري تحرير",
-       "bold_tip": "گهري لکت",
+       "bold_sample": "گھري لکت",
+       "bold_tip": "گھري لکت",
        "italic_sample": "ترڇي لکت",
        "italic_tip": "ترڇي لکت",
        "link_sample": "ڳنڍڻي جو عنوان",
        "link_tip": "داخلي ڳنڍڻو",
        "extlink_sample": "http://www.example.com ڳنڍڻي جو عنوان",
        "extlink_tip": "خارجي ڳنڍڻو (اڳياڙي http://  نہ وساريندا)",
-       "headline_sample": "سرخي",
+       "headline_sample": "سرخي جي لکت",
        "headline_tip": "سطح 2 جي سرخي",
        "nowiki_tip": "وڪي فارميٽڱ کي نظرانداز ڪريو",
        "image_tip": "جَڙيل فائيل",
        "minoredit": "هيءَ هڪ معمولي ترميم آهي",
        "watchthis": "هيءُ صفحو سانڍيو",
        "savearticle": "صفحو سانڍيو",
-       "preview": "پيش نگاهہ",
+       "savechanges": "تبديليون سانڍيو",
+       "publishpage": "صفحو ڇاپيو",
+       "publishchanges": "تبديليون ڇاپيو",
+       "preview": "پيش نگاھ",
        "showpreview": "پيش نگاھ",
        "showdiff": "تبديليون ڏيکاريو",
-       "anoneditwarning": "<strong>خبردار:</strong> توهان لاگ اِن ٿيل نہ آهيو. جيڪڏهن توهان ڪي ترميمون ڪيون تہ هن صفحي جي سوانح ۾ توهان جو آءِ پي پتو درج ڪيو ويندو. جي توهان <strong>[$1 داخل]</strong> ٿيو ٿا < يا strong>[$2 کاتو کوليو] </strong> ٿا، تہ توهان جو ترميمون توهان جي يوزرنانءُ سن منسوب ڪيون وينديون، جنهن جا ٻيا بہ فائدا ٿي سگھن ٿا.",
-       "anonpreviewwarning": "توهان لاگ اِن ٿيل نہ آهيو. جيڪڏهن توهان صفحي ۾ تبديليون سانڍيون تہ اهڙين تبديلين ساڻ توهان جو آءِ پي پتو درج ڪيو ويندو.",
+       "anoneditwarning": "<strong>خبردار:</strong> توهان داخل ٿيل نہ آهيو. جيڪڏهن توهان ڪي ترميمون ڪيون تہ هن صفحي جي سوانح ۾ توهان جو آءِ پي پتو درج ڪيو ويندو. جي توهان <strong>[$1 داخل]</strong> ٿيو ٿا < يا strong>[$2 کاتو کوليو] </strong> ٿا، تہ توهان جو ترميمون توهان جي يوزرنانءُ سن منسوب ڪيون وينديون، جنهن جا ٻيا بہ فائدا ٿي سگھن ٿا.",
+       "anonpreviewwarning": "توهان داخل ٿيل نہ آهيو. جيڪڏهن توهان صفحي ۾ تبديليون سانڍيون تہ اهڙين تبديلين ساڻ توهان جو آءِپي پتو درج ڪيو ويندو.",
        "missingcommenttext": "براءِ مهرباني هيٺ پنهنجا تاثرات درج ڪندا.",
-       "summary-preview": "تت تي پيش نگاهہ:",
-       "subject-preview": "موضوع پيش نگاهہ:",
+       "summary-preview": "تت تي پيش نگاھ:",
+       "subject-preview": "موضوع پيش نگاھ:",
        "blockedtitle": "يُوزر بندشيل آهي.",
        "blockedtext": "'''توهان جي يوزرنانءُ يا آءِ پي کي بندشيو ويو آهي.'''\n\nبندش $1 هنئي. جڏهن تہ ڄاڻايل سبب ''$2'' آهي.\n\n\n* بندش جو آغاز: $8\n* بندش جو انجام: $6\n* بندش جو هدف: $7\n\nاهڙي روڪ تي بحث ڪرڻ لاءِ توهان $1 يا ڪنهن ٻي [[{{MediaWiki:Grouppage-sysop}}|منتظم]] سان رابطو ڪري سگھو ٿا. جيڪڏهن توهان جو درست [[Special:ترجيحات|کاتو ترجيحات]] ۾ درست برق ٽپال پتو درج ٿيل نہ آهي تہ توهان 'هن يوزر کي برق ٽپال ڪريو' وارو فيچر نہ ٿا \nYou cannot use the 'e-mail this user' feature unless a valid e-mail address is specified in your [[Special:Preferences|account preferences]] and you have not been blocked from using it.\nاستعمال ڪري سگھو. توهان جو هاڻوڪو آءِ پي پتو $3 آهي، ۽ بندش سڃاڻپ $5 آهي. مهرباني ڪري ڪنهن بہ پڇا ڳاڇا يا لهوچڙ لاءِ انهن مان ڪنهن هڪ يا ٻنهي جو حوالو ڏيندا.",
        "blockednoreason": "سبب اڻڄاڻايل",
        "whitelistedittext": "صفحا سنوارڻ لاءِ مهرباني ڪري $1.",
        "confirmedittext": "صفحا سنوارڻ کان اڳ توهان کي پنهنجي ايميل پتي جي تصديق ڪرڻي پوندي. مهرباني ڪري [[Special:Preferences|use preferences]] ذريعي پنهنجو ايميل پتو ڄاڻايو ۽ تصديقيو.",
        "nosuchsectiontitle": "سيڪشن نٿو لهي سگهي",
-       "loginreqtitle": "لاگ اِن گھربل آهي",
+       "loginreqtitle": "داخل ٿيڻ گھربل آهي",
        "loginreqlink": "داخل ٿيو",
        "loginreqpagetext": "ٻيا صفحا ڏسڻ لاءِ مهرباني ڪري $1",
-       "accmailtitle": "ڳجھو لفظ اماڻجي چڪو.",
+       "accmailtitle": "ڳجھولفظ اماڻجي چڪو",
        "newarticle": "(نئون)",
        "newarticletext": "توهان اهڙي صفحي جو ڳنڍڻو وٺي هتي پهتا آهيو، جيڪو اڃا وجود نٿو رکي.\nاهڙو صفحو جوڙڻ لاءِ، هيٺين باڪس ۾ ٽائيپ ڪرڻ شروع ڪريو (وڌيڪ ڄاڻڻ لاءِ [$1 امدادي صفحو] ڏسندا).\nجي توهان هتي غلطيءَ ۾ اچي ويا آهيو، تہ رڳو پنهنجي جهانگُوءَ جو <strong>back</strong> تي ٽڙڪ ڪريو.",
        "noarticletext": "في‌الوقت هن صفحي اندر ڪو بہ ٽيڪسٽ نہ آهي.\nتوهان ٻين صفحن ۾ [[Special:Search/{{PAGENAME}}|search ساڳي عنوان جي ڳولا]] ڪري سگھو ٿا،  \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لاڳاپيل لاگس ۾ ڳوليو]،\nor [{{fullurl:{{FULLPAGENAME}}|action=edit}} هيءُ صفحو ترميميو]</span>.",
        "blocked-notice-logextract": "هيءَ يُوزر في‌الحال بندشيل آهي. تازو بندش لاگ حوالي طور پيش ڪجي ٿو:",
        "updated": "(تجديديل)",
        "note": "<strong>نوٽ:</strong>",
-       "previewnote": "<strong>'''هيءَ محظ پيش نگاهہ آهي.</strong> ترميمون اڃا سانڍجوين ناهن!'''",
+       "previewnote": "<strong>هيءَ فقط پيش نگاھ آهي.</strong>\nتوھان جون ترميمون اڃان نہ سانڍيون ويون آھن!",
        "continue-editing": "ترميم گاھ ڏانهن وڃو",
        "editing": "$1 سنواريندي",
        "creating": "$1 سرجيندي",
        "protectedpagewarning": "<strong>چتاءُ: هيءَ صفحو اهڙيءَ ريت تحفظيو ويو آهي جو فقط منتظمين ئي ان کي سنواري سگھن ٿا. </strong>\nتازه ترين لاگ حوالي طور پيش ڪجي ٿو:",
        "semiprotectedpagewarning": "<strong>نوٽ: هيءَ صفحو اهڙيءَ ريت تحفظيو ويو آهي جو فقط کاتيدار يُوزرس ئي ان کي سنواري سگھن ٿا. </strong>\nتازه ترين لاگ حوالي طور پيش ڪجي ٿو:",
        "templatesused": "هن صفحي تي استعمال ٿيندڙ {{PLURAL:$1|سانچو|سانچا}}:",
-       "templatesusedpreview": "هن پيش نگاهہ ۾ استعمال ٿيل {{PLURAL:$1|سانچو|سانچا}}:",
+       "templatesusedpreview": "هن پيش نگاھ ۾ استعمال ٿيل {{PLURAL:$1|سانچو|سانچا}}:",
        "templatesusedsection": "هن سيڪشن ۾ استعمال ٿيل {{PLURAL:$1|سانچو|سانچا}}:",
        "template-protected": "(تحفظيل)",
        "template-semiprotected": "(نيم تحفظيل)",
        "history-show-deleted": "رڳو ڊاٺل",
        "histfirst": "اوائلي ترين",
        "histlast": "تازه ترين",
-       "historysize": "({{PLURAL:$1|1 ٻاٽڻ|$1 ٻاٽڻيون}})",
+       "historysize": "({{PLURAL:$1|1 بائيٽ|$1 بائيٽس}})",
        "historyempty": "(خالي)",
        "history-feed-title": "ترميمي سوانح",
        "history-feed-description": "وڪي جي هن صفحي جي ترميمي سوانح",
        "history-feed-item-nocomment": "$2 تي $1",
+       "rev-deleted-comment": "(ترميمي خلاصو ھٽايل)",
        "rev-deleted-user": "(يُوزرنانءُ ڊاٺو ويو)",
        "rev-deleted-event": "(لاگ تفصيل هٽايا ويا)",
        "rev-deleted-user-contribs": "[يُوزرنانءُ يا آءِ پِي پتو مِٽايو ويو - ڀاڱيدارين مان ترميمون لڪايون ويون]",
        "preferences": "ترجيحات",
        "mypreferences": "ترجيحات",
        "prefs-edits": "ترميمن جو تعداد:",
-       "prefsnologintext2": "پنهنجون ترجيحات بدلائڻ لاءِ لاگ اِن ٿيو.",
+       "prefsnologintext2": "پنهنجون ترجيحات بدلائڻ لاءِ داخل ٿيو.",
        "prefs-skin": "چَمَ",
        "skin-preview": "پيش نگاهہ",
        "datedefault": "بلا ترجيحا",
        "prefs-user-pages": "يُوزر صفحو",
        "prefs-personal": "يُوزر جو خدوخال",
        "prefs-rc": "تازيون تبديليون",
-       "prefs-watchlist": "Ù½Ù\8aÙ½ Ù\81Ù\87رست",
-       "prefs-editwatchlist": "Ù½Ù\8aÙ½ Ù\81Ù\87رست کي سنواريو",
-       "prefs-editwatchlist-label": "Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست ۾ درج ٿيل شين کي سنواريو:",
-       "prefs-editwatchlist-edit": "پنهنجي ٽيٽ فهرست ۾ موجود عنوان ڏسو ۽ مٽايو",
-       "prefs-editwatchlist-raw": "ÚªÚ\86Ù\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست سنواريو",
-       "prefs-editwatchlist-clear": "Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست ڊاهيو",
-       "prefs-watchlist-days": "Ù½Ù\8aÙ½ Ù\81Ù\87رست Û¾ Ú\8fÙ\8aکارڻ Ù\84اءÙ\90 Ú\8fÙ\8aÙ\86Ù\87Ù\86 :",
+       "prefs-watchlist": "Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست",
+       "prefs-editwatchlist": "Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست کي سنواريو",
+       "prefs-editwatchlist-label": "Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست ۾ درج ٿيل شين کي سنواريو:",
+       "prefs-editwatchlist-edit": "پنھنجي نظرھيٺ فھرست ۾ موجود عنوان ڏسو ۽ مٽايو",
+       "prefs-editwatchlist-raw": "ÚªÚ\86Ù\8a Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست سنواريو",
+       "prefs-editwatchlist-clear": "Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست ڊاهيو",
+       "prefs-watchlist-days": "Ù\86ظرھÙ\8aÙº Ù\81ھرست Û¾ Ú\8fÙ\8aکارڻ Ù\84اءÙ\90 Ú\8fÙ\8aÙ\86Ù\87Ù\86:",
        "prefs-watchlist-days-max": "وڌ ۾ وڌ $1 {{PLURAL:$1|ڏينهن}}",
        "prefs-watchlist-edits-max": "وڌ ۾ وڌ تعداد: 1000",
-       "prefs-watchlist-token": "Ù½Ù\8aÙ½ Ù\84سٽ جو ٽوڪن:",
+       "prefs-watchlist-token": "Ù\86ظرھÙ\8aÙº Ù\81ھرست جو ٽوڪن:",
        "prefs-misc": "متفرق",
-       "prefs-resetpass": "ڳجھو لفظ بدلايو",
+       "prefs-resetpass": "ڳجھولفظ بدلايو",
        "prefs-changeemail": "برق ٽپال پتو مِٽايو يا بدلايو",
        "prefs-setemail": "ڪو برق ٽپال پتو ڄاڻايو",
        "prefs-email": "برق ٽپال چارا",
        "prefs-dateformat": "تاريخ جو طرز",
        "prefs-advancedediting": "عمومي چارا",
        "prefs-editor": "ايڊيٽر",
-       "prefs-preview": "پيش نگاهہ",
+       "prefs-preview": "پيش نگاھ",
        "prefs-advancedrc": "متقدم چارا",
        "prefs-advancedrendering": "متقدم چارا",
        "prefs-advancedsearchoptions": "متقدم چارا",
        "prefs-displaywatchlist": "نماڪار چارا",
        "prefs-tokenwatchlist": "ٽوڪن",
        "prefs-diffs": "تفاوت",
-       "prefs-help-prefershttps": "هيءَ ترجيح توهان جي ايندڙ لاگ اِن تي عمل ۾ ايندي.",
+       "prefs-help-prefershttps": "هيءَ ترجيح توهان جي ايند داخل ٿيڻ تي عمل ۾ ايندي.",
        "userrights": "يُوزر حقن جو بندوبست",
        "userrights-lookup-user": "يوزر گروپَ سنڀاليو",
        "userrights-user-editname": "يُوزرنانءُ ڄاڻايو:",
        "group-bureaucrat": "ڪامورا",
        "group-all": "(سڀ)",
        "group-user-member": "{{GENDER:$1|يُوزر}}",
+       "group-bot-member": "{{GENDER:$1|بوٽ}}",
        "group-sysop-member": "{{GENDER:$1|منتظم}}",
+       "group-bureaucrat-member": "{{GENDER:$1|ڪامورو}}",
+       "group-suppress-member": "{{GENDER:$1|دٻائيندڙ}}",
        "grouppage-user": "{{ns:project}}:يُوزرس",
+       "grouppage-autoconfirmed": "{{ns:project}}:خودڪارنموني پڪ ڪيل رڪن",
+       "grouppage-bot": "{{ns:project}}:بوٽس",
        "grouppage-sysop": "{{ns:project}}:منتظمين",
        "grouppage-bureaucrat": "{{ns:project}}:ڪامورا",
+       "grouppage-suppress": "{{ns:project}}:دٻايو",
        "right-read": "صفحا پڙهو",
        "right-edit": "صفحا سنواريو",
        "right-createpage": "صفحا سنواريو (جيڪي مباحثي صفحا نہ آهن)",
        "right-undelete": "ڪو صفحو اڻڊاهيو",
        "right-unblockself": "ڪنهن تان بندش ختم ڪريو",
        "right-editinterface": "يُوزر باهمرُو کي سنواريو",
-       "right-viewmywatchlist": "Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ Ù\84سٽ ڏسو",
+       "right-viewmywatchlist": "Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù\86ظرھÙ\8aÙº Ù\81ھرست ڏسو",
        "right-editmyoptions": "پنهنجون ترجيحات سنواريو",
        "right-import": "ٻين وڪيز کان صفحا درآمديو",
        "right-importupload": "ڪو فائيل چاڙهي صفحا درآمديو",
        "right-override-export-depth": "5ئين اونهائيءَ تائين ڳنڍيل صفحن سميت صفحا برآمديو",
        "right-sendemail": "ٻين يوزرس ڏانهن ايميل موڪليو",
        "right-passwordreset": "ڳجھو لفظ مقرري برق ٽپالون ڏسو",
-       "right-managechangetags": "اعدادخاني ۾ [[Special:Tags|ٽيگس]] سرجيو ۽ ڊاهيو.",
+       "right-managechangetags": "[[Special:Tags|ٽيگس]] سرجيو ۽ ڊاهيو.",
        "grant-group-email": "برق ٽپال اماڻيو",
        "grant-blockusers": "يُوزرس کي بندشيو ۽ اڻبندشيو",
        "grant-createaccount": "نئون کاتو کوليو",
-       "grant-editmywatchlist": "پنهنجي ٽيٽ فهرست سنواريو",
+       "grant-editmywatchlist": "پنھنجي نظرھيٺ فھرست سنواريو",
        "grant-editprotected": "تحفظيل صفحا سنواريو",
        "grant-rollback": "صفحن ۾ ڪيل تبديليون واپس ورايو",
        "grant-sendemail": "ٻين يوزرس ڏانهن ايميل موڪليو",
        "grant-uploadfile": "نئون فائيل چاڙهيو",
        "grant-basic": "بنيادي حقَ",
        "grant-viewdeleted": "ڊَٺَلَ فائيلَ ۽ صفحا ڏسو",
-       "grant-viewmywatchlist": "Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست ڏسو",
+       "grant-viewmywatchlist": "Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست ڏسو",
        "newuserlogpage": "يوزر کاتن جو لاگ",
        "rightslog": "يُوزر حق لاگ",
        "action-read": "هي صفحو پڙهو",
        "action-rollback": "ڪنهن مخصوص صفحي تي آخري ترميم ڪندڙ يُوزر جي سمورين ترميمن کي ترت واپس ورايو",
        "action-import": "ٻي ڪنهن وڪي کان صفحا درآمد ڪريو",
        "action-importupload": "ڪو فائيل چاڙهي صفحا درآمديو",
-       "action-unwatchedpages": "اڻ ٽيٽيل صفحن جي فهرست ڏسو",
+       "action-unwatchedpages": "اڻ ڏٺل صفحن جي فھرست ڏسو",
        "action-mergehistory": "هن صفحي جي سوانح ضم ڪريو",
        "action-userrights": "سڀ يوزر حق ترميم ڪريو",
        "action-userrights-interwiki": "ٻين وڪيز جي يوزرس جا حق ترميم ڪريو",
        "action-siteadmin": "اعدادخاني کي بند ڪريو يا کوليو",
        "action-sendemail": "برق ٽپال اماڻيو",
-       "action-editmywatchlist": "پنهنجي ٽيٽ فهرست سنواريو",
-       "action-viewmywatchlist": "Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست ڏسو",
+       "action-editmywatchlist": "پنھنجي نظرھيٺ فھرست سنواريو",
+       "action-viewmywatchlist": "Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست ڏسو",
        "action-viewmyprivateinfo": "پنهنجي ذاتي معلومات ڏسو",
        "action-editmyprivateinfo": "پنهنجي ذاتي معلومات سنواريو",
        "nchanges": "$1 {{PLURAL:$1|تبديلي|تبديليون}}",
        "enhancedrc-history": "سوانح",
        "recentchanges": "تازيون تبديليون",
-       "recentchanges-legend": "تازين تبديلين جو آپشن",
+       "recentchanges-legend": "تازين تبديلين جا چارا",
        "recentchanges-summary": "هن صفحي تي وڪيءَ ۾ ڪيل تازيون ترين ترميمون ڏيکاريو.",
        "recentchanges-feed-description": "ۡهن روان رسد ۾ آيل تازيون تبديليون لهو",
        "recentchanges-label-newpage": "هن ترميم سان نئون صفحو جڙيو",
        "recentchanges-label-minor": "هيء هڪ معمولي ترميم آهي",
        "recentchanges-label-bot": "هيءُ ترميم بوٽ عمل ۾ آندي.",
        "recentchanges-label-unpatrolled": "ھن ترميم جو اڃان گشت نہ ڪيو ويو آھي",
-       "recentchanges-label-plusminus": "هن صفحي جي ماپ ۾ هيترين ٻاٺڻين جو ڦير آيو آهي",
+       "recentchanges-label-plusminus": "هن صفحي جي ماپ ۾ هيترين بائيٽس جو ڦير آيو آهي",
        "recentchanges-legend-heading": "<strong>ڪنجي:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (پڻ ڏسو [[Special:NewPages|نون صفحن جي فهرست]])",
        "recentchanges-submit": "ڏيکاريو",
        "rcnotefrom": "هيٺ {{PLURAL:$5|تبديلي آهي|تبديليون آهن}} کان <strong>$3, $4</strong> (تائين <strong>$1</strong> ) ڏيکاريل آهن.",
-       "rclistfrom": "$3 $2 کان شروع ٿيندڙ نيون تبديليون",
+       "rclistfrom": "$2، $3 کان شروع ٿيندڙ نيون تبديليون ڏيکاريو",
        "rcshowhideminor": "$1 معمولي ترميمون",
        "rcshowhideminor-show": "ڏيکاريو",
        "rcshowhideminor-hide": "لڪايو",
        "recentchangeslinked-feed": "لاڳاپيل تبديليون",
        "recentchangeslinked-toolbox": "لاڳاپيل تبديليون",
        "recentchangeslinked-title": "\"$1\" سان لاڳاپيل تبديليون",
-       "recentchangeslinked-page": "صفحي جو عنوان",
+       "recentchangeslinked-page": "صفحي جو نالو:",
        "recentchangeslinked-to": "رڳو ڄاڻايل صفحي سان ڳانڍيل صفحن ۾ ٿيل تبديليون نمايو",
        "upload": "فائيل چاڙهيو",
        "uploadbtn": "فائيل چاڙهيو",
-       "uploadnologin": "لاگ اِن ٿيل نہ آهيو",
+       "uploadnologin": "داخل ٿيل ناھيو",
        "uploadnologintext": "فائيل چاڙهڻ لاءِ $1.",
-       "uploaderror": "چاڙهہ چُڪَ",
-       "uploadlogpage": "چاڙهہ لاگ",
+       "uploaderror": "چاڙھ چُڪَ",
+       "uploadlogpage": "چاڙھ لاگ",
        "filename": "فائيل نانءُ",
        "filedesc": "خلاصو",
        "fileuploadsummary": "خلاصو:",
        "upload-http-error": "ايڇ ٽي ٽي پي جي چُڪَ ٿي آهي: $1",
        "upload-dialog-title": "فائيل چاڙهيو",
        "upload-dialog-button-cancel": "رد",
+       "upload-dialog-button-back": "واپس",
        "upload-dialog-button-done": "ٿي ويو",
        "upload-dialog-button-save": "سانڍيو",
        "upload-dialog-button-upload": "چاڙهيو",
        "filedelete-maintenance-title": "فائيل ڊهي نہ سگھيو",
        "mimesearch": "مائيم ڳولا",
        "download": "اتاريو",
-       "unwatchedpages": "اڻ ٽيٽيل صفحا",
+       "unwatchedpages": "اڻ ڏٺل صفحا",
        "listredirects": "چورڻن جي فهرست",
        "unusedtemplates": "اڻ استعماليل سانچا",
        "unusedtemplateswlh": "ٻيا ڳنڍڻا",
        "withoutinterwiki": "ڪنهن بہ ٻي ٻوليءَ سان نہ ڳنڍيل صفحا",
        "withoutinterwiki-summary": "هيٺيان صفحا ڪنهن بہ ٻي ٻوليءَ ۾ ساڳي صفحي سان ڳنڍيل نہ آهن.",
        "withoutinterwiki-legend": "اڳياڙي",
-       "withoutinterwiki-submit": "نمايو",
+       "withoutinterwiki-submit": "ڏيکاريو",
        "fewestrevisions": "گھٽانگھٽ ترميميل صفحا",
        "nbytes": "$1 {{PLURAL:$1|بائيٽ|بائيٽس}}",
        "ncategories": "$1 {{PLURAL:$1|زمرو|زمرا}}",
        "apisandbox-dynamic-parameters-add-label": "نيمپيما شامل ڪريو",
        "apisandbox-dynamic-parameters-add-placeholder": "نيمپيما نانءُ",
        "apisandbox-results": "نتيجا",
+       "apisandbox-continue": "جاري رکو",
        "booksources": "ڪتابي وسيلا",
        "booksources-search-legend": "ڪتابي ذريعن جي ڳولا ڪريو",
        "booksources-search": "ڳوليو",
        "sp-deletedcontributions-contribs": "ڀاڱيداريون",
        "linksearch-ns": "نانءُپولار",
        "linksearch-ok": "ڳوليو",
-       "listusers-submit": "نمايو",
+       "listusers-submit": "ڏيکاريو",
        "listusers-noresult": "ڪو بہ يُوزر نہ لڌو",
        "listusers-blocked": "(بندشيل)",
        "activeusers": "سرگرم يُوزرس جي فهرست",
        "trackingcategories-nodesc": "ڪا به تشريح موجود نه آهي.",
        "trackingcategories-disabled": "زمرو ناقابلِ ڪار بڻايل آهي.",
        "emailuser": "هن يوزر کي برق ٽپال اماڻيو",
+       "emailuser-title-target": "ھن {{GENDER:$1|يوزر}} ڏانھن برقٽپال موڪليو",
        "emailuser-title-notarget": "يُوزر ڏانهن برق ٽپال اماڻيو",
        "usermaildisabled": "يوزر ايميل ناقابلِ ڪار بڻيل",
        "usermaildisabledtext": "توهان هن وڪي تي ٻين يوزرس ڏانهن ايميل نٿا موڪلي سگھو",
        "emailccme": "نياپي جو پرت مون کي برق ٽپال ڪريو.",
        "emailsent": "برق ٽپال اماڻجي چڪي",
        "emailsenttext": "توهان جو برق ٽپال نياپو اماڻجي چڪو آهي.",
-       "watchlist": "Ù½Ù\8aÙ½ Ù\81Ù\87رست",
+       "watchlist": "Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست",
        "mywatchlist": "نظرھيٺ فھرست",
-       "addwatch": "Ù½Ù\8aÙ½ Ù\81Ù\87رست ۾ شامل ڪريو",
-       "addedwatchtext": "صÙ\81Ø­Ù\88\"[[:$1]]\" Ø§Ù\86 Ø¬Ù\8a Ø¨Ø­Ø« Ù\88ارÙ\88 ØµÙ\81Ø­Ù\88 Ø§Ù\88Ù\87اÙ\86 Ø¬Ù\8a [[Special:Watchlist|Ù½Ù\8aÙ½ Ù\81Ù\87رست]] ۾ شامل ڪيو ويو آهي.",
-       "removewatch": "Ù½Ù\8aÙ½ Ù\81Ù\87رست Ù\85اÙ\86 Ø®Ø§Ø±Ø¬ ÚªØ±يو",
-       "removedwatchtext": "صÙ\81Ø­Ù\88 Ø¨Ø¹Ù\86Ù\88اÙ\86 \"[[:$1]]\" ØªÙ\88Ù\87اÙ\86 Ø¬Ù\8a [[Special:Watchlist|Ù½Ù\8aÙ½ Ù\81Ù\87رست]] مان هٽي چڪو آهي.",
-       "removedwatchtext-short": "\"صÙ\81Ø­Ù\88 Ø¨Ø¹Ù\86Ù\88اÙ\86 \"$1\" ØªÙ\88Ù\87اÙ\86 Ø¬Ù\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست مان هٽي چڪو آهي.\"",
+       "addwatch": "Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست ۾ شامل ڪريو",
+       "addedwatchtext": "صÙ\81Ø­Ù\88\"[[:$1]]\" Ø§Ù\86 Ø¬Ù\8a Ø¨Ø­Ø« Ù\88ارÙ\88 ØµÙ\81Ø­Ù\88 Ø§Ù\88Ù\87اÙ\86 Ø¬Ù\8a [[Special:Watchlist|Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست]] ۾ شامل ڪيو ويو آهي.",
+       "removewatch": "Ù\86ظرھÙ\8aÙº Ù\81ھرست Ù\85اÙ\86 Ú¾Ù½Ø§يو",
+       "removedwatchtext": "صÙ\81Ø­Ù\88 Ø¨Ø¹Ù\86Ù\88اÙ\86 \"[[:$1]]\" ØªÙ\88Ù\87اÙ\86 Ø¬Ù\8a [[Special:Watchlist|Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست]] مان هٽي چڪو آهي.",
+       "removedwatchtext-short": "\"صÙ\81Ø­Ù\88 Ø¨Ø¹Ù\86Ù\88اÙ\86 \"$1\" ØªÙ\88Ù\87اÙ\86 Ø¬Ù\8a Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست مان هٽي چڪو آهي.\"",
        "watch": "نظرھيٺ رکو",
-       "watchthispage": "Ù\87Ù\8aØ¡Ù\8f ØµÙ\81Ø­Ù\88 Ù½Ù\8aÙ½Ù\8aو",
-       "unwatch": "اڻ ٽيٽيو",
-       "unwatchthispage": "Ù½Ù\8aÙ½ڻ ڇڏيو",
+       "watchthispage": "Ù\87Ù\8aØ¡Ù\8f ØµÙ\81Ø­Ù\88 Ù\86ظرھÙ\8aÙº Ø±Ú©و",
+       "unwatch": "نظرھيٺ نہ رکو",
+       "unwatchthispage": "Ù\86ظرھÙ\8aÙº Ø±Ú©ڻ ڇڏيو",
        "notanarticle": "غير موادي صفحو",
        "watchlist-details": "{{PLURAL:$1|$1 صفحو|$1 صفحا}} توهان جي ٽيٽ فهرست، ڳالھ ٻولھ جا صفحا الڳ شمار نٿا ٿين.",
        "wlshowlast": "گذريل $1 ڪلاڪ $2 ڏينهن ڏيکاريو",
        "wlshowhideliu": "کاتيدار يُوزرس",
        "wlshowhideanons": "گمنام يُوزرس",
        "wlshowhidemine": "منهنجون ترميمون",
-       "watchlist-options": "زيرِ نظر فهرست جا چارا",
-       "watching": "Ù½Ù\8aÙ½Ù\8aندي...",
-       "unwatching": "اڻ ٽيٽيندي...",
+       "watchlist-options": "نظرھيٺ فھرست جا چارا",
+       "watching": "Ù\86ظرھÙ\8aÙº Ø±Ú©ندي...",
+       "unwatching": "نظرھيٺان ڪڍندي...",
        "enotif_reset": "سڀ گھميل صفحن تي نشان لڳايو",
        "enotif_impersonal_salutation": "{{SITENAME}} يُوزر",
        "enotif_lastdiff": "هي تبديلي ڏسڻ لاءِ $1 ڏسو",
        "protect-expiry-options": "1 ڪلاڪ:1 hour,1 ڏينهن:1 day,1 هفتو:1 week,2 هفتو:2 weeks,1 مهينا:1 month,3 مهينا:3 months,6 مهينا:6 months,1 سال:1 year,اڻ کٽ:infinite",
        "restriction-type": "اجازتنامو:",
        "restriction-level": "روڪ سطح:",
-       "pagesize": "(ٻاٽڻيون)",
+       "pagesize": "(بائيٽس)",
        "restriction-edit": "سنواريو",
        "restriction-move": "چوريو",
        "restriction-create": "سرجيو",
        "sp-contributions-newbies": "صرف نون کاتن جون ڀاڱيداريون ڏيکاريو",
        "sp-contributions-newbies-sub": "نون کاتن لاءِ",
        "sp-contributions-newbies-title": "نون کاتن جي لاءِ يوزر جون ڀاڱيداريون",
-       "sp-contributions-blocklog": "بÙ\86سش لاگ",
+       "sp-contributions-blocklog": "بÙ\86دش لاگ",
        "sp-contributions-deleted": "ڊاٿل {{GENDER:$1|يوزر}} ڀاڱيداريون",
        "sp-contributions-uploads": "چاڙھَ",
        "sp-contributions-logs": "لاگس",
-       "sp-contributions-talk": "ڳالھہ",
+       "sp-contributions-talk": "ڳالھ",
        "sp-contributions-userrights": "يُوزر حقن جي سنڀال",
        "sp-contributions-search": "ڀاڱيدارين لاءِ ڳولا ڪريو",
        "sp-contributions-username": "آءِپي پتو يا يوزرنانءُ:",
        "unlockbtn": "اعدادخاني کي کوليو",
        "move-page": "$1 چوريو",
        "move-page-legend": "صفحو چوريو",
-       "movepagetext": "هيٺيون فارم استعمال ڪندي ڪنهن صفحي کي نئون عنوان ڏئي سگھجي ٿو، جنهن سان سمورو صفحو نئين عنوان ڏانهن هليو ويندو. \nاڳوڻو عنوان نئين عنوان ڏانهن چورڻو بنجي ويندو. \nتوهان  چورڻن کي سنواري سگھو ٿا جيڪي اصل عنوان ڏانهن خودبخود اشارو ڪن ٿا.\nIf you choose not to, be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].\nان ڳالهه جي پڪ ڪرڻ ذميواري توهان تي آهي ته ڳنڍڻا اتي ئي وٺي وڃن ٿا جتي انهن کي وٺي وڃڻ گھرجي.\n\nياد رکندا ته جيڪڏهن نئين عنوان سان اڳي ئي ڪو مضمون موجود آهي ته پوءِ صفحو '''نه''' چوريو ويندو، سوا ان جي ته موجوده صفحو محظ خالي آهي يا ڪا به سوانح نه رکندڙ ڪو چورڻو آهي.\n\n<strong>خبردار!</strong>\nاها هڪ مقبول صفحي لاءِ ڪا غير متوقه ۽ انتهائي اڻوڻندڙ تبديلي ثابت ٿي سگھي ٿي؛ براءِ مهرباني اڳتي وڌڻ کان اڳ پڪ ڪندا ته توهان اها تبديلي آڻڻ جي نتيجن کان چڱيءَ ريت واقف آهيو.",
+       "movepagetext": "هيٺيون فارم استعمال ڪندي ڪنهن صفحي کي نئون عنوان ڏئي سگھجي ٿو، جنهن سان سمورو صفحو نئين عنوان ڏانهن هليو ويندو. \nاڳوڻو عنوان نئين عنوان ڏانهن چورڻو بنجي ويندو. \nتوهان  چورڻن کي سنواري سگھو ٿا جيڪي اصل عنوان ڏانهن خودبخود اشارو ڪن ٿا.\nIf you choose not to, be sure to check for [[Special:DoubleRedirects|double]] or [[Special:BrokenRedirects|broken redirects]].\nان ڳالهه جي پڪ ڪرڻ ذميواري توهان تي آهي ته ڳنڍڻا اتي ئي وٺي وڃن ٿا جتي انهن کي وٺي وڃڻ گھرجي.\n\nياد رکندا ته جيڪڏهن نئين عنوان سان اڳي ئي ڪو مضمون موجود آهي ته پوءِ صفحو '''نه''' چوريو ويندو، سوا ان جي ته موجوده صفحو محظ خالي آهي يا ڪا به سوانح نه رکندڙ ڪو چورڻو آهي.\n\n<strong>نوٽ!</strong>\nاها هڪ مقبول صفحي لاءِ ڪا غير متوقه ۽ انتهائي اڻوڻندڙ تبديلي ثابت ٿي سگھي ٿي؛ براءِ مهرباني اڳتي وڌڻ کان اڳ پڪ ڪندا ته توهان اها تبديلي آڻڻ جي نتيجن کان چڱيءَ ريت واقف آهيو.",
        "movepagetalktext": "جيڪڏهن توهان هن خاني کي نشان لڳائيندئو، واسطيدار مباحثي صفحو پاڻ ئي چوريو ويندو ماسواءِ اتي ڪو اڳ ئي ڪو غيرخالي مباحثي صفحو موجود هجي.\n\nان صورت ۾، جيڪڏهن توهان چاهيو ته صفحي کي پاڻ چوري يا ضم ڪري سگھو ٿا.",
        "movenotallowed": "توهان کي صفحا چورڻ جي اجازت حاصل ڪانهي.",
        "movenotallowedfile": "توهان کي فائيلس چورڻ جي اجازت حاصل ڪانهي.",
        "tooltip-ca-talk": "موادي صفحي تي بحث",
        "tooltip-ca-edit": "هيءُ صفحو سنواريو",
        "tooltip-ca-addsection": "نئون سيڪشن شروع ڪريو",
-       "tooltip-ca-viewsource": "هيءُ صفحو تحفظيل آهي. توهان ان جو ڪوڊ ڏسي سگھو ٿا.",
+       "tooltip-ca-viewsource": "هيءُ صفحو تحفظيل آهي. توهان ان جو ذريعو ڏسي سگھو ٿا.",
        "tooltip-ca-history": "هن صفحي جا اڳوڻا ڀيرا",
        "tooltip-ca-protect": "هيءُ صفحو تحفظيو",
        "tooltip-ca-delete": "هيءُ صفحو ڊاهيو",
        "tooltip-ca-move": "هيءُ صفحو چوريو",
        "tooltip-ca-watch": "هيءُ صفحو پنهنجي نظرھيٺ فھرست ۾ شامل ڪريو",
-       "tooltip-ca-unwatch": "Ù\87Ù\8aØ¡Ù\8f ØµÙ\81Ø­Ù\88 Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست تان هٽايو",
+       "tooltip-ca-unwatch": "Ù\87Ù\8aØ¡Ù\8f ØµÙ\81Ø­Ù\88 Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست تان هٽايو",
        "tooltip-search": "{{SITENAME}} ۾ ڳوليو",
        "tooltip-search-go": "تز ان ئي نالي سان ڪو صفحو موجود آهي تہ کوليو",
        "tooltip-search-fulltext": "هن متن لاءِ صفحا ڳوليو",
        "tooltip-ca-nstab-help": "امدادي صفحو ڏسو",
        "tooltip-ca-nstab-category": "هن زمري جو صفحو ڏسو",
        "tooltip-minoredit": "ان کي هڪ معمولي ترميم ڄاڻايو",
-       "tooltip-save": "پنهنجون ڪيل تبديليون سانڍيو",
+       "tooltip-save": "پنهنجون تبديليون سانڍيو",
        "tooltip-preview": "پنھنجي تبديلين تي نگاھ وجھو. براءِ مھرباني اھو سانڍڻ کان اڳ ڪندا.",
-       "tooltip-diff": "Ù¾Ù\86Ù\87Ù\86جÙ\88Ù\86 ÚªÙ\8aÙ\84 ØªØ¨Ø¯Ù\8aÙ\84Ù\8aÙ\88Ù\86 Ú\8fسÙ\88.",
+       "tooltip-diff": "Ù\84کت Û¾ ÚªÙ\8aÙ\84 Ù¾Ù\86Ù\87Ù\86جÙ\88Ù\86 ØªØ¨Ø¯Ù\8aÙ\84Ù\8aÙ\88Ù\86 Ú\8fسÙ\88",
        "tooltip-compareselectedversions": "هن صفحي جن ٻن چونڊيل پرتن درميان تفاوت ڏسو.",
-       "tooltip-watch": "Ù\87Ù\8aØ¡Ù\8f ØµÙ\81Ø­Ù\88 Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست ۾ شامل ڪريو",
+       "tooltip-watch": "Ù\87Ù\8aØ¡Ù\8f ØµÙ\81Ø­Ù\88 Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست ۾ شامل ڪريو",
        "tooltip-rollback": "\"واپس پرايو\" هن صفحي ۾ پوئين ڀاڱيدار جي ڪيل ترميم (ترميمن) کي هڪ ڪلڪ سان اڻڪري ٿو.",
        "tooltip-summary": "ننڍو خلاصو ڏيو",
        "anonymous": "گمنام {{PLURAL:$1|يوزر|يوزرس}} جو {{SITENAME}}",
        "confirmemail_subject": "{{SITENAME}} برق ٽپال پتي جي تصديق",
        "recreate": "ورسرجيو",
        "confirm-watch-button": "ٺيڪ",
-       "confirm-watch-top": "Ù\87Ù\8aØ¡Ù\8f ØµÙ\81Ø­Ù\88 Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù½Ù\8aÙ½ Ù\81Ù\87رست ۾ شامل ڪندا؟",
+       "confirm-watch-top": "Ù\87Ù\8aØ¡Ù\8f ØµÙ\81Ø­Ù\88 Ù¾Ù\86Ù\87Ù\86جÙ\8a Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست ۾ شامل ڪندا؟",
        "confirm-unwatch-button": "ٺيڪ",
        "confirm-unwatch-top": "هيءُ صفحو پنهنجي ٽيٽ فهرست مان هٽائيندا؟",
        "quotation-marks": "\"$1\"",
        "table_pager_limit_label": "وَٿُون في صفحو:",
        "table_pager_limit_submit": "ھلو",
        "table_pager_empty": "ڪو بہ نتيجو نہ مليو",
-       "watchlistedit-normal-title": "Ù½Ù\8aÙ½ Ù\81Ù\87رست کي سنواريو",
+       "watchlistedit-normal-title": "Ù\86ظرھÙ\8aÙº Ù\81Ú¾رست کي سنواريو",
        "watchlistedit-raw-titles": "عنوانَ:",
        "watchlistedit-clear-titles": "عنوانَ:",
        "watchlisttools-view": "لاڳاپيل تبديليون ڏسو",
index 2cb5da0..5105d79 100644 (file)
        "category-file-count-limited": "ဢၼ်ပဵၼ် {{PLURAL:$1|ၾၢႆႇၼႆႉ|$1 ၾၢႆႇၸိူဝ်းၼႆႉ}} မီးဝႆႉတီႈၼႂ်း တွၼ်ႈၵၼ်ၼႆ့။",
        "listingcontinuesabbrev": "သိုပ်ႇ",
        "index-category": "ၼႃႈလိၵ်ႈ ၸိူဝ်းၸီ့ဝႆ့",
-       "noindex-category": "ၼႃႈလိၵ်ႈ ၸိူဝ်းၸီႉဝႆႉ",
+       "noindex-category": "ၼႃႈလိၵ်ႈၸိူဝ်း ဢမ်ႇမီး တူဝ်ၸီႉ",
        "broken-file-category": "ၼႃႈလိၵ်ႈၸိူဝ်းမီးဝႆႉ ႁဵင်းၵွင်ႉၾၢႆႇဢၼ်လူ့လႅဝ်",
        "about": "လွင်ႈတၢင်း",
        "article": "ၼမ်းၼႂ်း",
        "minoredit": "ပဵၼ်လွင်ႈမူၼ်ႉမႄးဢိတ်းဢီႈ",
        "watchthis": "တူၺ်းၼႃႈလိၵ်ႈၼႆႉ",
        "savearticle": "ၵဵပ်းသိမ်း ၼႃႈလိၵ်ႈ",
+       "savechanges": "သိမ်းလွင်ႈလႅၵ်ႈလၢႆႈ",
        "publishpage": "ပိုၼ်ဢွၵ်ႇ ၼႃႈလိၵ်ႈ",
+       "publishchanges": "ပိုတ်ႇဢွၵ်ႇ လွင်ႈလႅၵ်ႈလၢႆႈ",
        "preview": "တူၺ်းလူင်ႈၼႃႈ",
        "showpreview": "ၼႄတူဝ်ယၢင်ႇ",
        "showdiff": "ၼႄလွင်ႈလႅၵ်ႈလၢႆႈ",
        "rightslogtext": "ဢၼ်ၼႆႉပဵၼ် သဵၼ်ႈမၢႆ လွင်ႈလႅၵ်ႈလၢႆႈ သုၼ်ႈလႆႈ ၽူႈၸႂ်ႉတိုဝ်း",
        "action-read": "လူၼႃႈလိၵ်ႈၼႆႉ",
        "action-edit": "မူၼ်ႉမႄး ၼႃႈလိၵ်ႈၼႆႉ",
-       "action-createpage": "á\81µá\80±á\82\83á\82\88á\80\9eá\81¢á\80\84á\80ºá\82\88 á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88",
-       "action-createtalk": "ၵေႃႇသၢင်ႈ ၼႃႈလိၵ်ႈ ဢုပ်ႇဢူဝ်းၵၼ်",
+       "action-createpage": "á\81µá\80±á\82\83á\82\87á\80\9eá\81¢á\80\84á\80ºá\82\88 á\81¼á\82\83á\82\88á\80\9cá\80­á\81µá\80ºá\82\88á\81¼á\82\86á\82\89",
+       "action-createtalk": "ၵေႃႇသၢင်ႈ ၼႃႈလိၵ်ႈ ဢုပ်ႇဢူဝ်းၵၼ်ဢၼ်ၼႆႉ",
        "action-createaccount": "ၵေႃႇသၢင်ႈ ဢၶွင်ႉၽူႈၸႂ်ႉတိုဝ်း ဢၼ်ၼႆႉ",
        "action-autocreateaccount": "ၵေႃႇသၢင်ႈ ဢၶွင်ႉၽူႈၸႂ်ႉတိုဝ်း ၽၢႆႇၼွၵ်ႈ ႁင်းတူဝ်",
        "action-history": "တူၺ်း ပိုၼ်းၼႃႈလိၵ်ႈဢၼ်ၼႆႉ",
        "unusedtemplates": "လွၵ်းပိူင် ဢၼ်ဢမ်ႇၸႂ်ႉဝႆႉ",
        "unusedtemplateswlh": "ႁဵင်းၵွင်ႉ တၢင်ႇၸိူဝ်း",
        "randompage": "ဢဝ်ၼႃႈလိၵ်ႈသၢင်ႇထုၵ်ႇဝႃႈ",
-       "randompage-nopages": "á\80\90á\81¢á\80\84á\80ºá\80¸á\81½á\81¢á\82\86á\82\87á\80\9cá\80\84á\80ºၼၼ်ႉ ဢမ်ႇမီးဝႆႉ ၼႃႈလိၵ်ႈသင်\n{{PLURAL:$2|လွၵ်းၸိုဝ်ႈ|လွၵ်းၸိုဝ်ႈ}}: $1.",
+       "randompage-nopages": "á\80\90á\81¢á\80\84á\80ºá\80¸á\81½á\81¢á\82\86á\82\87á\80\90á\82\82á\80ºá\82\88ၼၼ်ႉ ဢမ်ႇမီးဝႆႉ ၼႃႈလိၵ်ႈသင်\n{{PLURAL:$2|လွၵ်းၸိုဝ်ႈ|လွၵ်းၸိုဝ်ႈ}}: $1.",
        "randomincategory": "ၼႃႈလိၵ်ႈၵမ်ႉသၢင်ႇတေႃႇ ၵႃႈတီႈၼႂ်း လိူင်ႈ",
        "randomincategory-invalidcategory": "\"$1\" ၼႆႉ ပဵၼ်ၸိုဝ်ႈလိူင်ႈ ဢၼ်ဢမ်ႇပဵၼ်လႆႈ။",
        "randomincategory-nopages": "မၼ်းဢမ်ႇမီးဝႆ ၼႃႈလိၵ်ႈသင် ၵႃႈတီႈၼႂ်း [[:Category:$1|$1]] လိူင်ႈ။",
        "ninterwikis": "$1 {{PLURAL:$1|ဝီႇၶီႇၽၢႆႇၼႂ်း|ဝီႇၶီႇၸိူဝ်းၽၢႆႇၼႂ်း}}",
        "nlinks": "$1 {{PLURAL:$1|ႁဵင်းၵွင်ႉ|ႁဵင်းၵွင်ႉၼမ်}}",
        "nmembers": "$1 {{PLURAL:$1|member|ၽူႈၶဝ်ႈၸုမ်း}}",
-       "nmemberschanged": "$1 {{PLURAL:$1|member|ၽူႈၶဝ်ႈၸုမ်း}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$1|member|ၽူႈၶဝ်ႈၸုမ်း}}",
        "nrevisions": "$1 {{PLURAL:$1|​ၶေႃႈၶူၼ်ႉလူ|ၶေႃႈၶူၼ်ႉလူ}}",
        "nimagelinks": "ၸႂ်ႈဝႆႉ တီႈ $1 {{PLURAL:$1|page|ၼႃႈလိၵ်ႈ}}",
        "ntransclusions": "ၸႂ်ႉဝႆႉၵႃႈတီႈၼိူဝ် $1 {{PLURAL:$|page|ၼႃႈလိၵ်ႈ}}",
        "notargettext": "ၸဝ်ႈၵဝ်ႇ ဢမ်ႇလႆႈမၵ်းမၼ်ႈဝႆႉ ၼႃႈလိၵ်ႈတီႈယိူင်း ဢမ်ႇၼၼ် ၽူႈၸႂ်ႉတိုဝ်း တွၼ်ႈတႃႇႁဵတ်း ၼႃႈၵၢၼ်ၼႆႉ။",
        "nopagetitle": "ဢမ်ႇမီး ၼႃႈလိၵ်ႈ တီႈယိူင်းၸူး",
        "pager-older-n": "{{PLURAL:$1|older 1|ဢၼ်ၵဝ်ႇၵဝ်ႇ $1}}",
+       "apisandbox-reset": "ၽဵဝ်ႈလၢင်ႉ",
+       "apisandbox-retry": "ၶိုၼ်းၶတ်းၸႂ်တူၺ်း",
+       "apisandbox-loading": "တိုၵ်ႉပိုတ်ႇ လွၼ်ႉၶၢဝ်ႇတႃႇ module APL \"$1\"...",
+       "apisandbox-load-error": "ၽွင်းမိူဝ်ႈတိုၵ်ႉပိုတ်ႇ လွၼ်ႉၶၢဝ်ႇ module API \"$1\" : $2 ၼၼ်ႉ မၼ်းမီးဝႆႉ လွင်ႈၽိတ်းပိူင်ႈ",
+       "apisandbox-no-parameters": "​API module ဢၼ်ၼႆႉ မၼ်းဢမ်ႇမီးဝႆႉ ပႃႇရႃႇမီႇတႃႇ။",
+       "apisandbox-helpurls": "ႁဵင်းၵွင်ႉ တၢင်းၸွႆႈထႅမ်",
+       "apisandbox-examples": "တူဝ်ယၢင်ႇ",
+       "apisandbox-dynamic-parameters": "ပႃႇရႃႇမီႇတႃႇ ဢၼ်ၵႅမ်",
+       "apisandbox-dynamic-parameters-add-label": "ထႅမ်သႂ်ႇ ပႃႇရႃႇမီႇတႃႇ :",
+       "apisandbox-dynamic-parameters-add-placeholder": "ၸိုဝ်ႈ ပႃႇရႃႇမီႇတႃႇ",
+       "apisandbox-dynamic-error-exists": "ပႃႇရႃႇမီႇတႃႇ ဢၼ်ပၼ်ၸိုဝ်ႈဝႆႉဝႃႈ \"$1\" ၼၼ်ႉ မၼ်းမီးဝႆႉယဝ်ႉ။",
+       "apisandbox-deprecated-parameters": "ပႃႇရႃႇမီႇတႃႇ ဢၼ်ထုၵ်ႇဝႃႈၽိတ်းဝႆႉ",
+       "apisandbox-fetch-token": "ထႅမ်မႂ်ၶပ်ႉၵႂႃႇ ႁင်းၵူၺ်း",
+       "apisandbox-submit-invalid-fields-title": "လွၵ်းမၢင်ၸိူဝ်းၼႆႉ ၽိတ်းပိူင်ႈဝႆႉ",
+       "apisandbox-submit-invalid-fields-message": "ၶႅၼ်းတေႃႈ ၶိုၼ်းမႄးထတ်းတူၺ်း လွၵ်းၸိူဝ်းပၼ်မၢႆဝႆႉသေ ၶိုၼ်းသိုပ်ႇ ၶတ်းၸႂ်တူၺ်းထႅင်ႈလႄႈ။",
+       "apisandbox-results": "ၽွၼ်းလႆႈ",
+       "apisandbox-sending-request": "တိုၵ်ႉသူင်ႇ ၶေႃႈတုၵ်းယွၼ်း API...",
+       "apisandbox-loading-results": "တိုၵ်ႉႁပ်ႉဢဝ် ၽွၼ်းလႆႈ API...",
+       "apisandbox-results-error": "ၽွင်းတိုၵ်ႉပိုတ်ႇ ​ၶေႃႈတွပ်ႇတႃႇ ၵၢၼ်ၸွပ်ႇႁႃ API : $1 ၼၼ်ႉ လႆႈမီး လွင်ႈၽိတ်းပိူင်ႈဝႆႉ။",
+       "apisandbox-request-url-label": " URL ဢၼ်တုၵ်းယွၼ်း :",
+       "apisandbox-request-time": "ၶၢဝ်းယၢမ်းတုၵ်းယွၼ်း : {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "မႂ်ၶပ်ႉမၢၼ်ႇမႅၼ်ႈ လႄႈ ၶိုၼ်းမၵ်းမၼ်ႈ",
+       "apisandbox-results-fixtoken-fail": "တႃႇႁွင်ႉဢဝ် မႂ်ၶပ်ႉ \"$1\" ၼၼ်ႉ ဢမ်ႇၶႅမ်ႉလႅပ်ႉ",
+       "apisandbox-alert-page": "လွၵ်းၸိူဝ်းဢၼ်မီးတီႈၼိူဝ် ၼႃႈလိၵ်ႈၼႆႉ မၼ်းဢမ်ႇၸႂ်ႉလႆႈ",
+       "apisandbox-alert-field": "ၵႃႈၶၼ်တွၼ်ႈတႃႇ လွၵ်းဢၼ်ၼႆႉ မၼ်းဢမ်ႇၸႂ်ႉလႆႈ",
+       "apisandbox-continue": "သိုပ်ႇၼႃႈ",
+       "apisandbox-continue-clear": "ၽဵဝ်ႈလၢင်ႉ",
        "booksources": "ငဝ်ႈငႃႇ ပပ်ႉလိၵ်ႈ",
        "booksources-search-legend": "ၶူၼ်ႉႁႃတႃႇ ငဝ်ႇငႃႇပပ်ႉ",
        "booksources-search": "ၶူၼ်ႉႁႃ",
+       "booksources-invalid-isbn": "ISBN ဢၼ်ပၼ်ဝႆႉၼၼ်ႉ မၼ်းဢွၵ်ႇၼႄဝႃႈ ဢမ်ႇၸႂ်ႈလႆႈ၊ ၵူတ်ႇတူၺ်း လွင်ႇထုတ်ႇဢဝ် ၵႃႈတီႈ ငဝ်ႈတိုၼ်း မၼ်းၼၼ်ႉလႄႈ။",
+       "specialloguserlabel": "တူဝ်​ႁဵတ်းသၢင်ႈ :",
+       "speciallogtitlelabel": "တီႈယိူင်း (ႁူဝ်ၶေႃႈ ဢမ်ႇၼၼ် {{ns:user}}: ၸိုဝ်ႈၽူႈၸႂ်ႉတိုဝ်း တႃႇ ၽူႈၸႂ်ႉတိုဝ်း):",
        "log": "သၢႆမၢႆ",
+       "logeventslist-submit": "ၼႄ",
+       "all-logs-page": "သဵၼ်ႈမၢႆၵူၼ်းတင်းၼမ် တင်းမူတ်း",
+       "logempty": "ဢမ်ႇငမ်ႇၵၼ်တင်း တီႈၼႂ်းသဵၼ်ႈမၢႆ",
+       "log-title-wildcard": "ဢဝ်လိၵ်ႈၸိူဝ်းၼႆႉသေ တႄႇသွၵ်ႈႁႃ ႁူဝ်ၶေႃႈ",
+       "showhideselectedlogentries": "လႅၵ်ႈလၢႆႈ ၵၢၼ်ႁၼ်လႆႈ ၶွင် ၶေႃႈၶူၼ်ႉဢၢၼ်ႇ ၸိူဝ်းလိူၵ်ႈဝႆႉ",
+       "log-edit-tags": "မႄးထတ်ႈမႂ်တိင် ၶွင် ၶေႃႈၶူၼ်ႉဢၢၼ်ႇ ၸိူဝ်းလိူၵ်ႈဝႆႉ",
+       "checkbox-select": "လိူၵ်ႈ : $1",
        "checkbox-all": "တင်းမူတ်း",
        "checkbox-none": "ဢမ်ႇမီးသင်",
        "checkbox-invert": "ပိၼ်ႈၽိုၼ်",
index 863a822..24230f6 100644 (file)
@@ -62,7 +62,7 @@
        "tog-enotifminoredits": "Upozorniť ma e-mailom aj na drobné úpravy stránok a súborov",
        "tog-enotifrevealaddr": "Zobraziť moju emailovú adresu v emailoch s upozornením",
        "tog-shownumberswatching": "Zobraziť počet používateľov sledujúcich stránku",
-       "tog-oldsig": "Súčasný podpis:",
+       "tog-oldsig": "Váš súčasný podpis:",
        "tog-fancysig": "Považovať podpisy za wikitext (bez automatických odkazov)",
        "tog-uselivepreview": "Používať živý náhľad",
        "tog-forceeditsummary": "Upozoriť ma, keď nevyplním zhrnutie úprav",
        "newwindow": "(otvorí v novom okne)",
        "cancel": "Zrušiť",
        "moredotdotdot": "Viac...",
-       "morenotlisted": "Tento zoznam nie je úplný.",
+       "morenotlisted": "Tento zoznam nemusí byť úplný.",
        "mypage": "Stránka",
        "mytalk": "Diskusia",
        "anontalk": "Diskusia",
        "searchprofile-advanced-tooltip": "Hľadať vo vymenovaných menných priestoroch",
        "search-result-size": "$1 ({{PLURAL:$2|1 slovo|$2 slová|$2 slov}})",
        "search-result-category-size": "{{PLURAL:$1|1 člen|$1 členovia|$1 členov}} ({{PLURAL:$2|1 podkategória|$2 podkategórie|$2 podkategórií}}, {{PLURAL:$3|1 súbor|$3 súbory|$3 súborov}})",
-       "search-redirect": "(presmerovanie $1)",
+       "search-redirect": "(presmerovanie $1)",
        "search-section": "(sekcia $1)",
        "search-category": "($1 kategória)",
        "search-file-match": "(výskyt v obsahu súboru)",
        "prefs-watchlist-token": "Token zoznamu sledovaných?",
        "prefs-misc": "Rôzne",
        "prefs-resetpass": "Zmeniť heslo",
-       "prefs-changeemail": "Zmeniť email",
+       "prefs-changeemail": "Zmeniť alebo odstrániť e-mailovú adresu",
        "prefs-setemail": "Nastaviť emailovú adresu",
        "prefs-email": "Možnosti e-mailu",
        "prefs-rendering": "Vzhľad",
        "htmlform-cloner-create": "Pridať ďalšie",
        "htmlform-cloner-delete": "Odstrániť",
        "htmlform-cloner-required": "Je povinná najmenej jedna hodnota.",
+       "htmlform-date-placeholder": "RRRR-MM-DD",
+       "htmlform-time-placeholder": "HH:MM:SS",
+       "htmlform-datetime-placeholder": "RRRR-MM-DD HH:MM:SS",
        "logentry-delete-delete": "$1 zmazal stránku $3",
        "logentry-delete-restore": "$1 obnovil stránku $3",
        "logentry-delete-event": "$1 zmenil viditeľnosť {{PLURAL:$5|záznamu udalostí|$5 záznamov udalostí}} k stránke $3: $4",
        "feedback-thanks": "Ďakujeme. Váš komentár bol odoslaný na stránku „[$2 $1]“.",
        "feedback-thanks-title": "Ďakujeme",
        "feedback-useragent": "Prehliadač:",
-       "searchsuggest-search": "Hľadať",
+       "searchsuggest-search": "Hľadať {{SITENAME}}",
        "searchsuggest-containing": "obsahuje...",
        "api-error-autoblocked": "Vaše IP adresa bola automaticky zablokovaná, pretože ju používal zablokovaný používateľ.",
        "api-error-badaccess-groups": "Nemáte oprávnenie nahrávať súbory na tejto wiki.",
        "expand_templates_generate_xml": "Zobraziť strom XML",
        "expand_templates_generate_rawhtml": "Zobraziť surové HTML",
        "expand_templates_preview": "Náhľad",
-       "pagelanguage": "Voľba jazyka stránky",
+       "pagelanguage": "Zmeniť jazyk stránky",
        "pagelang-name": "Stránka",
        "pagelang-language": "Jazyk",
        "pagelang-use-default": "Použiť predvolený jazyk",
index 194e8af..3a024d8 100644 (file)
        "grant-basic": "Osnovne pravice",
        "grant-viewdeleted": "Ogled izbrisanih datotek in strani",
        "grant-viewmywatchlist": "Ogled svojega spiska nadzorov",
+       "grant-viewrestrictedlogs": "Ogled omejenih dnevniških vnosov",
        "newuserlogpage": "Dnevnik registracij uporabnikov",
        "newuserlogpagetext": "Prikazan je dnevnik nedavnih registracij novih uporabnikov.",
        "rightslog": "Dnevnik uporabniških pravic",
        "movelogpagetext": "Prikazujem seznam prestavljenih strani.",
        "movesubpage": "{{PLURAL:$1|Podstran|Podstrani}}",
        "movesubpagetext": "Ta stran ima $1 {{PLURAL:$1|podstran prikazano|podstrani prikazane}} spodaj.",
+       "movesubpagetalktext": "Pripadajoča stran ima $1 {{PLURAL:$1|podstran, prikazano|podstrani, prikazani|podstrani, prikazane|podstrani, prikazanih}} spodaj.",
        "movenosubpage": "Ta stran nima podstrani.",
        "movereason": "Razlog:",
        "revertmove": "vrni",
        "pageinfo-category-pages": "Število strani",
        "pageinfo-category-subcats": "Število podkategorij",
        "pageinfo-category-files": "Število datotek",
+       "pageinfo-user-id": "ID uporabnika",
        "markaspatrolleddiff": "Označite kot nadzorovano",
        "markaspatrolledtext": "Označite stran kot nadzorovano",
        "markaspatrolledtext-file": "Označite različico datoteke kot nadzorovano",
index d197721..6df0bf4 100644 (file)
        "moveddeleted-notice": "Boggaan waa la tirtiray.\nTirtiraha iyo wareejinta gudagalaha boggaan waxaad ka arki kartaa hoostaan.",
        "edit-conflict": "Wax bedel isku dhacay",
        "edit-already-exists": "Bog cusub lama samayn karo, wuu jiraa bogaan.",
+       "duplicate-args-warning": "<strong>Digniin:</strong> [[:$1]] u yeeris [[:$2]] in ka badan hal qiimayn ee ku saabsan \"$3\" cabbiraad. Kaliya qiimihii ugu dambaysay baa la adeegsan doonaa.",
        "post-expand-template-inclusion-warning": "'''Digniin:''' Aad oo u weyn yahay tusmo'da aad ku dartay.\nTusmooyinka qaar lagumo dari doono.",
        "post-expand-template-inclusion-category": "Boggaga ku xad gudbay weyninka tusmo'da",
        "post-expand-template-argument-warning": "'''Digniin:'''Boggaan waxaa ku jira ugu yaraan hal iyo wixii ka badan oo template ah, waxaana ku xiran kuwa kale.",
index b6beebe..f9c7738 100644 (file)
        "qbfind": "Пронађи",
        "qbbrowse": "Потражи",
        "qbedit": "Уреди",
-       "qbpageoptions": "Ð\9fоÑ\81Ñ\82авке Ñ\81Ñ\82Ñ\80аниÑ\86е",
+       "qbpageoptions": "Ð\9eва Ñ\81Ñ\82Ñ\80аниÑ\86а",
        "qbmyoptions": "Моје странице",
        "faq": "НПП",
        "faqpage": "Project:НПП",
        "history": "Историја странице",
        "history_short": "Историја",
        "updatedmarker": "ажурирано од моје последње посете",
-       "printableversion": "Ð\97а штампање",
+       "printableversion": "Ð\92еÑ\80зиÑ\98а Ð·а штампање",
        "permalink": "Трајна веза",
        "print": "Штампај",
        "view": "Погледај",
        "talk": "Разговор",
        "views": "Прегледи",
        "toolbox": "Алатке",
+       "tool-link-userrights": "Уреди {{GENDER:$1|корисничке}} групе",
+       "tool-link-emailuser": "Пошаљи {{GENDER:$1|имејл}}",
        "userpage": "Погледај корисничку страницу",
        "projectpage": "Погледај страницу пројекта",
        "imagepage": "Погледај страницу датотеке",
        "translateinterface": "Да додате или промените преводе за све викије, посетите [https://translatewiki.net/ Транслејтвики], пројекат за локализацију Медијавикија.",
        "cascadeprotected": "Ова страница је закључана јер садржи {{PLURAL:$1|следећу страницу која је заштићена|следеће странице које су заштићене}} „преносивом“ заштитом:\n$2",
        "namespaceprotected": "Немате дозволу да уређујете странице у именском простору <strong>$1</strong>.",
-       "customcssprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ð¼ÐµÑ\9aаÑ\82е Ð¾Ð²Ñ\83 CSS Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ñ\98еÑ\80 Ñ\81адÑ\80жи Ð»Ð¸Ñ\87не Ð¿Ð¾Ñ\81Ñ\82авке другог корисника.",
+       "customcssprotected": "Ð\9dемаÑ\82е Ð´Ð¾Ð·Ð²Ð¾Ð»Ñ\83 Ð´Ð° Ð¼ÐµÑ\9aаÑ\82е Ð¾Ð²Ñ\83 CSS Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 Ñ\98еÑ\80 Ñ\81адÑ\80жи Ð»Ð¸Ñ\87на Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа другог корисника.",
        "customjsprotected": "Немате дозволу да мењате ову страницу јаваскрипта јер садржи личне поставке другог корисника.",
        "mycustomcssprotected": "Немате дозволу за мењање ове CSS странице.",
        "mycustomjsprotected": "Немате дозволу за мењање ове JavaScript странице.",
        "userlogin": "Пријава/регистрација",
        "userloginnocreate": "Пријава",
        "logout": "Одјава",
-       "userlogout": "Ð\9eдÑ\98ави Ð¼Ðµ",
+       "userlogout": "Ð\9eдÑ\98ава",
        "notloggedin": "Нисте пријављени",
        "userlogin-noaccount": "Немате налог?",
        "userlogin-joinproject": "Отворите га",
        "noemailcreate": "Морате навести исправну имејл адресу.",
        "passwordsent": "Нова лозинка је послата на имејл адресу {{GENDER:$1|корисника|кориснице|корисника}} $1.\nПријавите се пошто је примите.",
        "blocked-mailpassword": "Ваша IP адреса има забрану уређивања. Ради спречавања злоупотребе, није дозвољено враћање лозинке са ње.",
-       "eauthentsent": "Ð\9dа Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82 Ð¿Ð¾Ñ\82вÑ\80дни ÐºÐ¾Ð´.\nÐ\9fÑ\80е Ð½ÐµÐ³Ð¾ Ñ\88Ñ\82о Ð¿Ð¾Ñ\88аÑ\99емо Ð´Ð°Ñ\99Ñ\9aе Ð¿Ð¾Ñ\80Ñ\83ке, Ð¿Ñ\80аÑ\82иÑ\82е Ñ\83пÑ\83Ñ\82Ñ\81Ñ\82ва Ñ\81 Ð¸Ð¼ÐµÑ\98ла Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ñ\81Ñ\82е Ð²и отворили налог.",
+       "eauthentsent": "Ð\9dа Ð½Ð°Ð²ÐµÐ´ÐµÐ½Ñ\83 Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83 Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82 Ð¿Ð¾Ñ\82вÑ\80дни ÐºÐ¾Ð´.\nÐ\9fÑ\80е Ð½ÐµÐ³Ð¾ Ñ\88Ñ\82о Ð¿Ð¾Ñ\88аÑ\99емо Ð´Ð°Ñ\99Ñ\9aе Ð¿Ð¾Ñ\80Ñ\83ке, Ð¿Ñ\80аÑ\82иÑ\82е Ñ\83пÑ\83Ñ\82Ñ\81Ñ\82ва Ñ\81 Ð¸Ð¼ÐµÑ\98ла Ð´Ð° Ð±Ð¸Ñ\81Ñ\82е Ð¿Ð¾Ñ\82вÑ\80дили Ð´Ð° Ñ\81Ñ\82е Ð\92и отворили налог.",
        "throttled-mailpassword": "Порука за промену лозинке је послата у {{PLURAL:$1|1=последњих сат времена|последња $1 сата|последњих $1 сати}}.\nДа бисмо спречили злоупотребу, подсетник шаљемо само једном у року од {{PLURAL:$1|1=сат времена|$1 сата|$1 сати}}.",
        "mailerror": "Грешка при слању поруке: $1",
-       "acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу ИП адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога|$1 налога}} претходни дан, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове ИП адресе тренутно не могу отворити више налога.",
+       "acct_creation_throttle_hit": "Посетиоци овог викија који користе вашу ИП адресу су већ отворили {{PLURAL:$1|1=један налог|$1 налога}} претходни $2, што је највећи дозвољени број у том временском периоду.\nЗбог тога посетиоци с ове ИП адресе тренутно не могу отворити више налога.",
        "emailauthenticated": "Ваша имејл адреса је потврђена $2 у $3.",
-       "emailnotauthenticated": "Ð\92аÑ\88а Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81а Ñ\98оÑ\88 Ð½Ð¸Ñ\98е Ð¿Ð¾Ñ\82вÑ\80Ñ\92ена.\nÐ\9fоÑ\80Ñ\83ке Ð½ÐµÑ\9bе Ð±Ð¸Ñ\82и Ð¿Ð¾Ñ\81лаÑ\82е ни у једном од следећих случајева.",
+       "emailnotauthenticated": "Ð\92аÑ\88а Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81а Ñ\98оÑ\88 Ð½Ð¸Ñ\98е Ð¿Ð¾Ñ\82вÑ\80Ñ\92ена.\nÐ\98меÑ\98л Ð½ÐµÑ\9bе Ð±Ð¸Ñ\82и Ð¿Ð¾Ñ\81лаÑ\82 ни у једном од следећих случајева.",
        "noemailprefs": "Унесите имејл адресу како би ове могућности радиле.",
        "emailconfirmlink": "Потврдите своју имејл адресу",
        "invalidemailaddress": "Имејл адреса не може бити прихваћена јер је неисправног облика.\nУнесите исправну адресу или оставите празно поље.",
        "pt-createaccount": "Отвори налог",
        "pt-userlogout": "Одјави ме",
        "php-mail-error-unknown": "Непозната грешка у функцији PHP mail().",
-       "user-mail-no-addy": "Ð\9fокÑ\83Ñ\88али Ñ\81Ñ\82е Ð´Ð° Ð¿Ð¾Ñ\88аÑ\99еÑ\82е Ð¿Ð¾Ñ\80Ñ\83кÑ\83 без имејл адресе.",
+       "user-mail-no-addy": "Ð\9fокÑ\83Ñ\88али Ñ\81Ñ\82е Ð´Ð° Ð¿Ð¾Ñ\88аÑ\99еÑ\82е Ð¸Ð¼ÐµÑ\98л без имејл адресе.",
        "user-mail-no-body": "Покушано слање имејла с празним или неразумно кратким садржајем.",
        "changepassword": "Промени лозинку",
        "resetpass_announce": "Да бисте завршили пријаву, подесите нову лозинку овде.",
        "resetpass_submit": "Постави лозинку и пријави ме",
        "changepassword-success": "Ваша лозинка је успешно промењена!",
        "changepassword-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
+       "botpasswords": "Лозинке ботова",
+       "botpasswords-label-appid": "Име бота:",
+       "botpasswords-label-create": "Направи",
+       "botpasswords-label-update": "Ажурирај",
        "botpasswords-label-cancel": "Откажи",
        "botpasswords-label-delete": "Обриши",
+       "botpasswords-label-grants-column": "Одобрено",
        "resetpass_forbidden": "Лозинка не може бити промењена",
        "resetpass-no-info": "Морате бити пријављени да бисте приступили овој страници.",
        "resetpass-submit-loggedin": "Промени лозинку",
        "resetpass-submit-cancel": "Откажи",
        "resetpass-wrong-oldpass": "Неисправна привремена или текућа лозинка.\nМожда сте већ променили лозинку или сте затражили нову привремену лозинку.",
        "resetpass-recycled": "Унели сте садашњу лозинку, да бисте ресетовали лозинку морате унети нову.",
-       "resetpass-temp-emailed": "Ð\9fÑ\80иÑ\98авили Ñ\81Ñ\82е Ñ\81е Ñ\81а Ð¿Ñ\80ивÑ\80еменим ÐºÐ¾Ð´Ð¾Ð¼ Ð¸Ð· Ðµ-поÑ\88Ñ\82е.\nДа бисте завршили пријављивање морате поставити нову лозинку овде:",
+       "resetpass-temp-emailed": "Ð\9fÑ\80иÑ\98авили Ñ\81Ñ\82е Ñ\81е Ñ\81а Ð¿Ñ\80ивÑ\80еменим ÐºÐ¾Ð´Ð¾Ð¼ Ð¸Ð· Ð¸Ð¼ÐµÑ\98ла.\nДа бисте завршили пријављивање морате поставити нову лозинку овде:",
        "resetpass-temp-password": "Привремена лозинка:",
        "resetpass-abort-generic": "Промену лозинке је спречио додатак.",
        "resetpass-expired": "Ваша лозинка је истекла. Поставите нову лозинку да бисте се пријавили.",
        "passwordreset-emaildisabled": "Имејл је онемогућен на овом викију.",
        "passwordreset-username": "Корисничко име:",
        "passwordreset-domain": "Домен:",
-       "passwordreset-capture": "Погледати крајњу поруку?",
-       "passwordreset-capture-help": "Ако означите ову кућицу, имејл с привременом лозинком ће бити приказан и послат кориснику.",
+       "passwordreset-capture": "Погледати крајњи имејл?",
+       "passwordreset-capture-help": "Ако означите ову кућицу, имејл (с привременом лозинком) ће бити приказан и послат кориснику.",
        "passwordreset-email": "Имејл адреса:",
        "passwordreset-emailtitle": "Детаљи налога на викију {{SITENAME}}",
        "passwordreset-emailtext-ip": "Неко (вероватно Ви, са ИП адресе $1) је затражио нову лозинку на викију {{SITENAME}} ($4).\nСледећи {{PLURAL:$3|кориснички налог је повезан|кориснички налози су повезани}} с овом имејл адресом:\n\n$2\n\n{{PLURAL:$3|Привремена лозинка истиче|Привремене лозинке истичу}} за {{PLURAL:$5|један дан|$5 дана}}.\nПријавите се и изаберите нову лозинку. Ако је неко други захтевао ову радњу или сте се сетили лозинке и не желите да је мењате, занемарите ову поруку и наставите користити стару лозинку.",
        "changeemail-newemail": "Нова имејл адреса:",
        "changeemail-none": "(ништа)",
        "changeemail-password": "Ваша лозинка:",
-       "changeemail-submit": "Промени",
+       "changeemail-submit": "Промени имејл",
        "changeemail-throttled": "Превише пута сте покушали да се пријавите.\nМолимо вас да сачекате $1 пре него што покушате поново.",
        "changeemail-nochange": "Унесите другу имејл адресу.",
        "resettokens": "Ресетовање жетона",
        "subject-preview": "Преглед теме:",
        "previewerrortext": "Догодила се грешка приликом приказивања ваших измена.",
        "blockedtitle": "Корисник је блокиран",
-       "blockedtext": "<strong>Ваше корисничко име или ИП адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог: <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи имејл овом кориснику“ ако нисте унели исправну имејл адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварању било каквих упита.",
+       "blockedtext": "<strong>Ваше корисничко име или ИП адреса је блокирана.</strong>\n\nБлокирање је {{GENDER:$4|извршио|извршила}} $1.\nРазлог је <em>$2</em>.\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\nНе можете користити могућност „Пошаљи имејл овом кориснику“ ако нисте унели исправну имејл адресу у [[Special:Preferences|подешавањима]].\nВаша блокирана ИП адреса је $3, а ID блокирања $5.\nНаведите све податке изнад при стварању било каквих упита.",
        "autoblockedtext": "Ваша ИП адреса је блокирана јер ју је употребљавао други корисник, кога је {{GENDER:$4|блокирао|блокирала}} $1.\nРазлог:\n\n:<em>$2</em>\n\n* Датум блокирања: $8\n* Блокирање истиче: $6\n* Име корисника: $7\n\nОбратите се {{GENDER:$4|кориснику|корисници}} $1 или [[{{MediaWiki:Grouppage-sysop}}|администратору]] да разјасните ствар.\n\nНе можете користити могућност „Пошаљи имејл овом кориснику“ ако нисте унели исправну имејл адресу у [[Special:Preferences|подешавањима]].\n\nВаша блокирана ИП адреса је $3, а ID $5.\nНаведите све податке изнад при стварању било каквих упита.",
        "blockednoreason": "разлог није наведен",
        "whitelistedittext": "За уређивање странице је потребно да будете $1.",
        "revdelete-show-no-access": "Грешка при приказивању ставке од $1, $2: означена је као „ограничена“.\nНемате приступ до ње.",
        "revdelete-modify-no-access": "Грешка при мењању ставке од $1, $2: означена је као „ограничена“.\nНемате приступ до ње.",
        "revdelete-modify-missing": "Грешка при мењању ИБ ставке $1: она не постоји у бази података.",
-       "revdelete-no-change": "'''Упозорење:''' ставка од $1, $2 већ поседује затражене поставке видљивости.",
+       "revdelete-no-change": "<strong>Упозорење:</strong> ставка од $1, $2 већ поседује затражена подешавања видљивости.",
        "revdelete-concurrent-change": "Грешка при мењању ставке од $1, $2: њено стање је у међувремену промењено од стране другог корисника.\nПогледајте историју.",
        "revdelete-only-restricted": "Грешка при сакривању ставке од $1, $2: не можете сакрити ставке од администратора без избора других могућности видљивости.",
        "revdelete-reason-dropdown": "*Уобичајени разлози за брисање\n** Кршење ауторског права\n** Неприкладан коментар или лични подаци\n** Неприкладно корисничко име\n** Увредљиви подаци",
        "right-move-categorypages": "премештање категорија",
        "right-movefile": "премештање датотека",
        "right-suppressredirect": "премештање страница без остављања преусмерења",
-       "right-upload": "отпремање датотека",
+       "right-upload": "Ð\9eтпремање датотека",
        "right-reupload": "замењивање постојећих датотека",
        "right-reupload-own": "замењивање сопствених датотека",
        "right-reupload-shared": "мењање датотека на дељеном складишту мултимедије",
-       "right-upload_by_url": "оÑ\82пÑ\80емаÑ\9aе Ð´Ð°Ñ\82оÑ\82ека Ñ\81а Ð²ÐµÐ± адресе",
+       "right-upload_by_url": "Ð\9eÑ\82пÑ\80емаÑ\9aе Ð´Ð°Ñ\82оÑ\82ека Ñ\81а Ð²ÐµÐ±-адресе",
        "right-purge": "чишћење кеш меморије странице без потврде",
        "right-autoconfirmed": "без ограничавања ставки за ИП адресе",
        "right-bot": "сматрање измена као аутоматски процес",
        "right-viewsuppressed": "прегледање измена скривених од свих корисника",
        "right-suppressionlog": "прегледање приватних дневника",
        "right-block": "блокирање даљих измена других корисника",
-       "right-blockemail": "онемогÑ\83Ñ\9bаваÑ\9aе ÐºÐ¾Ñ\80иÑ\81ниÑ\86има Ð´Ð° Ñ\88аÑ\99Ñ\83 Ð¸Ð¼ÐµÑ\98лове",
+       "right-blockemail": "Ð\91локиÑ\80аÑ\98 ÐºÐ¾Ñ\80иÑ\81никÑ\83 Ñ\81лаÑ\9aе Ð¸Ð¼ÐµÑ\98ла",
        "right-hideuser": "блокирање корисничког имена и његово сакривање од јавности",
        "right-ipblock-exempt": "заобилажење блокирања ИП адресе, аутоматска блокирања и блокирања опсега",
        "right-unblockself": "деблокирање самог себе",
        "right-editmyuserjs": "уређивање сопствених JavaScript датотека",
        "right-viewmywatchlist": "види сопствени списак надгледања",
        "right-editmywatchlist": "уређивање сопственог списка надгледања; неке предузете радње ће свеједно додати странице на списак и без овог права",
-       "right-viewmyprivateinfo": "видиÑ\82е Ñ\81воÑ\98е Ð»Ð¸Ñ\87не Ð¿Ð¾Ð´Ð°Ñ\82ке (нпÑ\80. Ð°Ð´Ñ\80еÑ\81Ñ\83 Ðµ-поÑ\88Ñ\82е, право име)",
-       "right-editmyprivateinfo": "уређивање сопствених личних података (нпр. имејл адреса, право име)",
+       "right-viewmyprivateinfo": "Ð\92идиÑ\82е Ñ\81воÑ\98е Ð»Ð¸Ñ\87не Ð¿Ð¾Ð´Ð°Ñ\82ке (нпÑ\80. Ð¸Ð¼ÐµÑ\98л Ð°Ð´Ñ\80еÑ\81Ñ\83, право име)",
+       "right-editmyprivateinfo": "Уређивање сопствених личних података (нпр. имејл адреса, право име)",
        "right-editmyoptions": "уређивање сопствених подешавања",
        "right-rollback": "брзо враћање измена последњег корисника који је мењао одређену страницу",
        "right-markbotedits": "означавање враћених измена као измене бота",
        "right-userrights-interwiki": "уређивање корисничких права на другим викијима",
        "right-siteadmin": "закључавање и откључавање базе података",
        "right-override-export-depth": "извоз страница укључујући и повазене странице до дубине од пет веза",
-       "right-sendemail": "слање имејла другим корисницима",
+       "right-sendemail": "Пошаљи имејл другим корисницима",
        "right-passwordreset": "прегледање порука за обнављање лозинке",
        "right-managechangetags": "прављење и (де)активирање [[Special:Tags|ознака]]",
        "right-applychangetags": "примењивање [[Special:Tags|ознака]] на нечије измене",
        "grant-rollback": "Враћање измена",
        "grant-sendemail": "Слање имејлова другим корисницима",
        "grant-uploadeditmovefile": "Отпремање, замена и премештање датотека",
-       "grant-uploadfile": "Слање нових датотека",
+       "grant-uploadfile": "Ð\9eÑ\82пÑ\80емање нових датотека",
        "grant-basic": "Основна права",
        "grant-viewdeleted": "Преглед обрисаних страница и датотека",
        "grant-viewmywatchlist": "Преглед вашег списак надгледања",
        "action-move-rootuserpages": "премештање основних корисничких страница",
        "action-move-categorypages": "премештање категорија",
        "action-movefile": "премештање ове датотеке",
-       "action-upload": "слање ове датотеке",
+       "action-upload": "отпреми ову датотеку",
        "action-reupload": "замењивање постојеће датотеке",
        "action-reupload-shared": "постављање ове датотеке на заједничко складиште",
-       "action-upload_by_url": "слање ове датотеке преко URL адресе",
+       "action-upload_by_url": "отпремање ове датотеке преко веб-адресе",
        "action-writeapi": "писање АПИ-ја",
        "action-delete": "брисање ове странице",
        "action-deleterevision": "брисање ове измене",
        "action-managechangetags": "прављење и (де)активирање ознака",
        "action-applychangetags": "додавање ознака на ваше измене",
        "action-changetags": "додавање и уклањање разних ознака на појединачним изменама и уносима у дневницима",
+       "action-purge": "чишћење привремене меморије ове странице",
        "nchanges": "$1 {{PLURAL:$1|измена|измене|измена}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|измена од ваше последње посете}}",
        "enhancedrc-history": "историја",
        "recentchanges-page-removed-from-category": "[[:$1]] је уклоњена из категорије",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]] и још [[Special:WhatLinksHere/$1|{{PLURAL:$2|једна страница|$2 странице}}]] су уклоњене из категорије",
        "autochange-username": "Медијавики аутоматска измена",
-       "upload": "Ð\9fоÑ\88аÑ\99и датотеку",
-       "uploadbtn": "Ð\9fоÑ\88аÑ\99и датотеку",
+       "upload": "Ð\9eÑ\82пÑ\80еми датотеку",
+       "uploadbtn": "Ð\9eÑ\82пÑ\80еми датотеку",
        "reuploaddesc": "Назад на образац за отпремање",
        "upload-tryagain": "Пошаљи измењени опис датотеке",
        "uploadnologin": "Нисте пријављени",
-       "uploadnologintext": "Морате бити $1 да бисте отпремали датотеке.",
+       "uploadnologintext": "$1 да бисте отпремали датотеке.",
        "upload_directory_missing": "Фасцикла за слање ($1) недостаје и сервер је не може направити.",
        "upload_directory_read_only": "Сервер не може да пише по фасцикли за слање ($1).",
        "uploaderror": "Грешка при отпремању",
        "uploadwarning-text": "Измените опис датотеке и покушајте поново.",
        "savefile": "Сачувај датотеку",
        "uploaddisabled": "Отпремање је онемогућено.",
-       "copyuploaddisabled": "СлаÑ\9aе Ð¿Ñ\83Ñ\82ем URL адресе је онемогућено.",
+       "copyuploaddisabled": "Ð\9eÑ\82пÑ\80емаÑ\9aе Ð¿Ñ\83Ñ\82ем Ð²ÐµÐ±-адресе је онемогућено.",
        "uploaddisabledtext": "Отпремање датотека је онемогућено.",
-       "php-uploaddisabledtext": "СлаÑ\9aе Ð´Ð°Ñ\82оÑ\82ека Ñ\98е Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bено Ñ\83 PHP-Ñ\83.\nÐ\9fÑ\80овеÑ\80иÑ\82е Ð¿Ð¾Ñ\81Ñ\82авке file_uploads.",
+       "php-uploaddisabledtext": "Ð\9eÑ\82пÑ\80емаÑ\9aе Ð´Ð°Ñ\82оÑ\82ека Ñ\98е Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bено Ñ\83 PHP-Ñ\83.\nÐ\9fÑ\80овеÑ\80иÑ\82е Ð¿Ð¾Ð´ÐµÑ\88аваÑ\9aа file_uploads.",
        "uploadscripted": "Датотека садржи HTML или скриптни код који може бити погрешно протумачен од стране прегледача.",
        "upload-scripted-pi-callback": "Датотека која садржи инструкције за обраду XML стилског облика се не може отпремити.",
        "uploaded-script-svg": "Пронађен скриптни елеменат „$1“ у постављеној SVG датотеци.",
        "destfilename": "Назив:",
        "upload-maxfilesize": "Максимална величина датотеке: $1",
        "upload-description": "Опис датотеке",
-       "upload-options": "Поставке слања",
+       "upload-options": "Поставке отпремања",
        "watchthisupload": "Надгледај ову датотеку",
        "filewasdeleted": "Датотека с овим називом је раније послата, али је обрисана.\nПроверите $1 пре него што наставите с поновним слањем.",
        "filename-bad-prefix": "Назив датотеке коју шаљете почиње са <strong>„$1“</strong>, а њега обично додељују дигитални фотоапарати.\nИзаберите назив датотеке који описује њен садржај.",
        "upload-dialog-button-back": "Назад",
        "upload-dialog-button-done": "Готово",
        "upload-dialog-button-save": "Сачувај",
-       "upload-dialog-button-upload": "Ð\9fоÑ\88аÑ\99и",
+       "upload-dialog-button-upload": "Ð\9eÑ\82пÑ\80еми",
        "upload-form-label-infoform-title": "Детаљи",
        "upload-form-label-infoform-name": "Назив",
        "upload-form-label-infoform-description": "Опис",
        "invalid-chunk-offset": "Неисправна полазна тачка",
        "img-auth-accessdenied": "Приступ је одбијен",
        "img-auth-nopathinfo": "Недостаје PATH_INFO.\nВаш сервер није подешен да прослеђује овакве податке.\nМожда је заснован на CGI-ју који не подржава img_auth.\nПогледајте https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization?uselang=sr-ec.",
-       "img-auth-notindir": "Захтевана путања није у подешеној фасцикли за слање.",
+       "img-auth-notindir": "Захтевана путања није у подешеној фасцикли за отпремање.",
        "img-auth-badtitle": "Не могу да створим исправан наслов за „$1“.",
        "img-auth-nologinnWL": "Нисте пријављени и „$1“ није на списку дозвољених.",
        "img-auth-nofile": "Датотека „$1“ не постоји.",
        "http-bad-status": "Дошло је до проблема током захтева HTTP: $1 $2",
        "upload-curl-error6": "Не могу да приступим адреси",
        "upload-curl-error6-text": "Не могу да приступим наведеној адреси.\nПроверите да ли је адреса исправна и доступна.",
-       "upload-curl-error28": "Слање је истекло",
+       "upload-curl-error28": "Ð\9eÑ\82пÑ\80емање је истекло",
        "upload-curl-error28-text": "Сервер не одговара на упит.\nПроверите да ли сајт ради, мало осачекајте и покушајте поново.\nПробајте касније када буде мање оптерећење.",
        "license": "Лиценца:",
        "license-header": "Лиценца:",
        "sharedupload-desc-create": "Ова датотека се налази на $1 и може да се користи на другим пројектима.\nЊен опис можете да измените на [$2 одговарајућој страници].",
        "filepage-nofile": "Не постоји датотека с овим називом.",
        "filepage-nofile-link": "Не постоји датотека с овим називом, али је можете [$1 послати].",
-       "uploadnewversion-linktext": "Ð\9fоÑ\88аÑ\99и нову верзију ове датотеке",
+       "uploadnewversion-linktext": "Ð\9eÑ\82пÑ\80еми нову верзију ове датотеке",
        "shared-repo-from": "из $1",
        "shared-repo": "заједничко складиште",
        "shared-repo-name-wikimediacommons": "Викимедијина остава",
        "trackingcategories-nodesc": "Опис није доступан.",
        "trackingcategories-disabled": "Категорија је онемогућена",
        "mailnologin": "Нема адресе за слање",
-       "mailnologintext": "Морате бити [[Special:UserLogin|пријављени]] и имати исправан имејл у [[Special:Preferences|подешавањима]] да бисте слали имејлове другим корисницима.",
+       "mailnologintext": "Морате бити [[Special:UserLogin|пријављени]] и имати исправан имејл адресу у [[Special:Preferences|подешавањима]] да бисте слали имејлове другим корисницима.",
        "emailuser": "Пошаљи имејл",
        "emailuser-title-target": "Слање имејла {{GENDER:$1|кориснику|корисници}}",
        "emailuser-title-notarget": "Слање имејла кориснику",
        "emailpagetext": "Можете да користите доњи образац да пошаљете имејл {{GENDER:$1|овом кориснику|овој корисници}}.\nИмејл који сте унели у вашим [[Special:Preferences|подешавањима]] ће се приказати у пољу „Од“, тако да ће прималац моћи да вам одговори директно.",
-       "defemailsubject": "{{SITENAME}} — Имејл од {{GENDER:$1|корисника|кориснице}} $1",
-       "usermaildisabled": "Ð\9aоÑ\80иÑ\81ниÑ\87ка Ðµ-поÑ\88Ñ\82а Ñ\98е Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bена",
+       "defemailsubject": "{{SITENAME}} — Имејл од {{GENDER:$1|корисника|кориснице}} „$1”",
+       "usermaildisabled": "Ð\9aоÑ\80иÑ\81ниÑ\87ки Ð¸Ð¼ÐµÑ\98л Ñ\98е Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bен",
        "usermaildisabledtext": "Не можете да шаљете имејлове другим корисницима на овом викију",
        "noemailtitle": "Нема имејл адресе",
        "noemailtext": "Овај корисник није навео исправну имејл адресу.",
        "emailtarget": "Унос корисничког имена примаоца",
        "emailusername": "Корисничко име:",
        "emailusernamesubmit": "Пошаљи",
-       "email-legend": "СлаÑ\9aе Ð¸Ð¼ÐµÑ\98ла другом кориснику",
+       "email-legend": "Ð\9fоÑ\88аÑ\99и Ð¸Ð¼ÐµÑ\98л другом кориснику",
        "emailfrom": "Од:",
        "emailto": "За:",
        "emailsubject": "Наслов:",
        "emailsend": "Пошаљи",
        "emailccme": "Пошаљи ми копију поруке на мој имејл.",
        "emailccsubject": "Копија ваше поруке кориснику $1: $2",
-       "emailsent": "Ð\9fоÑ\80Ñ\83ка Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82а",
-       "emailsenttext": "Ваш имејл је послат.",
+       "emailsent": "Ð\98меÑ\98л Ñ\98е Ð¿Ð¾Ñ\81лаÑ\82",
+       "emailsenttext": "Ваша имејл порука је послата.",
        "emailuserfooter": "Овај имејл је {{GENDER:$1|послао|послала}} $1 {{GENDER:$2|кориснику|корисници}} $2 помоћу „{{int:emailuser}}“ с викија {{SITENAME}}.",
        "usermessage-summary": "Слање системске поруке.",
        "usermessage-editor": "Уређивач системских порука",
        "enotif_subject_created": "Страницу $1 на {{SITENAME}} {{GENDER:$2|направио је|направила је|направио је}} $2",
        "enotif_subject_moved": "Страницу $1 на {{SITENAME}} {{GENDER:$2|преместио је|преместила је}} $2",
        "enotif_subject_restored": "Страницу $1 на {{SITENAME}} {{GENDER:$2|вратио је|вратила је|вратио је}} $2",
-       "enotif_subject_changed": "Страницу $1 на {{SITENAME}} {{GENDER:$2|променио је|променила је|променио је}} $2",
+       "enotif_subject_changed": "Страницу $1 на {{SITENAME}} {{GENDER:$2|променио|променила}} је $2",
        "enotif_body_intro_deleted": "Страницу $1 на {{SITENAME}} {{GENDER:$2|обрисао|обрисала}} је $2 дана $PAGEEDITDATE Погледајте $3.",
        "enotif_body_intro_created": "Страницу $1 на {{SITENAME}} {{GENDER:$2|направио|направила}} је $2 дана $PAGEEDITDATE Тренутна измена налази се на $3.",
        "enotif_body_intro_moved": "Страницу $1 на {{SITENAME}} {{GENDER:$2|преместио|преместила}} је $2 дана $PAGEEDITDATE Тренутна измена налази се на  $3.",
        "enotif_lastvisited": "Погледајте $1 за све измене од ваше последње посете.",
        "enotif_lastdiff": "Погледајте $1 да видите ову измену.",
        "enotif_anon_editor": "анониман корисник $1",
-       "enotif_body": "Ð\9fоÑ\88Ñ\82овани $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nÐ\9eпиÑ\81: $PAGESUMMARY $PAGEMINOREDIT\n\nÐ\9aонÑ\82акÑ\82:\nе-поÑ\88Ñ\82а: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nÐ\9dеÑ\9bе Ð±Ð¸Ñ\82и Ð´Ñ\80Ñ\83гиÑ\85 Ð¾Ð±Ð°Ð²ÐµÑ\88Ñ\82еÑ\9aа Ñ\83 Ñ\81лÑ\83Ñ\87аÑ\98Ñ\83 Ð´Ð°Ñ\99иÑ\85 Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83колико Ð½Ðµ Ð¿Ð¾Ñ\81еÑ\82иÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 ÐºÐ°Ð´Ð° Ñ\81Ñ\82е Ð¿Ñ\80иÑ\98авÑ\99ени.\nÐ\9cожеÑ\82е Ð¸ Ð´Ð° Ð¿Ð¾Ð½Ð¸Ñ\88Ñ\82иÑ\82е Ð¿Ð¾Ñ\81Ñ\82авке Ð¾Ð±Ð°Ð²ÐµÑ\88Ñ\82еÑ\9aа Ð·Ð° Ñ\81ве Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\83 Ð²Ð°Ñ\88ем Ñ\81пиÑ\81кÑ\83 Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа.\n\nСÑ\80даÑ\87ан Ð¿Ð¾Ð·Ð´Ñ\80ав, {{SITENAME}}\n\n--\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ð¿Ñ\80оменили Ð¿Ð¾Ñ\81Ñ\82авке Ñ\83 Ð²ÐµÐ·Ð¸ Ñ\81а Ðµ-обавеÑ\88Ñ\82еÑ\9aима, Ð¿Ð¾Ñ\81еÑ\82иÑ\82е\n{{canonicalurl:{{#special:Preferences}}}}\n\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ð¿Ñ\80оменили Ð¿Ð¾Ñ\81Ñ\82авке Ñ\83 Ð²ÐµÐ·Ð¸ Ñ\81а Ñ\81пиÑ\81ком надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
+       "enotif_body": "Ð\9fоÑ\88Ñ\82овани $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nÐ\9eпиÑ\81: $PAGESUMMARY $PAGEMINOREDIT\n\nÐ\9aонÑ\82акÑ\82:\nмеÑ\98л: $PAGEEDITOR_EMAIL\nвики: $PAGEEDITOR_WIKI\n\nÐ\9dеÑ\9bе Ð±Ð¸Ñ\82и Ð´Ñ\80Ñ\83гиÑ\85 Ð¾Ð±Ð°Ð²ÐµÑ\88Ñ\82еÑ\9aа Ñ\83 Ñ\81лÑ\83Ñ\87аÑ\98Ñ\83 Ð´Ð°Ñ\99иÑ\85 Ð¸Ð·Ð¼ÐµÐ½Ð° Ñ\83колико Ð½Ðµ Ð¿Ð¾Ñ\81еÑ\82иÑ\82е Ð¾Ð²Ñ\83 Ñ\81Ñ\82Ñ\80аниÑ\86Ñ\83 ÐºÐ°Ð´Ð° Ñ\81Ñ\82е Ð¿Ñ\80иÑ\98авÑ\99ени.\nÐ\9cожеÑ\82е Ð¸ Ð´Ð° Ð¿Ð¾Ð½Ð¸Ñ\88Ñ\82иÑ\82е Ð¿Ð¾Ñ\81Ñ\82авке Ð¾Ð±Ð°Ð²ÐµÑ\88Ñ\82еÑ\9aа Ð·Ð° Ñ\81ве Ñ\81Ñ\82Ñ\80аниÑ\86е Ñ\83 Ð²Ð°Ñ\88ем Ñ\81пиÑ\81кÑ\83 Ð½Ð°Ð´Ð³Ð»ÐµÐ´Ð°Ñ\9aа.\n\nСÑ\80даÑ\87ан Ð¿Ð¾Ð·Ð´Ñ\80ав, {{SITENAME}}\n\n--\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ð¿Ñ\80оменили Ð¿Ð¾Ñ\81Ñ\82авке Ð¸Ð¼ÐµÑ\98л Ð¾Ð±Ð°Ð²ÐµÑ\88Ñ\82еÑ\9aа, Ð¿Ð¾Ñ\81еÑ\82иÑ\82е\n{{canonicalurl:{{#special:Preferences}}}}\n\nÐ\94а Ð±Ð¸Ñ\81Ñ\82е Ð¿Ñ\80оменили Ð¿Ð¾Ñ\81Ñ\82авке Ñ\81пиÑ\81ка надгледања, посетите\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nДа бисте уклонили ову страницу са списка надгледања, посетите\n$UNWATCHURL\n\nПодршка и даља помоћ:\n$HELPPAGE",
        "created": "направљена",
        "changed": "измењена",
        "deletepage": "Обриши страницу",
        "protectedarticle": "је заштитио „[[$1]]“",
        "modifiedarticleprotection": "промењен степен заштите за „[[$1]]“",
        "unprotectedarticle": "је скинуо заштиту са странице „[[$1]]“",
-       "movedarticleprotection": "је преместио поставке заштите са „[[$2]]“ на „[[$1]]“",
+       "movedarticleprotection": "је преместио подешавања заштите са „[[$2]]“ на „[[$1]]“",
        "protect-title": "Степен заштите за „$1“",
        "protect-title-notallowed": "Преглед степена заштите за „$1“",
        "prot_1movedto2": "је преместио [[$1]] на [[$2]]",
        "restriction-edit": "уређивање",
        "restriction-move": "премештање",
        "restriction-create": "прављење",
-       "restriction-upload": "слање",
+       "restriction-upload": "отпремање",
        "restriction-level-sysop": "потпуно заштићено",
        "restriction-level-autoconfirmed": "полузаштићено",
        "restriction-level-all": "сви нивои",
        "undeletedrevisions": "{{PLURAL:$1|измена враћено}} $1",
        "undeletedrevisions-files": "$1 {{PLURAL:$1|измена|измене|измена}} и $2 {{PLURAL:$2|датотека је враћена|датотеке су враћене|датотека је враћено}}",
        "undeletedfiles": "{{PLURAL:$1|датотека враћено}} $1",
-       "cannotundelete": "Враћање није успело:\n$1",
+       "cannotundelete": "Враћање једне или свих ставник није успјело:\n$1",
        "undeletedpage": "<strong>Страница $1 је враћена</strong>\n\nПогледајте [[Special:Log/delete|дневник брисања]] за записе о скорашњим брисањима и враћањима.",
        "undelete-header": "Погледајте [[Special:Log/delete|историјат брисања]] за недавно обрисане странице.",
        "undelete-search-title": "Претрага обрисаних страница",
        "sp-contributions-newbies-sub": "За нове кориснике",
        "sp-contributions-newbies-title": "Доприноси нових корисника",
        "sp-contributions-blocklog": "дневник блокирања",
-       "sp-contributions-deleted": "обрисани доприноси",
+       "sp-contributions-deleted": "обрисани {{GENDER:$1|доприноси}}",
        "sp-contributions-uploads": "отпремања",
        "sp-contributions-logs": "дневници",
        "sp-contributions-talk": "разговор",
        "ipbreason-dropdown": "*Најчешћи разлози за блокирање\n** Уношење лажних информација\n** Уклањање садржаја са страница\n** Постављање веза до спољашњих сајтова\n** Уношење бесмислица у странице\n** Непристојно понашање\n** Употреба више налога\n** Неприхватљиво корисничко име",
        "ipb-hardblock": "Онемогући пријављеним корисницима да уређују с ове ИП адресе",
        "ipbcreateaccount": "Онемогући отварање налога",
-       "ipbemailban": "Ð\9eнемогÑ\83Ñ\9bи ÐºÐ¾Ñ\80иÑ\81никÑ\83 да шаље имејлове",
+       "ipbemailban": "СпÑ\80еÑ\87и ÐºÐ¾Ñ\80иÑ\81ника да шаље имејлове",
        "ipbenableautoblock": "Аутоматски блокирај последњу ИП адресу овог корисника и све даљње адресе с којих покуша да уређује",
        "ipbsubmit": "Блокирај овог корисника",
        "ipbother": "Друго време:",
        "anononlyblock": "само анонимни",
        "noautoblockblock": "аутоматско блокирање је онемогућено",
        "createaccountblock": "отварање налога је онемогућено",
-       "emailblock": "е-поÑ\88Ñ\82а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана",
+       "emailblock": "имеÑ\98л Ñ\98е Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bен",
        "blocklist-nousertalk": "забрањено уређивање сопствене странице за разговор",
        "ipblocklist-empty": "Списак блокирања је празан.",
        "ipblocklist-no-results": "Тражена ИП адреса или корисничко име није блокирано.",
        "block-log-flags-anononly": "само анонимни корисници",
        "block-log-flags-nocreate": "онемогућено отварање налога",
        "block-log-flags-noautoblock": "аутоматско блокирање је онемогућено",
-       "block-log-flags-noemail": "е-поÑ\88Ñ\82а Ñ\98е Ð±Ð»Ð¾ÐºÐ¸Ñ\80ана",
+       "block-log-flags-noemail": "имеÑ\98л Ñ\98е Ð¾Ð½ÐµÐ¼Ð¾Ð³Ñ\83Ñ\9bен",
        "block-log-flags-nousertalk": "забрањено уређивање сопствене странице за разговор",
        "block-log-flags-angry-autoblock": "проширено аутоматско блокирање је омогућено",
        "block-log-flags-hiddenname": "корисничко име је сакривено",
        "lockdbsuccesstext": "База података је закључана.<br />\nСетите се да је [[Special:UnlockDB|откључате]] када завршите с одржавањем.",
        "unlockdbsuccesstext": "База је откључана.",
        "lockfilenotwritable": "Датотека за закључавање базе није отворена за писање.\nДа бисте закључали и откључали базу, датотека мора бити доступна за писање од стране мрежног сервера.",
+       "databaselocked": "База података је већ закључана.",
        "databasenotlocked": "База није закључана.",
        "lockedbyandtime": "(од $1 дана $2 у $3)",
        "move-page": "Премештање „$1“",
        "tooltip-search": "Претрага",
        "tooltip-search-go": "Идите на страницу с овим именом, ако постоји",
        "tooltip-search-fulltext": "Претражите странице с овим текстом",
-       "tooltip-p-logo": "Ð\9fоÑ\81еÑ\82иÑ\82е Ð½Ð°Ñ\81ловну страну",
-       "tooltip-n-mainpage": "Ð\9fоÑ\81еÑ\82иÑ\82е Ð½Ð°Ñ\81ловну страну",
-       "tooltip-n-mainpage-description": "Ð\9fоÑ\81еÑ\82иÑ\82е Ð½Ð°Ñ\81ловну страну",
+       "tooltip-p-logo": "Ð\9fоÑ\81еÑ\82иÑ\82е Ð³Ð»Ð°вну страну",
+       "tooltip-n-mainpage": "Ð\9fоÑ\81еÑ\82иÑ\82е Ð³Ð»Ð°вну страну",
+       "tooltip-n-mainpage-description": "Ð\9fоÑ\81еÑ\82иÑ\82е Ð³Ð»Ð°вну страну",
        "tooltip-n-portal": "О пројекту, шта можете да радите и где да пронађете ствари",
        "tooltip-n-currentevents": "Сазнајте више о текућим догађајима",
        "tooltip-n-recentchanges": "Списак скорашњих измена на викију",
        "tooltip-t-contributions": "Списак доприноса {{GENDER:$1|овог корисника|ове кориснице}}",
        "tooltip-t-emailuser": "Пошаљите имејл {{GENDER:$1|овом кориснику|овој корисници}}",
        "tooltip-t-info": "Више информација о овој страници",
-       "tooltip-t-upload": "Ð\9fоÑ\88аÑ\99иÑ\82е датотеке",
+       "tooltip-t-upload": "Ð\9eÑ\82пÑ\80еми датотеке",
        "tooltip-t-specialpages": "Списак свих посебних страница",
        "tooltip-t-print": "Верзија ове странице за штампање",
        "tooltip-t-permalink": "Стална веза ка овој измени странице",
        "lastmodifiedatby": "Ову страницу је последњи пут {{GENDER:$4|изменио|изменила|изменио}} $3, $1 у $2.",
        "othercontribs": "Засновано на раду корисника $1.",
        "others": "други",
-       "siteusers": "{{PLURAL:$2|корисник|корисници}} на пројекту {{SITENAME}} $1",
+       "siteusers": "{{PLURAL:$2|1={{GENDER:$1|корисник|корисница}}|корисници}} на пројекту {{SITENAME}} $1",
        "anonusers": "{{PLURAL:$2|анониман корисник|анонимни корисници}} на пројекту {{SITENAME}} $1",
        "creditspage": "Аутори странице",
        "nocredits": "Не постоје подаци о аутору ове странице.",
        "pageinfo-article-id": "ИД странице",
        "pageinfo-language": "Језик садржаја странице",
        "pageinfo-content-model": "Модел садржаја странице",
+       "pageinfo-content-model-change": "промени",
        "pageinfo-robot-policy": "Индексирање од стране робота",
        "pageinfo-robot-index": "Дозвољено",
        "pageinfo-robot-noindex": "Није дозвољено",
        "pageinfo-watchers": "Број надгледача странице",
+       "pageinfo-visiting-watchers": "Број надгледача странице који су посјетили скорашње измјене",
        "pageinfo-few-watchers": "Мање од $1 {{PLURAL:$1|пратиоца|пратилаца}}",
        "pageinfo-redirects-name": "Број преусмерења на ову страницу",
        "pageinfo-subpages-name": "Подстранице ове странице",
        "pageinfo-protect-cascading-yes": "Да",
        "pageinfo-protect-cascading-from": "Странице са преносивом заштитом од",
        "pageinfo-category-info": "Информације о категорији",
+       "pageinfo-category-total": "Укупно",
        "pageinfo-category-pages": "Број страница",
        "pageinfo-category-subcats": "Број поткатегорија",
        "pageinfo-category-files": "Број датотека",
        "confirmemail_sendfailed": "{{SITENAME}} не може да пошаље имејл потврду.\nПроверите да ли је имејл адреса правилно написана.\n\nГрешка: $1",
        "confirmemail_invalid": "Потврдни код је неисправан. Вероватно је истекао.",
        "confirmemail_needlogin": "Морате бити $1 да бисте потврдили имејл адресу.",
-       "confirmemail_success": "Ваша имејл адреса је потврђена.\nСада можете да се [[Special:UserLogin|пријавите]]. Желимо вам пријатан боравак на викију.",
+       "confirmemail_success": "Ваша имејл адреса је потврђена.\nСада можете да се [[Special:UserLogin|пријавите]] и уживате у викију.",
        "confirmemail_loggedin": "Ваша имејл адреса је сада потврђена.",
        "confirmemail_subject": "{{SITENAME}} – потврда имејл адресе",
-       "confirmemail_body": "Неко, вероватно ви, са ИП адресе $1 \nје променио имејл адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали могућности имејла на {{SITENAME}}, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
-       "confirmemail_body_changed": "Неко, вероватно ви, са ИП адресе $1 је променио имејл адресу налога „$2“ у ову адресу на викију {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и поново активирали могућности имејла, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $6 у $7",
-       "confirmemail_body_set": "Неко, вероватно ви, са ИП адресе $1 \nје променио имејл адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали могућности имејла на {{SITENAME}}, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
+       "confirmemail_body": "Неко, вероватно ви, са ИП адресе $1,\nотворио је налог „$2“ са овом имејл адресом на викију {{SITENAME}}.\n\nДа потврдите да овај налог стварно припада вама и да активирате\nмогућности имејла на викију {{SITENAME}}, отворите ову везу у прегледачу:\n\n$3\n\nУколико налог *не* припада вама, пратите везу\nда откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче у $4.",
+       "confirmemail_body_changed": "Неко, вероватно ви, са ИП адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на викију {{SITENAME}}.\n\nДа бисте потврдили да овај налог стварно припада вама и поново активирали могућности имејла, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $6 у $7",
+       "confirmemail_body_set": "Неко, вероватно ви, са ИП адресе $1,\nпроменио је имејл адресу налога „$2“ у ову адресу на {{SITENAME}}.\n\nДа бисмо потврдили да овај налог стварно припада вама и поново активирали\nмогућности имејла на {{SITENAME}}, отворите следећу везу у прегледачу:\n\n$3\n\nАко налог *не* припада вама, пратите следећу везу да откажете потврду имејл адресе:\n\n$5\n\nОвај потврдни код истиче $4.",
        "confirmemail_invalidated": "Потврда имејл адресе је отказана",
        "invalidateemail": "Отказивање потврде имејла",
        "notificationemail_body_changed": "Неко, вероватно Ви је променио имејл адресу налога из $2“ у „$3“ са IP адресе $1 на сајту {{SITENAME}}.\n\nАко ово нисте били Ви, одмах обавестите администраторе сајта.",
        "mediastatistics-header-total": "Све датотеке",
        "json-error-syntax": "Грешка у синтакси",
        "headline-anchor-title": "Веза до овог одељка",
-       "special-characters-group-latin": "латиница",
+       "special-characters-group-latin": "Ð\9bатиница",
        "special-characters-group-latinextended": "проширена латиница",
        "special-characters-group-ipa": "ИПА",
        "special-characters-group-symbols": "симболи",
        "log-action-filter-protect-move_prot": "премештање заштите",
        "log-action-filter-rights-rights": "ручно",
        "log-action-filter-rights-autopromote": "аутоматски",
-       "log-action-filter-upload-upload": "ново",
-       "log-action-filter-upload-overwrite": "промена постојећег"
+       "log-action-filter-upload-upload": "Ново отпремање",
+       "log-action-filter-upload-overwrite": "промена постојећег",
+       "authmanager-email-label": "Имејл",
+       "authmanager-email-help": "Имејл адреса",
+       "changecredentials": "Промјена акредитива"
 }
index 76545f0..b656100 100644 (file)
@@ -45,9 +45,9 @@
        "tog-previewontop": "Prikaži pregled pre okvira za uređivanje",
        "tog-previewonfirst": "Prikaži pregled na prvoj izmeni",
        "tog-enotifwatchlistpages": "Pošalji mi imejl kada se promeni stranica/datoteka koju nadgledam",
-       "tog-enotifusertalkpages": "Pošalji mi e-poruku kada se promeni moja stranica za razgovor",
-       "tog-enotifminoredits": "Pošalji mi e-poruku i za manje izmene u stranicama i datotekama",
-       "tog-enotifrevealaddr": "Prikaži moju e-adresu u porukama obaveštenja",
+       "tog-enotifusertalkpages": "Pošalji mi imejl kada se promeni moja stranica za razgovor",
+       "tog-enotifminoredits": "Pošalji mi imejl i za manje izmene u stranicama i datotekama",
+       "tog-enotifrevealaddr": "Prikaži moju imejl adresu u porukama obaveštenja",
        "tog-shownumberswatching": "Prikaži broj korisnika koji nadgledaju",
        "tog-oldsig": "Tekući potpis:",
        "tog-fancysig": "Smatraj potpis kao vikitekst (bez samopovezivanja)",
@@ -61,7 +61,7 @@
        "tog-watchlisthideanons": "Sakrij izmene anonimnih korisnika sa spiska nadgledanja",
        "tog-watchlisthidepatrolled": "Sakrij patrolirane izmene sa spiska nadgledanja",
        "tog-watchlisthidecategorization": "Sakrij kategorizaciju stranica",
-       "tog-ccmeonemails": "Pošalji mi primerke e-poruka koje pošaljem drugim korisnicima",
+       "tog-ccmeonemails": "Pošalji mi kopije imejlova koje pošaljem drugim korisnicima",
        "tog-diffonly": "Ne prikazuj sadržaj stranice ispod razlika",
        "tog-showhiddencats": "Prikaži skrivene kategorije",
        "tog-norollbackdiff": "Izostavi razliku nakon izvršenog vraćanja",
        "qbfind": "Pronađi",
        "qbbrowse": "Potraži",
        "qbedit": "Uredi",
-       "qbpageoptions": "Postavke stranice",
+       "qbpageoptions": "Ova stranica",
        "qbmyoptions": "Moje stranice",
        "faq": "NPP",
        "faqpage": "Project:NPP",
        "history": "Istorija stranice",
        "history_short": "Istorija",
        "updatedmarker": "ažurirano od moje poslednje posete",
-       "printableversion": "Za štampanje",
+       "printableversion": "Verzija za štampanje",
        "permalink": "Trajna veza",
        "print": "Štampaj",
        "view": "Pogledaj",
        "translateinterface": "Da dodate ili promenite prevode za sve vikije, posetite [https://translatewiki.net/ Translejtviki], projekat za lokalizaciju Medijavikija.",
        "cascadeprotected": "Ova stranica je zaključana jer sadrži {{PLURAL:$1|sledeću stranicu koja je zaštićena|sledeće stranice koje su zaštićene}} „prenosivom“ zaštitom:\n$2",
        "namespaceprotected": "Nemate dozvolu da uređujete stranice u imenskom prostoru <strong>$1</strong>.",
-       "customcssprotected": "Nemate dozvolu da menjate ovu CSS stranicu jer sadrži lične postavke drugog korisnika.",
+       "customcssprotected": "Nemate dozvolu da menjate ovu CSS stranicu jer sadrži lična podešavanja drugog korisnika.",
        "customjsprotected": "Nemate dozvolu da menjate ovu stranicu javaskripta jer sadrži lične postavke drugog korisnika.",
        "mycustomcssprotected": "Nemate dozvolu za menjanje ove CSS stranice.",
        "mycustomjsprotected": "Nemate dozvolu za menjanje ove JavaScript stranice.",
        "userlogin": "Prijava/registracija",
        "userloginnocreate": "Prijava",
        "logout": "Odjava",
-       "userlogout": "Odjavi me",
+       "userlogout": "Odjava",
        "notloggedin": "Niste prijavljeni",
        "userlogin-noaccount": "Nemate nalog?",
        "userlogin-joinproject": "Otvorite ga",
        "userlogin-helplink2": "Pomoć pri prijavljivanju",
        "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nKoristite donji obrazac da biste se prijavili kao drugi korisnik.",
        "userlogin-createanother": "Otvori još jedan nalog",
-       "createacct-emailrequired": "Adresa e-pošte",
-       "createacct-emailoptional": "Adresa e-pošte (opciono)",
-       "createacct-email-ph": "Unesite vašu adresu e-pоšte",
-       "createacct-another-email-ph": "Unesite adresu e-pošte",
+       "createacct-emailrequired": "Imejl adresa",
+       "createacct-emailoptional": "Imejl adresa (opciono)",
+       "createacct-email-ph": "Unesite Vašu imejl adresu",
+       "createacct-another-email-ph": "Unesite imejl adresu",
        "createaccountmail": "Koristite privremenu, slučajno stvorenu lozinku i pošaljite na navedenu adresu elektronske pošte",
        "createacct-realname": "Pravo ime (opciono)",
        "createaccountreason": "Razlog:",
        "mailmypassword": "Resetuj lozinku",
        "passwordremindertitle": "{{SITENAME}} — privremena lozinka",
        "passwordremindertext": "Neko, verovatno vi, sa IP adrese $1 je zatražio novu lozinku na vikiju {{SITENAME}} ($4).\nStvorena je privremena lozinka za {{GENDER:$2|korisnika|korisnicu|korisnika}} $2 koja glasi $3.\nUkoliko je ovo vaš zahtev, sada se prijavite i postavite novu lozinku.\nPrivremena lozinka ističe za {{PLURAL:$5|jedan dan|$5 dana|$5 dana}}.\n\nAko je neko drugi zatražio promenu lozinke, ili ste se setili vaše lozinke i ne želite da je menjate, zanemarite ovu poruku.",
-       "noemail": "Ne postoji e-adresa za {{GENDER:$1|korisnika|korisnicu}} $1.",
-       "noemailcreate": "Morate navesti ispravnu e-adresu",
-       "passwordsent": "Nova lozinka je poslata na e-adresu {{GENDER:$1|korisnika|korisnice|korisnika}} $1.\nPrijavite se pošto je primite.",
+       "noemail": "Ne postoji imejl adresa za {{GENDER:$1|korisnika|korisnicu}} $1.",
+       "noemailcreate": "Morate navesti ispravnu imejl adresu.",
+       "passwordsent": "Nova lozinka je poslata na imejl adresu {{GENDER:$1|korisnika|korisnice|korisnika}} $1.\nPrijavite se pošto je primite.",
        "blocked-mailpassword": "Vašoj IP adresi je onemogućeno uređivanje stranica, kao i mogućnost zahtevanja nove lozinke.",
-       "eauthentsent": "Na navedenu e-adresu je poslat potvrdni kod.\nPre nego što pošaljemo daljnje poruke, pratite uputstva s e-pošte da biste potvrdili da ste vi otvorili nalog.",
+       "eauthentsent": "Na navedenu imejl adresu je poslat potvrdni kod.\nPre nego što pošaljemo daljnje poruke, pratite uputstva s imejla da biste potvrdili da ste Vi otvorili nalog.",
        "throttled-mailpassword": "Poruka za promenu lozinke je poslata u {{PLURAL:$1|1=poslednjih sat vremena|poslednja $1 sata|poslednjih $1 sati}}.\nDa bismo sprečili zloupotrebu, podsetnik šaljemo samo jednom u roku od {{PLURAL:$1|1=sat vremena|$1 sata|$1 sati}}.",
        "mailerror": "Greška pri slanju poruke: $1",
-       "acct_creation_throttle_hit": "Posetioci ovog vikija koji koriste vašu IP adresu su već otvorili {{PLURAL:$1|1=jedan nalog|$1 naloga|$1 naloga}} prethodni dan, što je najveći dozvoljeni broj u tom vremenskom periodu.\nZbog toga posetioci s ove IP adrese trenutno ne mogu otvoriti više naloga.",
-       "emailauthenticated": "Vaša e-adresa je potvrđena $2 u $3.",
-       "emailnotauthenticated": "Vaša e-adresa još nije potvrđena.\nPoruke neće biti poslate ni u jednom od sledećih slučajeva.",
-       "noemailprefs": "Unesite e-adresu kako bi ove mogućnosti radile.",
-       "emailconfirmlink": "Potvrdite svoju e-adresu",
-       "invalidemailaddress": "E-adresa ne može biti prihvaćena jer je neispravnog oblika.\nUnesite ispravnu adresu ili ostavite prazno polje.",
-       "cannotchangeemail": "Na ovom vikiju ne možete promeniti e-adresu naloga.",
-       "emaildisabled": "Ovaj sajt ne može da šalje e-poruke.",
+       "acct_creation_throttle_hit": "Posetioci ovog vikija koji koriste vašu IP adresu su već otvorili {{PLURAL:$1|1=jedan nalog|$1 naloga}} prethodni $2, što je najveći dozvoljeni broj u tom vremenskom periodu.\nZbog toga posetioci s ove IP adrese trenutno ne mogu otvoriti više naloga.",
+       "emailauthenticated": "Vaša imejl adresa je potvrđena $2 u $3.",
+       "emailnotauthenticated": "Vaša imejl adresa još nije potvrđena.\nImejl neće biti poslat ni u jednom od sledećih slučajeva.",
+       "noemailprefs": "Unesite imejl adresu kako bi ove mogućnosti radile.",
+       "emailconfirmlink": "Potvrdite svoju imejl adresu",
+       "invalidemailaddress": "Imejl adresa ne može biti prihvaćena jer je neispravnog oblika.\nUnesite ispravnu adresu ili ostavite prazno polje.",
+       "cannotchangeemail": "Na ovom vikiju ne možete promeniti imejl adresu naloga.",
+       "emaildisabled": "Ovaj sajt ne može da šalje imejlove.",
        "accountcreated": "Nalog je otvoren",
        "accountcreatedtext": "Korisnički nalog [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) je otvoren.",
        "createaccount-title": "Otvaranje korisničkog naloga za {{SITENAME}}",
-       "createaccount-text": "Neko je otvorio nalog s vašom e-adresom na {{SITENAME}} ($4) pod imenom $2 i lozinkom $3.\nPrijavite se i promenite svoju lozinku.\n\nAko je ovo greška, zanemarite ovu poruku.",
+       "createaccount-text": "Neko je otvorio nalog s vašom imejl adresom na {{SITENAME}} ($4) pod imenom $2 i lozinkom $3.\nPrijavite se i promenite svoju lozinku.\n\nAko je ovo greška, zanemarite ovu poruku.",
        "login-throttled": "Previše puta ste pokušali da se prijavite. \nMolimo vas da sačekate $1 pre nego što pokušate ponovo.",
        "login-abort-generic": "Neuspešna prijava – prekinuto",
        "login-migrated-generic": "Vaš nalog je migriran i vaše korisničko više ne postoji na ovom vikiju.",
        "pt-createaccount": "Otvori nalog",
        "pt-userlogout": "Odjavi me",
        "php-mail-error-unknown": "Nepoznata greška u funkciji PHP mail().",
-       "user-mail-no-addy": "Pokušali ste da pošaljete poruku bez e-adrese.",
+       "user-mail-no-addy": "Pokušali ste da pošaljete imejl bez imejl adrese.",
        "user-mail-no-body": "Pokušano slanje elektronske poruke s praznim ili nerazumno kratkim sadržajem.",
        "changepassword": "Promeni lozinku",
        "resetpass_announce": "Da biste završili prijavu, podesite novu lozinku ovde.",
        "resetpass_submit": "Postavi lozinku i prijavi me",
        "changepassword-success": "Vaša lozinka je uspešno promenjena.",
        "changepassword-throttled": "Previše puta ste pokušali da se prijavite.\nMolimo vas da sačekate $1 pre nego što pokušate ponovo.",
+       "botpasswords": "Lozinke botova",
        "botpasswords-label-cancel": "Otkaži",
        "botpasswords-label-delete": "Obriši",
        "resetpass_forbidden": "Lozinka ne može biti promenjena",
        "resetpass-submit-cancel": "Otkaži",
        "resetpass-wrong-oldpass": "Neispravna privremena ili tekuća lozinka.\nMožda ste već promenili lozinku ili ste zatražili novu privremenu lozinku.",
        "resetpass-recycled": "Uneli ste sadašnju lozinku, da biste resetovali lozinku morate uneti novu.",
-       "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz e-pošte.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovde:",
+       "resetpass-temp-emailed": "Prijavili ste se sa privremenim kodom iz imejla.\nDa biste završili prijavljivanje morate postaviti novu lozinku ovde:",
        "resetpass-temp-password": "Privremena lozinka:",
        "resetpass-abort-generic": "Promenu lozinke je sprečio dodatak.",
        "resetpass-expired": "Vaša lozinka je istekla. Postavite novu lozinku da biste se prijavili.",
        "resetpass-expired-soft": "Vaša lozinka je istekla i morate postaviti novu. Postavite novu lozinku ili kliknite „{{int:authprovider-resetpass-skip-label}}“ da je postavite kasnije.",
        "resetpass-validity-soft": "Vaša lozinka nije valjana: $1\n\nMolimo izaberite novu ili kliknite „{{int:authprovider-resetpass-skip-label}}“ da resetujete kasnije.",
        "passwordreset": "Obnavljanje lozinke",
-       "passwordreset-text-one": "Popunite ovaj obrazac da biste dobili privremenu lozinku na e-poštu.",
-       "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku na e-poštu.}}",
+       "passwordreset-text-one": "Popunite ovaj obrazac da biste dobili privremenu lozinku na imejl.",
+       "passwordreset-text-many": "{{PLURAL:$1|Ispunite jedno od polja kako biste dobili privremenu lozinku na imejl.}}",
        "passwordreset-disabled": "Obnavljanje lozinke je onemogućeno na ovom vikiju.",
-       "passwordreset-emaildisabled": "E-pošta je onemogućena na ovom vikiju.",
+       "passwordreset-emaildisabled": "Imejl je onemogućen na ovom vikiju.",
        "passwordreset-username": "Korisničko ime:",
        "passwordreset-domain": "Domen:",
-       "passwordreset-capture": "Pogledati krajnju poruku?",
-       "passwordreset-capture-help": "Ako označite ovu kućicu, e-poruka s privremenom lozinkom će biti prikazana i poslata korisniku.",
-       "passwordreset-email": "E-adresa:",
+       "passwordreset-capture": "Pogledati krajnji imejl?",
+       "passwordreset-capture-help": "Ako označite ovo polje, imejl (s privremenom lozinkom) će biti prikazana i poslata korisniku.",
+       "passwordreset-email": "Imejl adresa:",
        "passwordreset-emailtitle": "Detalji naloga na vikiju {{SITENAME}}",
-       "passwordreset-emailtext-ip": "Neko, verovatno Vi, sa IP adrese $1 je zatražio novu lozinku na vikiju {{SITENAME}} ($4).\nSledeći {{PLURAL:$3|korisnički nalog je povezan|korisnički nalozi su povezani}} s ovom e-adresom:\n\n$2\n\n{{PLURAL:$3|Privremena lozinka ističe|Privremene lozinke ističu}} za {{PLURAL:$5|jedan dan|$5 dana}}.\nPrijavite se i izaberite novu lozinku. Ako je neko drugi zahtevao ovu radnju ili ste se setili lozinke i ne želite da je menjate, zanemarite ovu poruku i nastavite koristiti staru lozinku.",
-       "passwordreset-emailtext-user": "{{GENDER:$1|Korisnik je zatražio|Korisnica je zatražila}} podsetnik o podacima za prijavu na vikiju {{SITENAME}} ($4).\nSledeći {{PLURAL:$3|korisnički nalog je povezan|korisnički nalozi su povezani}} s ovom e-adresom:\n\n$2\n\n{{PLURAL:$3|Privremena lozinka ističe|Privremene lozinke ističu}} za {{PLURAL:$5|jedan dan|$5 dana}}.\nPrijavite se i izaberite novu lozinku. Ako je neko drugi zahtevao ovu radnju ili ste se setili lozinke i ne želite da je menjate, zanemarite ovu poruku.",
+       "passwordreset-emailtext-ip": "Neko (verovatno Vi, sa IP adrese $1) je zatražio novu lozinku na vikiju {{SITENAME}} ($4).\nSledeći {{PLURAL:$3|korisnički nalog je povezan|korisnički nalozi su povezani}} s ovom imejl adresom:\n\n$2\n\n{{PLURAL:$3|Privremena lozinka ističe|Privremene lozinke ističu}} za {{PLURAL:$5|jedan dan|$5 dana}}.\nPrijavite se i izaberite novu lozinku. Ako je neko drugi zahtevao ovu radnju ili ste se setili lozinke i ne želite da je menjate, zanemarite ovu poruku i nastavite koristiti staru lozinku.",
+       "passwordreset-emailtext-user": "{{GENDER:$1|Korisnik je zatražio|Korisnica je zatražila}} podsetnik o podacima za prijavu na vikiju {{SITENAME}} ($4).\nSledeći {{PLURAL:$3|korisnički nalog je povezan|korisnički nalozi su povezani}} s ovom imejl adresom:\n\n$2\n\n{{PLURAL:$3|Privremena lozinka ističe|Privremene lozinke ističu}} za {{PLURAL:$5|jedan dan|$5 dana}}.\nPrijavite se i izaberite novu lozinku. Ako je neko drugi zahtevao ovu radnju ili ste se setili lozinke i ne želite da je menjate, zanemarite ovu poruku.",
        "passwordreset-emailelement": "Korisničko ime: \n$1\n\nPrivremena lozinka: \n$2",
        "passwordreset-emailsentemail": "Podsetnik o lozinci je poslat na vašu adresu.",
        "passwordreset-emailsentusername": "Ako ste naveli imejl adresu prilikom registracije, biće poslat imejl za resetovanje lozinke.",
-       "changeemail": "Promeni ili ukloni e-adresu",
+       "changeemail": "Promeni ili ukloni imejl adresu",
        "changeemail-header": "Promenite e-adresu naloga",
        "changeemail-no-info": "Morate biti prijavljeni da biste pristupili ovoj stranici.",
-       "changeemail-oldemail": "Trenutna e-adresa:",
-       "changeemail-newemail": "Nova e-adresa:",
+       "changeemail-oldemail": "Trenutna imejl adresa:",
+       "changeemail-newemail": "Nova imejl adresa:",
        "changeemail-none": "(ništa)",
        "changeemail-password": "Vaša lozinka:",
-       "changeemail-submit": "Promeni",
+       "changeemail-submit": "Promeni imejl",
        "changeemail-throttled": "Previše puta ste pokušali da se prijavite.\nMolimo vas da sačekate $1 pre nego što pokušate ponovo.",
        "changeemail-nochange": "Unesite drugu imejl adresu.",
        "resettokens": "Resetovanje žetona",
        "summary-preview": "Pregled opisa:",
        "subject-preview": "Pregled tema:",
        "blockedtitle": "Korisnik je blokiran",
-       "blockedtext": "<strong>Vaše korisničko ime ili IP adresa je blokirana.</strong>\n\nBlokiranje je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog: <em>$2</em>.\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\nVaša blokirana IP adresa je $3, a ID blokiranja $5.\nNavedite sve podatke iznad pri stvaranju bilo kakvih upita.",
-       "autoblockedtext": "Vaša IP adresa je blokirana jer ju je upotrebljavao drugi korisnik, koga je {{GENDER:$4|blokirao|blokirala}} $1.\nRazlog:\n\n:<em>$2</em>\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\n\nNe možete koristiti mogućnost „Pošalji poruku ovom korisniku“ ako niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].\n\nVaša blokirana IP adresa je $3, a ID $5.\nNavedite sve podatke iznad pri stvaranju bilo kakvih upita.",
+       "blockedtext": "<strong>Vaše korisničko ime ili IP adresa je blokirana.</strong>\n\nBlokiranje je {{GENDER:$4|izvršio|izvršila}} $1.\nRazlog je <em>$2</em>.\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\nNe možete koristiti mogućnost „Pošalji imejl ovom korisniku“ ako niste uneli ispravnu imejl adresu u [[Special:Preferences|podešavanjima]].\nVaša blokirana IP adresa je $3, a ID blokiranja $5.\nNavedite sve podatke iznad pri stvaranju bilo kakvih upita.",
+       "autoblockedtext": "Vaša IP adresa je blokirana jer ju je upotrebljavao drugi korisnik, koga je {{GENDER:$4|blokirao|blokirala}} $1.\nRazlog:\n\n:<em>$2</em>\n\n* Datum blokiranja: $8\n* Blokiranje ističe: $6\n* Ime korisnika: $7\n\nObratite se {{GENDER:$4|korisniku|korisnici}} $1 ili [[{{MediaWiki:Grouppage-sysop}}|administratoru]] da razjasnite stvar.\n\nNe možete koristiti mogućnost „Pošalji imejl ovom korisniku“ ako niste uneli ispravnu imejl adresu u [[Special:Preferences|podešavanjima]].\n\nVaša blokirana IP adresa je $3, a ID $5.\nNavedite sve podatke iznad pri stvaranju bilo kakvih upita.",
        "blockednoreason": "razlog nije naveden",
        "whitelistedittext": "Za uređivanje stranice je potrebno da budete $1.",
-       "confirmedittext": "Morate da potvrdite svoju e-adresu pre uređivanja stranica.\nPostavite i potvrdite adresu preko [[Special:Preferences|podešavanja]].",
+       "confirmedittext": "Morate da potvrdite svoju imejl adresu pre uređivanja stranica.\nPostavite i potvrdite imejl adresu preko [[Special:Preferences|podešavanja]].",
        "nosuchsectiontitle": "Ne mogu da pronađem odeljak",
        "nosuchsectiontext": "Pokušali ste da uredite odeljak koji ne postoji.\nMožda je premešten ili obrisan dok ste pregledali stranicu.",
        "loginreqtitle": "Potrebna je prijava",
        "revdelete-show-no-access": "Greška pri prikazivanju stavke od $1, $2: označena je kao „ograničena“.\nNemate pristup do nje.",
        "revdelete-modify-no-access": "Greška pri menjanju stavke od $1, $2: označena je kao „ograničena“.\nNemate pristup do nje.",
        "revdelete-modify-missing": "Greška pri menjanju IB stavke $1: ona ne postoji u bazi podataka.",
-       "revdelete-no-change": "'''Upozorenje:''' stavka od $1, $2 već poseduje zatražene postavke vidljivosti.",
+       "revdelete-no-change": "<strong>Upozorenje:</strong> stavka od $1, $2 već poseduje zatražena podešavanja vidljivosti.",
        "revdelete-concurrent-change": "Greška pri menjanju stavke od $1, $2: njeno stanje je u međuvremenu promenjeno od strane drugog korisnika.\nPogledajte istoriju.",
        "revdelete-only-restricted": "Greška pri sakrivanju stavke od $1, $2: ne možete sakriti stavke od administratora bez izbora drugih mogućnosti vidljivosti.",
        "revdelete-reason-dropdown": "*Uobičajeni razlozi za brisanje\n** Kršenje autorskog prava\n** Neprikladan komentar ili lični podaci\n** Neprikladno korisničko ime\n** Uvredljivi podaci",
        "prefs-watchlist-token": "Žeton spiska nadgledanja:",
        "prefs-misc": "Druga podešavanja",
        "prefs-resetpass": "Promeni lozinku",
-       "prefs-changeemail": "Promeni ili ukloni e-adresu",
-       "prefs-setemail": "Postavi e-adresu",
-       "prefs-email": "Postavke e-pošte",
+       "prefs-changeemail": "Promeni ili ukloni imejl adresu",
+       "prefs-setemail": "Postavi imejl adresu",
+       "prefs-email": "Postavke imejla",
        "prefs-rendering": "Izgled",
        "saveprefs": "Sačuvaj",
        "restoreprefs": "Vrati sve na podrazumevano (u svim odeljcima)",
        "timezoneregion-europe": "Evropa",
        "timezoneregion-indian": "Indijski okean",
        "timezoneregion-pacific": "Tihi okean",
-       "allowemail": "Omogući primanje e-poruka od drugih korisnika",
+       "allowemail": "Omogući primanje imejla od drugih korisnika",
        "prefs-searchoptions": "Pretraga",
        "prefs-namespaces": "Imenski prostori",
        "default": "podrazumevano",
        "prefs-custom-js": "Prilagođeni javaskript",
        "prefs-common-css-js": "Deljeni CSS/javaskript za sve teme:",
        "prefs-reset-intro": "Možete koristiti ovu stranicu da poništite svoje postavke na podrazumevane vrednosti.\nOva radnja se ne može vratiti.",
-       "prefs-emailconfirm-label": "Potvrda e-adrese:",
-       "youremail": "E-adresa:",
+       "prefs-emailconfirm-label": "Potvrda imejla:",
+       "youremail": "Imejl:",
        "username": "{{GENDER:$1|Korisničko ime}}:",
        "prefs-memberingroups": "{{PLURAL:$1|Grupa|Grupe}}:",
        "prefs-memberingroups-type": "$1",
        "gender-male": "On uređuje viki stranice",
        "gender-female": "Ona uređuje viki stranice",
        "prefs-help-gender": "Neobavezno: koristi se za ispravno obraćanje softvera korisnicima, zavisno od njihovog pola.\nOvaj podatak će biti javan.",
-       "email": "E-adresa",
+       "email": "Imejl",
        "prefs-help-realname": "Pravo ime nije obavezno.\nAko izaberete da ga unesete, ono će biti korišćeno za pripisivanje vašeg rada.",
-       "prefs-help-email": "E-adresa nije obavezna, ali je potrebna u slučaju da zaboravite lozinku.",
+       "prefs-help-email": "Imejl adresa nije obavezna, ali je potrebna u slučaju da zaboravite lozinku.",
        "prefs-help-email-others": "Možete je koristiti i da omogućite drugima da vas kontaktiraju preko korisničke stranice ili stranice za razgovor, bez otkrivanja svog identiteta.",
-       "prefs-help-email-required": "Potrebna je e-adresa.",
+       "prefs-help-email-required": "Potrebna je imejl adresa.",
        "prefs-info": "Osnovni podaci",
        "prefs-i18n": "Internacionalizacija",
        "prefs-signature": "Potpis",
        "right-move-categorypages": "premeštanje kategorija",
        "right-movefile": "premeštanje datoteka",
        "right-suppressredirect": "premeštanje stranica bez ostavljanja preusmerenja",
-       "right-upload": "otpremanje datoteka",
+       "right-upload": "Otpremanje datoteka",
        "right-reupload": "zamenjivanje postojećih datoteka",
        "right-reupload-own": "zamenjivanje sopstvenih datoteka",
        "right-reupload-shared": "menjanje datoteka na deljenom skladištu multimedije",
-       "right-upload_by_url": "otpremanje datoteka sa veb adrese",
+       "right-upload_by_url": "Otpremanje datoteka sa veb-adrese",
        "right-purge": "čišćenje keš memorije stranice bez potvrde",
        "right-autoconfirmed": "bez ograničavanja stavki za IP adrese",
        "right-bot": "smatranje izmena kao automatski proces",
        "right-viewsuppressed": "pregledanje izmena skrivenih od svih korisnika",
        "right-suppressionlog": "pregledanje privatnih dnevnika",
        "right-block": "blokiranje daljih izmena drugih korisnika",
-       "right-blockemail": "onemogućavanje korisnicima da šalju e-poruke",
+       "right-blockemail": "Blokiraj korisniku slanje imejla",
        "right-hideuser": "blokiranje korisničkog imena i njegovo sakrivanje od javnosti",
        "right-ipblock-exempt": "zaobilaženje blokiranja IP adrese, automatska blokiranja i blokiranja opsega",
        "right-unblockself": "deblokiranje samog sebe",
        "right-editmyuserjs": "uređivanje sopstvenih JavaScript datoteka",
        "right-viewmywatchlist": "vidi sopstveni spisak nadgledanja",
        "right-editmywatchlist": "uređivanje sopstvenog spiska nadgledanja; neke preduzete radnje će svejedno dodati stranice na spisak i bez ovog prava",
-       "right-viewmyprivateinfo": "vidite svoje lične podatke (npr. adresu e-pošte, pravo ime)",
-       "right-editmyprivateinfo": "uređivanje sopstvenih ličnih podataka (npr. adresu e-pošte, pravo ime)",
+       "right-viewmyprivateinfo": "Vidite svoje lične podatke (npr. imejl adresu, pravo ime)",
+       "right-editmyprivateinfo": "Уređivanje sopstvenih ličnih podataka (npr. imejl adresa, pravo ime)",
        "right-editmyoptions": "uređivanje sopstvenih podešavanja",
        "right-rollback": "brzo vraćanje izmena poslednjeg korisnika koji je menjao određenu stranicu",
        "right-markbotedits": "označavanje vraćenih izmena kao izmene bota",
        "right-userrights-interwiki": "uređivanje korisničkih prava na drugim vikijima",
        "right-siteadmin": "zaključavanje i otključavanje baze podataka",
        "right-override-export-depth": "izvoz stranica uključujući i povazene stranice do dubine od pet veza",
-       "right-sendemail": "slanje e-poruka drugim korisnicima",
+       "right-sendemail": "Pošalji imejl drugim korisnicima",
        "right-passwordreset": "pregledanje poruka za obnavljanje lozinke",
        "right-managechangetags": "pravljenje i (de)aktiviranje [[Special:Tags|oznaka]]",
        "grant-group-page-interaction": "Uređivanje stranica",
        "grant-editpage": "Uređivanje postojećih stranica",
        "grant-editprotected": "Uređivanje zaštićenih stranica",
        "grant-uploadeditmovefile": "Otpremanje, zamena i premeštanje datoteka",
-       "grant-uploadfile": "Slanje novih datoteka",
+       "grant-uploadfile": "Otpremanje novih datoteka",
        "newuserlogpage": "Dnevnik novih korisnika",
        "newuserlogpagetext": "Ovo je dnevnik novih korisnika.",
        "rightslog": "Dnevnik korisničkih prava",
        "action-move-rootuserpages": "premeštanje osnovnih korisničkih stranica",
        "action-move-categorypages": "premeštanje kategorija",
        "action-movefile": "premeštanje ove datoteke",
-       "action-upload": "slanje ove datoteke",
+       "action-upload": "otpremi ovu datoteku",
        "action-reupload": "zamenjivanje postojeće datoteke",
        "action-reupload-shared": "postavljanje ove datoteke na zajedničko skladište",
-       "action-upload_by_url": "slanje ove datoteke preko URL adrese",
+       "action-upload_by_url": "otpremanje ove datoteke preko veb-adrese",
        "action-writeapi": "pisanje API-ja",
        "action-delete": "brisanje ove stranice",
        "action-deleterevision": "brisanje ove izmene",
        "action-userrights": "uređivanje svih korisničkih prava",
        "action-userrights-interwiki": "uređivanje korisničkih prava na drugim vikijima",
        "action-siteadmin": "zaključavanje ili otključavanje baze podataka",
-       "action-sendemail": "slanje e-poruka",
+       "action-sendemail": "slanje imejlova",
        "action-editmywatchlist": "izmenu sopstvenog spisak nadgledanja",
        "action-viewmywatchlist": "pregled vašeg spisak nadgledanja",
        "action-viewmyprivateinfo": "pregledanje vaših ličnih podataka",
        "recentchanges-page-removed-from-category": "[[:$1]] je uklonjena iz kategorije",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]] i još [[Special:WhatLinksHere/$1|{{PLURAL:$2|jedna stranica|$2 stranice}}]] su uklonjene iz kategorije",
        "autochange-username": "Medijaviki automatska izmena",
-       "upload": "Pošalji datoteku",
-       "uploadbtn": "Pošalji datoteku",
+       "upload": "Otpremi datoteku",
+       "uploadbtn": "Otpremi datoteku",
        "reuploaddesc": "Nazad na obrazac za otpremanje",
        "upload-tryagain": "Pošalji izmenjeni opis datoteke",
        "uploadnologin": "Niste prijavljeni",
-       "uploadnologintext": "Morate biti $1 da biste otpremali datoteke.",
+       "uploadnologintext": "$1 da biste otpremali datoteke.",
        "upload_directory_missing": "Fascikla za slanje ($1) nedostaje i server je ne može napraviti.",
        "upload_directory_read_only": "Server ne može da piše po fascikli za slanje ($1).",
        "uploaderror": "Greška pri otpremanju",
        "uploadwarning-text": "Izmenite opis datoteke i pokušajte ponovo.",
        "savefile": "Sačuvaj datoteku",
        "uploaddisabled": "Otpremanje je onemogućeno.",
-       "copyuploaddisabled": "Slanje putem URL adrese je onemogućeno.",
+       "copyuploaddisabled": "Otpremanje putem veb-adrese je onemogućeno.",
        "uploaddisabledtext": "Otpremanje datoteka je onemogućeno.",
-       "php-uploaddisabledtext": "Slanje datoteka je onemogućeno u PHP-u.\nProverite postavke file_uploads.",
+       "php-uploaddisabledtext": "Otpremanje datoteka je onemogućeno u PHP-u.\nProverite podešavanja file_uploads.",
        "uploadscripted": "Datoteka sadrži HTML ili skriptni kod koji može biti pogrešno protumačen od strane pregledača.",
        "uploadscriptednamespace": "Ova SVG datoteka sadrži pogrešan imenski prostor „$1“",
        "uploadvirus": "Datoteka sadrži virus!\nDetalji: $1",
        "destfilename": "Naziv:",
        "upload-maxfilesize": "Maksimalna veličina datoteke: $1",
        "upload-description": "Opis datoteke",
-       "upload-options": "Postavke slanja",
+       "upload-options": "Postavke otpremanja",
        "watchthisupload": "Nadgledaj ovu datoteku",
        "filewasdeleted": "Datoteka s ovim nazivom je ranije poslata, ali je obrisana.\nProverite $1 pre nego što nastavite s ponovnim slanjem.",
        "filename-bad-prefix": "Naziv datoteke koju šaljete počinje sa <strong>„$1“</strong>, a njega obično dodeljuju digitalni fotoaparati.\nIzaberite naziv datoteke koji opisuje njen sadržaj.",
        "upload-dialog-button-cancel": "Otkaži",
        "upload-dialog-button-done": "Gotovo",
        "upload-dialog-button-save": "Sačuvaj",
-       "upload-dialog-button-upload": "Pošalji",
+       "upload-dialog-button-upload": "Otpremi",
        "upload-form-label-infoform-title": "Detalji",
        "upload-form-label-infoform-name": "Ime",
        "upload-form-label-infoform-description": "Opis",
        "invalid-chunk-offset": "Neispravna polazna tačka",
        "img-auth-accessdenied": "Pristup je odbijen",
        "img-auth-nopathinfo": "Nedostaje PATH_INFO.\nVaš server nije podešen da prosleđuje ovakve podatke.\nMožda je zasnovan na CGI-ju koji ne podržava img_auth.\nPogledajte https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization?uselang=sr-ec.",
-       "img-auth-notindir": "Zahtevana putanja nije u podešenoj fascikli za slanje.",
+       "img-auth-notindir": "Zahtevana putanja nije u podešenoj fascikli za otpremanje.",
        "img-auth-badtitle": "Ne mogu da stvorim ispravan naslov za „$1“.",
        "img-auth-nologinnWL": "Niste prijavljeni i „$1“ nije na spisku dozvoljenih.",
        "img-auth-nofile": "Datoteka „$1“ ne postoji.",
        "http-bad-status": "Došlo je do problema tokom zahteva HTTP: $1 $2",
        "upload-curl-error6": "Ne mogu da pristupim adresi",
        "upload-curl-error6-text": "Ne mogu da pristupim navedenoj adresi.\nProverite da li je adresa ispravna i dostupna.",
-       "upload-curl-error28": "Slanje je isteklo",
+       "upload-curl-error28": "Otpremanje je isteklo",
        "upload-curl-error28-text": "Server ne odgovara na upit.\nProverite da li sajt radi, malo osačekajte i pokušajte ponovo.\nProbajte kasnije kada bude manje opterećenje.",
        "license": "Licenca:",
        "license-header": "Licenca:",
        "sharedupload-desc-create": "Ova datoteka se nalazi na $1 i može da se koristi na drugim projektima.\nNjen opis možete da izmenite na [$2 odgovarajućoj stranici].",
        "filepage-nofile": "Ne postoji datoteka s ovim nazivom.",
        "filepage-nofile-link": "Ne postoji datoteka s ovim nazivom, ali je možete [$1 poslati].",
-       "uploadnewversion-linktext": "Pošalji novu verziju ove datoteke",
+       "uploadnewversion-linktext": "Otpremi novu verziju ove datoteke",
        "shared-repo-from": "iz $1",
        "shared-repo": "zajedničko skladište",
        "shared-repo-name-wikimediacommons": "Vikimedijina ostava",
        "nopagetext": "Tražena stranica ne postoji.",
        "pager-newer-n": "{{PLURAL:$1|noviji 1|novija $1|novijih $1}}",
        "pager-older-n": "{{PLURAL:$1|stariji 1|starijih $1}}",
-       "suppress": "Nadzor",
+       "suppress": "Revizija",
        "querypage-disabled": "Ova posebna stranica je onemogućena radi poboljšanja performansi.",
        "apihelp": "API pomoć",
        "apihelp-no-such-module": "Modul „$1“ nije pronađen.",
        "trackingcategories-nodesc": "Opis nije dostupan.",
        "trackingcategories-disabled": "Kategorija je onemogućena",
        "mailnologin": "Nema adrese za slanje",
-       "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu e-adresu u [[Special:Preferences|podešavanjima]] da biste slali e-poruke drugim korisnicima.",
-       "emailuser": "Pošalji e-poruku",
-       "emailuser-title-target": "Slanje e-poruke {{GENDER:$1|korisniku|korisnici|korisniku}}",
-       "emailuser-title-notarget": "Slanje e-poruke korisniku",
-       "emailpagetext": "Možete da koristite donji obrazac da pošaljete e-poruku {{GENDER:$1|ovom korisniku|ovoj korisnici}}.\nE-adresa koju ste uneli u vašim [[Special:Preferences|podešavanjima]] će se prikazati u polju „Od“, tako da će primalac moći da vam odgovori direktno.",
-       "defemailsubject": "{{SITENAME}} — E-pošta od {{GENDER:$1|korisnika|korisnice}} $1",
-       "usermaildisabled": "Korisnička e-pošta je onemogućena",
-       "usermaildisabledtext": "Ne možete da šaljete e-poruke drugim korisnicima na ovom vikiju",
-       "noemailtitle": "Nema e-adrese",
-       "noemailtext": "Ovaj korisnik nije naveo ispravnu e-adresu.",
-       "nowikiemailtext": "Ovaj korisnik je odlučio da ne prima e-poruke od drugih korisnika.",
+       "mailnologintext": "Morate biti [[Special:UserLogin|prijavljeni]] i imati ispravnu imejl adresu u [[Special:Preferences|podešavanjima]] da biste slali imejlove drugim korisnicima.",
+       "emailuser": "Pošalji imejl",
+       "emailuser-title-target": "Slanje imejla {{GENDER:$1|korisniku|korisnici}}",
+       "emailuser-title-notarget": "Slanje imejla korisniku",
+       "emailpagetext": "Možete da koristite donji obrazac da pošaljete imejl {{GENDER:$1|ovom korisniku|ovoj korisnici}}.\nImejl koji ste uneli u vašim [[Special:Preferences|podešavanjima]] će se prikazati u polju „Od“, tako da će primalac moći da vam odgovori direktno.",
+       "defemailsubject": "{{SITENAME}} — Imejl od {{GENDER:$1|korisnika|korisnice}} „$1”",
+       "usermaildisabled": "Korisnički imejl je onemogućen",
+       "usermaildisabledtext": "Ne možete da šaljete imejlove drugim korisnicima na ovom vikiju",
+       "noemailtitle": "Nema imejl adrese",
+       "noemailtext": "Ovaj korisnik nije naveo ispravnu imejl adresu.",
+       "nowikiemailtext": "Ovaj korisnik je odlučio da ne prima imejlove od drugih korisnika.",
        "emailnotarget": "Nepostojeće ili neispravno korisničko ime primaoca.",
        "emailtarget": "Unos korisničkog imena primaoca",
        "emailusername": "Korisničko ime:",
        "emailusernamesubmit": "Pošalji",
-       "email-legend": "Slanje e-poruka drugom korisniku",
+       "email-legend": "Pošalji imejl drugom korisniku",
        "emailfrom": "Od:",
        "emailto": "Za:",
        "emailsubject": "Naslov:",
        "emailmessage": "Poruka:",
        "emailsend": "Pošalji",
-       "emailccme": "Pošalji mi kopiju poruke na moju e-poštu.",
+       "emailccme": "Pošalji mi kopiju poruke na moj imejl.",
        "emailccsubject": "Kopija vaše poruke korisniku $1: $2",
-       "emailsent": "Poruka je poslata",
-       "emailsenttext": "Vaša e-poruka je poslata.",
-       "emailuserfooter": "Ovu e-poruku je {{GENDER:$1|poslao|poslala}} $1 {{GENDER:$2|korisniku|korisnici}} $2 pomoću „{{int:emailuser}}“ s vikija {{SITENAME}}.",
+       "emailsent": "Imejl je poslat",
+       "emailsenttext": "Vaša imejl poruka je poslata.",
+       "emailuserfooter": "Ovaj imejl je {{GENDER:$1|poslao|poslala}} $1 {{GENDER:$2|korisniku|korisnici}} $2 pomoću „{{int:emailuser}}“ s vikija {{SITENAME}}.",
        "usermessage-summary": "Slanje sistemske poruke.",
        "usermessage-editor": "Uređivač sistemskih poruka",
        "usermessage-template": "MediaWiki:UserMessage",
        "notanarticle": "Nije stranica sa sadržajem",
        "notvisiblerev": "Izmena je obrisana",
        "watchlist-details": "Imate {{PLURAL:$1|$1 stranica|$1 stranice|$1 stranica}} na vašem spisku nadgledanja, ne računajući stranice za razgovor.",
-       "wlheader-enotif": "Obaveštenje e-porukom je omogućeno.",
+       "wlheader-enotif": "Obaveštenje imejlom je omogućeno.",
        "wlheader-showupdated": "Stranice koje su izmenjene otkad ste ih poslednji put posetili su '''podebljane'''.",
        "wlnote": "Ispod {{PLURAL:$1|je poslednja izmena|su poslednje <strong>$1</strong> izmene|je poslednjih <strong>$1</strong> izmena}} u {{PLURAL:$2|prethodnom satu|prethodna <strong>$2</strong> sata|prethodnih <strong>$2</strong> sati}}, zaključno sa $3, $4.",
        "wlshowlast": "Prikaži poslednjih $1 sati, $2 dana",
        "enotif_subject_created": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|napravio je|napravila je}} $2",
        "enotif_subject_moved": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|premestio je|premestila je}} $2",
        "enotif_subject_restored": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|vratio je|vratila je}} $2",
-       "enotif_subject_changed": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|promenio je|promenila je}} $2",
+       "enotif_subject_changed": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|promenio|promenila}} je $2",
        "enotif_body_intro_deleted": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|obrisao|obrisala}} je $2 dana $PAGEEDITDATE Pogledajte $3.",
        "enotif_body_intro_created": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|napravio|napravila}} je $2 dana $PAGEEDITDATE Trenutna izmena nalazi se na $3.",
        "enotif_body_intro_moved": "Stranicu $1 na {{SITENAME}} {{GENDER:$2|premestio|premestila}} je $2 dana $PAGEEDITDATE Trenutna izmena nalazi se na  $3.",
        "enotif_lastvisited": "Pogledajte $1 za sve izmene od vaše poslednje posete.",
        "enotif_lastdiff": "Pogledajte $1 da vidite ovu izmenu.",
        "enotif_anon_editor": "anoniman korisnik $1",
-       "enotif_body": "Poštovani $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nOpis: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt:\ne-pošta: $PAGEEDITOR_EMAIL\nviki: $PAGEEDITOR_WIKI\n\nNeće biti drugih obaveštenja u slučaju daljih izmena ukoliko ne posetite ovu stranicu kada ste prijavljeni.\nMožete i da poništite postavke obaveštenja za sve stranice u vašem spisku nadgledanja.\n\nSrdačan pozdrav, {{SITENAME}}\n\n--\nDa biste promenili postavke u vezi sa e-obaveštenjima, posetite\n{{canonicalurl:{{#special:Preferences}}}}\n\nDa biste promenili postavke u vezi sa spiskom nadgledanja, posetite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nDa biste uklonili ovu stranicu sa spiska nadgledanja, posetite\n$UNWATCHURL\n\nPodrška i dalja pomoć:\n$HELPPAGE",
+       "enotif_body": "Poštovani $WATCHINGUSERNAME,\n \t\n$PAGEINTRO $NEWPAGE\n\nOpis: $PAGESUMMARY $PAGEMINOREDIT\n\nKontakt:\nmejl: $PAGEEDITOR_EMAIL\nviki: $PAGEEDITOR_WIKI\n\nNeće biti drugih obaveštenja u slučaju daljih izmena ukoliko ne posetite ovu stranicu kada ste prijavljeni.\nMožete i da poništite postavke obaveštenja za sve stranice u vašem spisku nadgledanja.\n\nSrdačan pozdrav, {{SITENAME}}\n\n--\nDa biste promenili postavke imejl obaveštenja, posetite\n{{canonicalurl:{{#special:Preferences}}}}\n\nDa biste promenili postavke spiska nadgledanja, posetite\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nDa biste uklonili ovu stranicu sa spiska nadgledanja, posetite\n$UNWATCHURL\n\nPodrška i dalja pomoć:\n$HELPPAGE",
        "created": "napravljena",
        "changed": "izmenjena",
        "deletepage": "Obriši stranicu",
        "protectedarticle": "je zaštitio „[[$1]]“",
        "modifiedarticleprotection": "promenjen stepen zaštite za „[[$1]]“",
        "unprotectedarticle": "je skinuo zaštitu sa stranice „[[$1]]“",
-       "movedarticleprotection": "je premestio postavke zaštite sa „[[$2]]“ na „[[$1]]“",
+       "movedarticleprotection": "je premestio podešavanja zaštite sa „[[$2]]“ na „[[$1]]“",
        "protect-title": "Stepen zaštite za „$1“",
        "protect-title-notallowed": "Pregled stepena zaštite za „$1“",
        "prot_1movedto2": "je premestio [[$1]] na [[$2]]",
        "restriction-edit": "uređivanje",
        "restriction-move": "premeštanje",
        "restriction-create": "pravljenje",
-       "restriction-upload": "slanje",
+       "restriction-upload": "otpremanje",
        "restriction-level-sysop": "potpuno zaštićeno",
        "restriction-level-autoconfirmed": "poluzaštićeno",
        "restriction-level-all": "svi nivoi",
        "sp-contributions-newbies-sub": "Za nove korisnike",
        "sp-contributions-newbies-title": "Doprinosi novih korisnika",
        "sp-contributions-blocklog": "dnevnik blokiranja",
-       "sp-contributions-deleted": "obrisani doprinosi",
+       "sp-contributions-deleted": "obrisani {{GENDER:$1|doprinosi}}",
        "sp-contributions-uploads": "otpremanja",
        "sp-contributions-logs": "dnevnici",
        "sp-contributions-talk": "razgovor",
        "ipbreason-dropdown": "*Najčešći razlozi za blokiranje\n** Unošenje lažnih informacija\n** Uklanjanje sadržaja sa stranica\n** Postavljanje veza do spoljašnjih sajtova\n** Unošenje besmislica u stranice\n** Nepristojno ponašanje\n** Upotreba više naloga\n** Neprihvatljivo korisničko ime",
        "ipb-hardblock": "Onemogući prijavljenim korisnicima da uređuju s ove IP adrese",
        "ipbcreateaccount": "Onemogući otvaranje naloga",
-       "ipbemailban": "Onemogući korisniku da šalje e-poruke",
+       "ipbemailban": "Spreči korisnika da šalje imejlove",
        "ipbenableautoblock": "Automatski blokiraj poslednju IP adresu ovog korisnika i sve daljnje adrese s kojih pokuša da uređuje",
        "ipbsubmit": "Blokiraj ovog korisnika",
        "ipbother": "Drugo vreme:",
        "anononlyblock": "samo anonimni",
        "noautoblockblock": "automatsko blokiranje je onemogućeno",
        "createaccountblock": "otvaranje naloga je onemogućeno",
-       "emailblock": "e-pošta je blokirana",
+       "emailblock": "imejl je onemogućen",
        "blocklist-nousertalk": "zabranjeno uređivanje sopstvene stranice za razgovor",
        "ipblocklist-empty": "Spisak blokiranja je prazan.",
        "ipblocklist-no-results": "Tražena IP adresa ili korisničko ime nije blokirano.",
        "unblocklink": "deblokiraj",
        "change-blocklink": "promeni blokiranje",
        "contribslink": "doprinosi",
-       "emaillink": "pošalji e-poruku",
+       "emaillink": "pošalji imejl",
        "autoblocker": "Automatski ste blokirani jer delite IP adresu s korisnikom/com [[User:$1|$1]].\nRazlog blokiranja: „$2“",
        "blocklogpage": "Dnevnik blokiranja",
        "blocklog-showlog": "{{GENDER:$1|Ovaj korisnik je ranije blokiran|Ova korisnica je ranije blokirana|Ovaj korisnik je ranije blokiran}}.\nIstorija blokiranja se nalazi ispod:",
        "block-log-flags-anononly": "samo anonimni korisnici",
        "block-log-flags-nocreate": "onemogućeno otvaranje naloga",
        "block-log-flags-noautoblock": "automatsko blokiranje je onemogućeno",
-       "block-log-flags-noemail": "e-pošta je blokirana",
+       "block-log-flags-noemail": "imejl je onemogućen",
        "block-log-flags-nousertalk": "zabranjeno uređivanje sopstvene stranice za razgovor",
        "block-log-flags-angry-autoblock": "prošireno automatsko blokiranje je omogućeno",
        "block-log-flags-hiddenname": "korisničko ime je sakriveno",
        "tooltip-search": "Pretraga",
        "tooltip-search-go": "Idite na stranicu s ovim imenom, ako postoji",
        "tooltip-search-fulltext": "Pretražite stranice s ovim tekstom",
-       "tooltip-p-logo": "Posetite naslovnu stranu",
-       "tooltip-n-mainpage": "Posetite naslovnu stranu",
-       "tooltip-n-mainpage-description": "Posetite naslovnu stranu",
+       "tooltip-p-logo": "Posetite glavnu stranu",
+       "tooltip-n-mainpage": "Posetite glavnu stranu",
+       "tooltip-n-mainpage-description": "Posetite glavnu stranu",
        "tooltip-n-portal": "O projektu, šta možete da radite i gde da pronađete stvari",
        "tooltip-n-currentevents": "Saznajte više o tekućim događajima",
        "tooltip-n-recentchanges": "Spisak skorašnjih izmena na vikiju",
        "tooltip-t-contributions": "Spisak doprinosa {{GENDER:$1|ovog korisnika|ove korisnice}}",
        "tooltip-t-emailuser": "Pošaljite imejl {{GENDER:$1|ovom korisniku|ovoj korisnici}}",
        "tooltip-t-info": "Više informacija o ovoj stranici",
-       "tooltip-t-upload": "Pošaljite datoteke",
+       "tooltip-t-upload": "Otpremi datoteke",
        "tooltip-t-specialpages": "Spisak svih posebnih stranica",
        "tooltip-t-print": "Verzija ove stranice za štampanje",
        "tooltip-t-permalink": "Stalna veza ka ovoj izmeni stranice",
        "lastmodifiedatby": "Ovu stranicu je poslednji put {{GENDER:$4|izmenio|izmenila|izmenio}} $3, $1 u $2.",
        "othercontribs": "Zasnovano na radu korisnika $1.",
        "others": "drugi",
-       "siteusers": "{{PLURAL:$2|korisnik|korisnici}} na projektu {{SITENAME}} $1",
+       "siteusers": "{{PLURAL:$2|1={{GENDER:$1|korisnik|korisnica}}|korisnici}} na projektu {{SITENAME}} $1",
        "anonusers": "{{PLURAL:$2|anoniman korisnik|anonimni korisnici}} na projektu {{SITENAME}} $1",
        "creditspage": "Autori stranice",
        "nocredits": "Ne postoje podaci o autoru ove stranice.",
        "pageinfo-robot-index": "Dozvoljeno",
        "pageinfo-robot-noindex": "Nije dozvoljeno",
        "pageinfo-watchers": "Broj nadgledača stranicе",
+       "pageinfo-visiting-watchers": "Broj nadgledača stranice koji su posjetili skorašnje izmjene",
        "pageinfo-few-watchers": "Manje od $1 {{PLURAL:$1|pratioca|pratilaca}}",
        "pageinfo-redirects-name": "Broj preusmerenja na ovu stranicu",
        "pageinfo-subpages-name": "Podstranice ove stranice",
        "exif-urgency-other": "Prilagođeni prioritet ($1)",
        "namespacesall": "svi",
        "monthsall": "sve",
-       "confirmemail": "Potvrda e-adrese",
-       "confirmemail_noemail": "Niste uneli ispravnu e-adresu u [[Special:Preferences|podešavanjima]].",
-       "confirmemail_text": "{{SITENAME}} zahteva da potvrdite e-adresu pre nego što počnete da koristite mogućnosti e-pošte.\nKliknite na dugme ispod za slanje poruke na vašu e-adresu.\nU poruci će se nalaziti veza s potvrdnim kodom;\nunesite je u pregledač da biste potvrdili da je vaša e-adresa ispravna.",
+       "confirmemail": "Potvrda imejl adrese",
+       "confirmemail_noemail": "Niste uneli ispravnu imejl adresu u [[Special:Preferences|podešavanjima]].",
+       "confirmemail_text": "{{SITENAME}} zahteva da potvrdite imejl adresu pre nego što počnete da koristite mogućnosti imejla.\nKliknite na dugme ispod za slanje poruke na vašu adresu.\nU poruci će se nalaziti veza s potvrdnim kodom;\nunesite je u pregledač da biste potvrdili da je vaša imejl adresa ispravna.",
        "confirmemail_pending": "Potvrdni kod vam je već poslat. Ako ste upravo otvorili nalog, onda verovatno treba da sačekate nekoliko minuta da pristigne, pre nego što ponovo zatražite novi kod.",
        "confirmemail_send": "Pošalji potvrdni kod",
        "confirmemail_sent": "Potvrdna poruka je poslata.",
-       "confirmemail_oncreate": "Poslat je potvrdni kod na vašu e-adresu.\nOvaj kod nije potreban za prijavljivanje, ali vam treba da biste uključili mogućnosti e-pošte na vikiju.",
-       "confirmemail_sendfailed": "{{SITENAME}} ne može da pošalje poruku.\nProverite da li je e-adresa pravilno napisana.\n\nGreška: $1",
+       "confirmemail_oncreate": "Poslat je potvrdni kod na vašu imejl adresu.\nOvaj kod nije potreban za prijavljivanje, ali vam treba da biste uključili mogućnosti imejla na vikiju.",
+       "confirmemail_sendfailed": "{{SITENAME}} ne može da pošalje imejl potvrdu.\nProverite da li je imejl adresa pravilno napisana.\n\nGreška: $1",
        "confirmemail_invalid": "Potvrdni kod je neispravan. Verovatno je istekao.",
-       "confirmemail_needlogin": "Morate biti $1 da biste potvrdili e-adresu.",
-       "confirmemail_success": "Vaša e-adresa je potvrđena.\nSada možete da se [[Special:UserLogin|prijavite]]. Želimo vam prijatan boravak na vikiju.",
-       "confirmemail_loggedin": "Vaša e-adresa je sada potvrđena.",
-       "confirmemail_subject": "{{SITENAME}} – potvrda e-adrese",
-       "confirmemail_body": "Neko, verovatno vi, sa IP adrese $1 je otvorio nalog „$2“ na vikiju {{SITENAME}}, navodeći ovu e-adresu.\n\nDa potvrdite da ovaj nalog stvarno pripada vama, kao i da\nomogućite mogućnosti e-pošte, otvorite ovu vezu u pregledaču:\n\n$3\n\nUkoliko niste otvorili nalog, pratite vezu\nispod kako biste prekinuli postupak upisa:\n\n$5\n\nOvaj potvrdni kod ističe $6 u $5.",
-       "confirmemail_body_changed": "Neko, verovatno vi, sa IP adrese $1 je promenio e-adresu naloga „$2“ u ovu adresu na vikiju {{SITENAME}}.\n\nDa biste potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali mogućnosti e-pošte, otvorite sledeću vezu u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeću vezu da otkažete potvrdu e-adrese:\n\n$5\n\nOvaj potvrdni kod ističe $6 u $7",
-       "confirmemail_body_set": "Neko, verovatno vi, sa IP adrese $1 je promenio e-adresu naloga „$2“ u ovu adresu na {{SITENAME}}.\n\nDa bismo potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali mogućnosti e-pošte na {{SITENAME}}, otvorite sledeću vezu u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeću vezu da otkažete potvrdu e-adrese:\n\n$5\n\nOvaj potvrdni kod ističe $4.",
-       "confirmemail_invalidated": "Potvrda e-pošte je otkazana",
-       "invalidateemail": "Otkazivanje potvrde e-pošte",
+       "confirmemail_needlogin": "Morate biti $1 da biste potvrdili imejl adresu.",
+       "confirmemail_success": "Vaša imejl adresa je potvrđena.\nSada možete da se [[Special:UserLogin|prijavite]] i uživate u vikiju.",
+       "confirmemail_loggedin": "Vaša imejl adresa je sada potvrđena.",
+       "confirmemail_subject": "{{SITENAME}} – potvrda imejl adrese",
+       "confirmemail_body": "Neko, verovatno vi, sa IP adrese $1,\notvorio je nalog „$2“ sa ovom imejl adresom na vikiju {{SITENAME}}.\n\nDa potvrdite da ovaj nalog stvarno pripada vama i da aktivirate\nmogućnosti imejla na vikiju {{SITENAME}}, otvorite ovu vezu u pregledaču:\n\n$3\n\nUkoliko nalog *ne* pripada vama, pratite vezu\nda otkažete potvrdu imejl adrese:\n\n$5\n\nOvaj potvrdni kod ističe u $4.",
+       "confirmemail_body_changed": "Neko, verovatno vi, sa IP adrese $1,\npromenio je imejl adresu naloga „$2“ u ovu adresu na vikiju {{SITENAME}}.\n\nDa biste potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali mogućnosti imejla, otvorite sledeću vezu u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeću vezu da otkažete potvrdu imejl adrese:\n\n$5\n\nOvaj potvrdni kod ističe $6 u $7",
+       "confirmemail_body_set": "Neko, verovatno vi, sa IP adrese $1,\npromenio je imejl adresu naloga „$2“ u ovu adresu na {{SITENAME}}.\n\nDa bismo potvrdili da ovaj nalog stvarno pripada vama i ponovo aktivirali\nmogućnosti imejla na {{SITENAME}}, otvorite sledeću vezu u pregledaču:\n\n$3\n\nAko nalog *ne* pripada vama, pratite sledeću vezu da otkažete potvrdu imejl adrese:\n\n$5\n\nOvaj potvrdni kod ističe $4.",
+       "confirmemail_invalidated": "Potvrda imejl adrese je otkazana",
+       "invalidateemail": "Otkazivanje potvrde imejla",
        "scarytranscludedisabled": "[Međuviki uključivanje šablona je onemogućeno]",
        "scarytranscludefailed": "[Dobavljanje šablona za $1 nije uspelo]",
        "scarytranscludefailed-httpstatus": "[Ne mogu da preuzmem šablon $1: HTTP $2]",
        "logentry-newusers-newusers": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog",
        "logentry-newusers-create": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog",
        "logentry-newusers-create2": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog $3",
-       "logentry-newusers-byemail": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog $3 i lozinka je poslata na e-poštu",
+       "logentry-newusers-byemail": "$1 je {{GENDER:$2|otvorio|otvorila}} korisnički nalog $3 i lozinka je poslata na imejl",
        "logentry-newusers-autocreate": "Korisnički nalog $1 je automatski {{GENDER:$2|otvoren}}",
        "logentry-protect-move_prot": "$1 je {{GENDER:$2|premestio|premestila}} postavke zaštite sa $4 na $3",
        "logentry-protect-unprotect": "$1 je {{GENDER:$2|skinuo|skinula}} zaštitu sa stranice $3",
        "mediastatistics-header-total": "Sve datoteke",
        "json-error-syntax": "Greška u sintaksi",
        "headline-anchor-title": "Veza do ovog odeljka",
-       "special-characters-group-latin": "latinica",
+       "special-characters-group-latin": "Latinica",
        "special-characters-group-latinextended": "proširena latinica",
        "special-characters-group-ipa": "IPA",
        "special-characters-group-symbols": "Simboli",
        "mw-widgets-dateinput-placeholder-month": "GGGG-MM",
        "mw-widgets-titleinput-description-new-page": "stranica još uvek ne postoji",
        "mw-widgets-titleinput-description-redirect": "preusmerava na $1",
-       "randomrootpage": "Slučajna korenska stranica"
+       "randomrootpage": "Slučajna korenska stranica",
+       "log-action-filter-upload-upload": "Novo otpremanje",
+       "authmanager-email-label": "Imejl",
+       "authmanager-email-help": "Imejl adresa",
+       "changecredentials": "Promjena akreditiva"
 }
index 6638c84..f54faad 100644 (file)
        "movelogpagetext": "Listan nedan visar sidor som flyttats.",
        "movesubpage": "{{PLURAL:$1|Undersida|Undersidor}}",
        "movesubpagetext": "Denna sida har $1 {{PLURAL:$1|undersida|undersidor}} som visas nedan.",
+       "movesubpagetalktext": "Den motsvarande diskussionssidan har $1 {{PLURAL:$1|undersida|undersidor}} som visas nedan.",
        "movenosubpage": "Denna sida har inga undersidor.",
        "movereason": "Anledning:",
        "revertmove": "återställ",
        "pageinfo-category-pages": "Antal sidor",
        "pageinfo-category-subcats": "Antal underkategorier",
        "pageinfo-category-files": "Antal filer",
+       "pageinfo-user-id": "Användar-ID",
        "markaspatrolleddiff": "Märk som patrullerad",
        "markaspatrolledtext": "Märk den här sidan som patrullerad",
        "markaspatrolledtext-file": "Märk denna filversion som patrullerad",
        "usercssispublic": "Observera: CSS-undersidor bör inte innehålla konfidentiella uppgifter eftersom de kan ses av andra användare.",
        "restrictionsfield-badip": "Ogiltig IP-adress eller intervall: $1",
        "restrictionsfield-label": "Tillåtna IP-intervall:",
-       "restrictionsfield-help": "En IP-adress eller CIDR-intervall per rad. För att aktivera allting, använd<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "En IP-adress eller CIDR-intervall per rad. För att aktivera allting, använd<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Fel: $1",
+       "edit-error-long": "Fel:\n\n$1"
 }
index 73a8101..b75ade0 100644 (file)
        "badsig": "సంతకం చెల్లనిది.\nHTML ట్యాగులను ఒకసారి సరిచూసుకోండి.",
        "badsiglength": "మీ సంతకం చాలా పెద్దగా ఉంది.\nఇది తప్పనిసరిగా $1 {{PLURAL:$1|అక్షరం|అక్షరాల}} లోపులోనే ఉండాలి.",
        "yourgender": "మిమ్మల్ని మీరు ఎలా వర్ణించుకుంటారు?",
-       "gender-unknown": "సాఫà±\8dà°\9fà±\81à°µà±\87à°°à±\81 à°®à°¿à°®à±\8dమలà±\8dని à°\89à°²à±\8dà°²à±\87à°\96à°¿à°\82à°\9aà±\87 à°¸à°\82దరà±\8dà°­à°\82à°²à±\8b, వీలైనంతవరకు లింగ తటస్థతను అవలంబిస్తుంది",
+       "gender-unknown": "సాఫà±\8dà°\9fà±\81à°µà±\87à°°à±\81 à°®à°¿à°®à±\8dమలà±\8dని à°¸à°\82à°¬à±\8bధిà°\82à°\9aà±\87à°ªà±\8dà°ªà±\81à°¡à±\81, వీలైనంతవరకు లింగ తటస్థతను అవలంబిస్తుంది",
        "gender-male": "అతను వికీ పేజీలను సరిదిద్దుతాడు",
        "gender-female": "ఆమె వికీ పేజీలను సరిదిద్దుతుంది",
        "prefs-help-gender": "ఈ అభిరుచిని అమర్చుకోవడం ఐచ్చికం.\nమిమ్మల్ని సంబోధించేప్పుడూ మిమ్మల్ని పేర్కొనేప్పుడూ వ్యాకరణపరంగా సరైన లింగాన్ని  వాడటానికి ఈ విలువ ఉపయోగపడుతుంది.\nఈ సమాచారం బహిరంగం.",
        "confirmemail_oncreate": "మీ ఈ-మెయిలు చిరునామాకి ఒక ధృవీకరణ సంకేతాన్ని పంపించాం.\nలోనికి ప్రవేశించేందుకు ఆ సంకేతం అవసరంలేదు, కానీ ఈ వికీలో ఈ-మెయిలు ఆధారిత సౌలభ్యాలను చేతనం చేసేముందు దాన్ని ఇవ్వవలసి ఉంటుంది.",
        "confirmemail_sendfailed": "{{SITENAME}} మీ  నిర్ధారణ మెయిలుని పంపలేకపోయింది.\nమీ ఈమెయిల్ చిరునామాలో తప్పులున్నాయేమో సరిచూసుకోండి.\n\nమెయిలరు ఇలా చెప్పింది: $1",
        "confirmemail_invalid": "ధృవీకరణ సంకేతం సరైనది కాదు. దానికి కాలం చెల్లి ఉండవచ్చు.",
-       "confirmemail_needlogin": "à°®à±\80 à°\88à°®à±\86యిలà±\81 à°\9aà°¿à°°à±\81నామాని à°¦à±\83వపరà°\9aà°\9fానిà°\95à°¿ à°®à±\80à°°à±\81 $1 à°\89à°\82డాలి.",
+       "confirmemail_needlogin": "à°®à±\80 à°\88à°®à±\86యిలà±\81 à°\9aà°¿à°°à±\81నామానà±\81 à°§à±\8dà°°à±\81à°µà±\80à°\95à°°à°¿à°\82à°\9aà±\87à°\82à°¦à±\81à°\95à±\81, $1.",
        "confirmemail_success": "మీ ఈ-మెయిలు చిరునామా ధృవీకరించబడింది.\nఇక [[Special:UserLogin|లోనికి ప్రవేశించి]] వికీని అస్వాదించండి.",
        "confirmemail_loggedin": "మీ ఈ-మెయిలు చిరునామా ఇప్పుడు రూఢి అయింది.",
        "confirmemail_subject": "{{SITENAME}} ఈ-మెయిలు చిరునామా ధృవీకరణ",
        "table_pager_empty": "ఫలితాలు లేవు",
        "autosumm-blank": "పేజీలోని విషయాన్నంతటినీ తీసేసారు.",
        "autosumm-replace": "పేజీని '$1' తో మారుస్తున్నాం",
-       "autoredircomment": "[[$1]]కు దారిమళ్ళించారు",
+       "autoredircomment": "పేజీని [[$1]] కు దారి మళ్ళించారు",
        "autosumm-new": "'$1' తో కొత్త పేజీని సృష్టించారు",
        "autosumm-newblank": "ఖాళీ పేజీని సృష్టించారు",
        "lag-warn-normal": "$1 {{PLURAL:$1|క్షణం|క్షణాల}} లోపు జరిగిన మార్పులు ఈ జాబితాలో కనిపించకపోవచ్చు.",
        "feedback-thanks": "కృతజ్ఞతలు! మీ ప్రతిస్పందనను “[$2 $1]” పేజీలో చేర్చాం.",
        "feedback-thanks-title": "కృతజ్ఞతలు!",
        "feedback-useragent": "వాడుకరి ఏజెంటు:",
-       "searchsuggest-search": "వెతుకు",
+       "searchsuggest-search": "{{SITENAME}}‌లో వెతకండి",
        "searchsuggest-containing": "కలిగియున్న...",
        "api-error-badaccess-groups": "ఈ వికీ లోనికి దస్త్రాలను ఎక్కించే అనుమతి మీకు లేదు.",
        "api-error-badtoken": "అంతర్గత లోపం: చెడు టోకెన్.",
index c339149..b3fc2ca 100644 (file)
        "special-characters-group-khmer": "Khmer",
        "mw-widgets-dateinput-placeholder-day": "TTTT-BB-AA",
        "mw-widgets-dateinput-placeholder-month": "TTTT-BB",
-       "randomrootpage": "Alin mang pinag-ugatang/pinagmulang pahina"
+       "randomrootpage": "Alin mang pinag-ugatang/pinagmulang pahina",
+       "edit-error-long": "Mga kamalian:"
 }
index aef8f30..f8cb2b3 100644 (file)
@@ -95,7 +95,7 @@
        "tog-hideminor": "Son değişiklikler sayfasında küçük değişiklikleri gizle",
        "tog-hidepatrolled": "Son değişikliklerde devriye görmüş değişiklikleri gizle",
        "tog-newpageshidepatrolled": "Yeni sayfalar listesinde, devriye görmüş sayfaları gizle",
-       "tog-hidecategorization": "Sayfa kategorilendirmesni gizle",
+       "tog-hidecategorization": "Sayfa kategorilendirmesini gizle",
        "tog-extendwatchlist": "İzleme listesini sadece en son değil, tüm değişiklikleri göstermek üzere genişlet",
        "tog-usenewrc": "Son değişiklikler sayfasındaki ve izleme listesindeki değişiklikleri sayfalara gruplandır",
        "tog-numberheadings": "Başlıkları otomatik numaralandır",
        "tog-enotifminoredits": "Sayfalardaki ve dosyalardaki küçük değişikliklerde de bana e-posta gönder",
        "tog-enotifrevealaddr": "Bildirim postalarında benim eposta adresimi açıkça göster",
        "tog-shownumberswatching": "İzleyen kullanıcı sayısını göster",
-       "tog-oldsig": "Mevcut imza:",
+       "tog-oldsig": "Mevcut imzanız:",
        "tog-fancysig": "İmzaya vikimetin muamelesi yap (otomatik bir bağlantı olmadan)",
        "tog-uselivepreview": "Canlı ön izlemeyi kullan",
        "tog-forceeditsummary": "Özeti boş bıraktığımda beni uyar",
        "tog-watchlistreloadautomatically": "Filtre değiştiğinde izleme listesini otomatik yenile (JavaScript gerekir)",
        "tog-watchlisthideanons": "İzleme listemde, anonim kullanıcılar tarafından yapılan değişiklikleri gizle",
        "tog-watchlisthidepatrolled": "İzleme listesinde, devriye görmüş değişiklikleri gizle",
-       "tog-watchlisthidecategorization": "Sayfa kategorilendirmesni gizle",
+       "tog-watchlisthidecategorization": "Sayfa kategorilendirmesini gizle",
        "tog-ccmeonemails": "Diğer kullanıcılara gönderdiğim e-postaların bir kopyasını bana da gönder",
        "tog-diffonly": "Sayfa içeriğini, sürüm farklarının altında gösterme",
        "tog-showhiddencats": "Gizli kategorileri göster",
        "tog-norollbackdiff": "Geri döndürme uygulandıktan sonra farkları gösterme",
        "tog-useeditwarning": "Yaptığım değişiklikleri kaydetmeden sayfayı kapatırken beni uyar",
-       "tog-prefershttps": "Oturum açarken her zaman güvenli bağlantı kullan",
+       "tog-prefershttps": "Oturum açarken her zaman güvenli bağlantı kullanın",
        "underline-always": "Daima",
        "underline-never": "Asla",
        "underline-default": "Tema ya da tarayıcı varsayılanı",
        "newwindow": "(yeni bir pencerede açılır)",
        "cancel": "İptal",
        "moredotdotdot": "Dahası...",
-       "morenotlisted": "Bu liste tam değildir.",
+       "morenotlisted": "Bu liste eksik olabilir.",
        "mypage": "Sayfa",
        "mytalk": "Mesaj",
        "anontalk": "Mesaj",
        "talk": "Tartışma",
        "views": "Görünümler",
        "toolbox": "Araçlar",
-       "tool-link-userrights": "Kullanıcı haklarını değiştir",
-       "tool-link-emailuser": "Bu kullanıcıya e-posta gönder",
+       "tool-link-userrights": "{{GENDER:$1|Kullanıcı}} gruplarını değiştir",
+       "tool-link-emailuser": "Bu {{GENDER:$1|kullanıcıya}} e-posta gönder",
        "userpage": "Kullanıcı sayfasını görüntüle",
        "projectpage": "Proje sayfasını görüntüle",
        "imagepage": "Dosya sayfasını görüntüle",
        "databaseerror-query": "Sorgu: $1",
        "databaseerror-function": "Fonksiyon: $1",
        "databaseerror-error": "Hata: $1",
+       "transaction-duration-limit-exceeded": "Yüksek miktarda gecikme oluşacağından ve işlem süresi izin verilen $2 saniye sınırını aştığından ($1) bu işlem iptal edildi.\nEğer aynı anda birden fazla öge değiştiriyorsanız, bunun yerine küçük işlemler yapmayı deneyin.",
        "laggedslavemode": "<strong>Uyarı:</strong> Sayfa son güncellemeleri içermeyebilir.",
        "readonly": "Veritabanı koruma altına alındı",
        "enterlockreason": "Koruma için bir neden belirtin. Korumanın ne zaman kaldırılacağına dair tahmini bir tarih eklemeyi unutmayın.",
-       "readonlytext": "Veritabanı, muhtemelen olağan bakım/onarım çalışmaları sebebiyle, geçici olarak giriş ve değişiklik yapmaya kapatılmıştır. Çalışmaların ardından normale dönecektir.\n\nVeritabanını kilitleyen yöneticinin açıklaması şu şekilde: $1",
+       "readonlytext": "Veritabanı, muhtemelen olağan bakım/onarım çalışmaları sebebiyle, geçici olarak giriş ve değişiklik yapmaya kapatılmıştır. Çalışmaların ardından normale dönecektir.\n\nVeritabanını kilitleyen sistem yöneticisinin açıklaması şu şekilde: $1",
        "missing-article": "Veritabanında bulunması istenen \"$1\" $2 adlı sayfaya ait metin bulunamadı.\n\nBu durum, genellikle silinmiş bir sayfanın geçmiş bir sürümüne yönlendirilmekten kaynaklanır.\n\nEğer neden bu değilse yazılımda bir hata ile karşılaşmış olabilirsiniz.\nLütfen URL'yi not ederek bunu bir [[Special:ListUsers/sysop|hizmetliye]] iletin.",
        "missingarticle-rev": "(revizyon#: $1)",
        "missingarticle-diff": "(Fark: $1, $2)",
        "protectedinterface": "Bu sayfa yazılım için arayüz metni sağlamaktadır ve kötüye kullanımı önlemek için korumaya alınmıştır.\nBütün vikilere dair çeviri eklemek veya bunları değiştirmek için lütfen MediaWiki yerelleştirme projesi [https://translatewiki.net/ translatewiki.net]'i kullanın.",
        "editinginterface": "<strong>Uyarı:</strong> Yazılım için arayüz metni sağlayan bir sayfayı değiştiriyorsunuz.\nBu sayfada yapılacak değişiklikler diğer kullanıcıların vikilerindeki kullanıcı arayüzlerinin görünümünü de etkileyecektir.",
        "translateinterface": "Tüm vikilerde çeviri eklemek veya çevirileri değiştirmek için lütfen MediaWiki yerelleştirme projesini [https://translatewiki.net/] kullanın.",
-       "cascadeprotected": "Bu sayfa değişiklik yapılması engellenmiştir, çünkü  \"kademeli\" seçeneği aktif hale getirilerek koruma altına alınan {{PLURAL:$1|sayfada|sayfada}} kullanılmaktadır:\n$2",
+       "cascadeprotected": "Bu sayfa değişiklik yapılması engellenmiştir, çünkü  \"kademeli\" seçeneği aktif hale getirilerek koruma altına alınan {{PLURAL:$1|sayfada|sayfalarda}} kullanılmaktadır:\n$2",
        "namespaceprotected": "'''$1''' alandındaki sayfaları düzenlemeye izniniz bulunmamaktadır.",
        "customcssprotected": "Bu sayfayı değiştirmeye yetkiniz bulunmamaktadır, çünkü bu sayfa başka bir kullanıcının kişisel ayarlarını içermektedir.",
        "customjsprotected": "Bu Java Script sayfasını değiştirmeye yetkiniz bulunmamaktadır, çünkü bu sayfa başka bir kullanıcının kişisel ayarlarını içermektedir.",
        "mypreferencesprotected": "Tercihlerinizi düzenlemek için yetkiniz yok.",
        "ns-specialprotected": "{{ns:special}} alanadı içindeki sayfalar değiştirilemez.",
        "titleprotected": "[[User:$1|$1]] tarafından oluşturulması engellenmesi için bu sayfa koruma altına alınmıştır.\nVerilen sebep: <em>$2</em>.",
-       "filereadonlyerror": "\"$2\" dosya deposundaki \"$1\" dosyası salt okunur modda olduğundan dolayı değiştirmek için açılamıyor.\n\nKilitleyen hizmetlinin bu konudaki nedeni: \"$3\".",
+       "filereadonlyerror": "\"$2\" dosya deposundaki \"$1\" dosyası salt okunur modda olduğundan dolayı değiştirmek için açılamıyor.\n\nKilitleyen sistem yöneticisinin bu konudaki nedeni: \"$3\".",
        "invalidtitle-knownnamespace": "\"$2\" alan adı için \"$3\" metni geçersiz bir başlık",
        "invalidtitle-unknownnamespace": "Bilinmeyen $1 ad alanı sayısı ve geçersiz \"$2\" başlık",
        "exception-nologin": "Giriş yapılmamış",
        "createacct-yourpasswordagain-ph": "Parolayı yeniden girin",
        "userlogin-remembermypassword": "Oturumumu sürekli açık tut",
        "userlogin-signwithsecure": "Güvenli bağlantı kullanın",
+       "cannotlogin-title": "Şu an oturum açılamıyor",
+       "cannotlogin-text": "Oturum açmak mümkün değildir.",
        "cannotloginnow-title": "Şu an oturum açılamıyor",
        "cannotloginnow-text": "$1 kullanırken giriş yapmak mümkün değil.",
+       "cannotcreateaccount-title": "Hesap oluşturulamadı",
+       "cannotcreateaccount-text": "Doğrudan hesap oluşturma, bu wiki üzerinde etkin değil.",
        "yourdomainname": "Alan adınız:",
        "password-change-forbidden": "Bu vikide parolanızı değiştiremezsiniz.",
        "externaldberror": "Ya doğrulama veritabanı hatası var ya da kullanıcı hesabınızı güncellemeye yetkiniz yok.",
        "apisandbox-results": "Sonuçlar",
        "apisandbox-request-url-label": "İstek URL:",
        "apisandbox-request-time": "İstek zamanı: $1",
+       "apisandbox-continue": "Devam et",
+       "apisandbox-continue-clear": "Temizle",
        "booksources": "Kaynak kitaplar",
        "booksources-search-legend": "Kitap kaynaklarını ara",
        "booksources-isbn": "ISBN:",
        "wlnote": "$3 saat $4 itibariyle son {{PLURAL:$2|bir saatte|'''$2''' saatte}} yapılan {{PLURAL:$1|son değişiklik|son '''$1''' değişiklik}} aşağıdadır.",
        "wlshowlast": "Son $1 saati $2 günü göster",
        "watchlist-hide": "Gizle",
+       "watchlist-submit": "Göster",
        "wlshowtime": "Gösterilecek zaman aralığı:",
        "wlshowhideminor": "küçük değişiklikler",
        "wlshowhidebots": "botlar",
        "whatlinkshere-hidelinks": "Bağlantıları $1",
        "whatlinkshere-hideimages": "Dosya bağlantılarını $1",
        "whatlinkshere-filters": "Süzgeçler",
+       "whatlinkshere-submit": "Getir",
        "autoblockid": "Otomatik engelleme #$1",
        "block": "Kullanıcıyı engelle",
        "unblock": "Kullanıcının engelini kaldır",
        "confirm-watch-top": "Bu sayfayı izleme listenize ekleyin",
        "confirm-unwatch-button": "TAMAM",
        "confirm-unwatch-top": "Bu sayfayı izleme listenizden çıkarın",
+       "confirm-rollback-button": "Tamam",
        "percent": "%$1",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← önceki sayfa",
index d2a098f..5fff7f1 100644 (file)
        "about": "Дугайында",
        "article": "Допчу арын",
        "newwindow": "(чаа көзенекке)",
-       "cancel": "ЫнÑ\87анмаÑ\81",
+       "cancel": "Ð\9eйÑ\82алал",
        "moredotdotdot": "Артык...",
        "mypage": "Арын",
        "mytalk": "Чугаа",
        "yourpassword": "Чажыт сөс",
        "userlogin-yourpassword": "Пароль",
        "yourpasswordagain": "Чажыт сөзүңерни катап бижиңер:",
-       "remembermypassword": "Мени бо компьютерде сактып алыры ($1 {{PLURAL:$1|1=хүн|хүн}}ге чедир)",
        "login": "Кирери",
        "nav-login-createaccount": "Кирери / бүрүткел бижикти чогаадыры",
        "userlogin": "Кирери / бүрүткел бижикти чогаадыры",
        "minoredit": "Бо эдилге бичии-дир",
        "watchthis": "Бо арынны хайгаараар",
        "savearticle": "Арынны шыгжаар",
+       "savechanges": "Өскертилгени шыгжаар",
        "preview": "Чижеглей көөрү",
        "showpreview": "Хынап көр",
-       "showdiff": "Кииртинген эдилгелер",
+       "showdiff": "Өскертилгени көргүзер",
        "anoneditwarning": "<strong> Кичээңгейлиг! </strong> Сайтта бүрүткеттинмээн-дир силер. Кандыг-даа бол эдилгелер киирер болзуңарза, IP-адрезиңер хөйге көскү болур. Сайтче <strong>[$1 кире бээр азы]</strong> азы <strong>[$2 бүрүткеттинип алыр] болзуңарза, эдилгелер силерниң адыңар-биле холбаалыг апаар, силерге өске-даа эптиг аргаларлыг тыптып кээр.",
        "missingcommenttext": "Тайылбырни адаанда чогаадыңар.",
        "summary-preview": "Түңнелдү чижеглей көөрү:",
        "editusergroup": "Ажыглакчының бөлгүмнерни өскертири",
        "editinguser": "Changing user rights of user '''[[User:$1|$1]]''' ([[User talk:$1|{{int:talkpagelinktext}}]]{{int:pipe-separator}}[[Special:Contributions/$1|{{int:contribslink}}]])",
        "userrights-editusergroup": "Ажыглакчының бөлгүмнерни өскертири",
-       "saveusergroups": "Ажыглакчының бөлгүмнерни шыгжаары",
+       "saveusergroups": "{{GENDER:$1|Ажыглакчының|Ажыглакчының}} бөлгүмнерин шыгжаар",
        "userrights-reason": "Чылдагаан:",
        "group": "Бөлгүм:",
        "group-user": "Ажыглакчылар",
        "rcshowhideminor-hide": "чажырар",
        "rcshowhidebots": "Роботтарны $1",
        "rcshowhidebots-show": "Көргүзер",
+       "rcshowhidebots-hide": "Чажырар",
        "rcshowhideliu": "бүрүткеттинген киржикчилер $1",
        "rcshowhideliu-show": "көргүзер",
        "rcshowhideliu-hide": "Чажырар",
        "feedback-cancel": "Соксаары",
        "feedback-message": "Чагаа:",
        "feedback-subject": "Кол сөс:",
-       "searchsuggest-search": "Дилээр",
+       "searchsuggest-search": "{{SITENAME}} иштинден дилээр",
        "duration-seconds": "$1 {{PLURAL:$1|секунда|секунда}}",
        "duration-minutes": "$1 {{PLURAL:$1|минут|минут}}",
        "duration-hours": "$1 {{PLURAL:$1|шак|шак}}",
index 7bff7f2..4b39079 100644 (file)
@@ -6,26 +6,46 @@
                        "Udmwiki",
                        "ОйЛ",
                        "לערי ריינהארט",
-                       "TMg"
+                       "TMg",
+                       "AlnashPiyash2",
+                       "Irus",
+                       "Shklyaev",
+                       "Wadorgurt"
                ]
        },
-       "tog-underline": "Линкъёс ултӥз гожен сызоно",
-       "tog-hideminor": "Берпуметӥ тупатонъёслэн списоксэс ичи воштонъёстэк возьматыны",
-       "tog-hidepatrolled": "Берпуметӥ тупатонъёслэн списоксэс партрулировать каремын воштонъёстэк возьматыны",
-       "tog-newpageshidepatrolled": "Выль бамъёслэн списоксэс партрулировать каремын бамъёстэк возьматыны",
+       "tog-underline": "Чӧлсконъёсыз ултӥз гожен сызоно",
+       "tog-hideminor": "Выль тупатонъёслэн списоксэс ичи воштонъёстэк возьматыны",
+       "tog-hidepatrolled": "Выль тупатонъёслэн списоксэс эскерем воштонъёстэк возьматыны",
+       "tog-newpageshidepatrolled": "Выль бамъёслэн списоксэс эскерем бамъёстэк возьматыны",
+       "tog-hidecategorization": "Бамъёслэсь категоризацизэс ватыны",
        "tog-extendwatchlist": "Чаклан списокын вань тупатонъёсты возьматыны (озьытэк берпуметӥоссэс гинэ)",
        "tog-usenewrc": "Выль тупатонъёслэсь списоксэс умояллям сямен возьматыны (JavsScript кулэ)",
        "tog-numberheadings": "Заголовокъёсты автоматически нумеровать карыны",
-       "tog-showtoolbar": "Тупатон тӥрлыкъёслэн панельзэс возьматыны (JavaScript кулэ)",
+       "tog-showtoolbar": "Тупатон тӥрлыкъёслэн панельзэс возьматыны",
        "tog-editondblclick": "Бамъёсты шырлэсь зӥбонзэ кык пол зӥбыса тупатыны (JavaScript кулэ)",
        "tog-editsectiononrightclick": "Cекциолэсь заголовок вылазы шырлэн бур кнопкаеныз зӥбыса тупатонзэс лэзьыны (JavaScript кулэ)",
        "tog-watchcreations": "Мынэсьтым кылдытэм бамъёсме но ӝуткам файлъёсме чаклан списокам пыртыны",
        "tog-watchdefault": "Мынэсьтым тупатэм бамъёсме но файлъёсме чаклан списокам пыртыны",
        "tog-watchmoves": "Мынэсьтым мукет интые выжтэм бамъёсме но файлъёсме чаклан списокам пыртыны",
        "tog-watchdeletion": "Мынэсьтым ӵушыса быдтэм бамъёсме но файлъёсме чаклан списоке пыртыны",
+       "tog-watchuploads": "Мынам загрузить карем файлъёсме чаклан списоке пыртыны",
+       "tog-watchrollback": "Чаклан списоке пыртыны бамъёсыз, кудъёсаз мон откат лэсьтӥ",
        "tog-minordefault": "Вань воштонъёсты «ичи воштон» пусэн пусйыны",
        "tog-previewontop": "Утён азьвыл учконлэсь укнозэ тупатон укнолэсь азьвылгес возьматыны",
-       "tog-previewonfirst": "Бам нырысьсэ утиськыкуз уётн азьвыл учконэз возьматыны",
+       "tog-previewonfirst": "Тупатыны кутскыку возьматыны предпросмотрез",
+       "tog-enotifwatchlistpages": "Чаклан списокысь бамъёсыз но файлъёсыз тупатэм сярысь ивортыны электронной почта пыр",
+       "tog-enotifusertalkpages": "Вераськон бамез тупатон сярысь ивортыны электронной почта пыр",
+       "tog-enotifminoredits": "Ивортыны соку но, куке бамын яке файлын ичи воштон лэсьтэмын",
+       "tog-enotifrevealaddr": "Мынэсьтым почта адресме возьматыны ивортӥсь сообщениосын",
+       "tog-shownumberswatching": "Возьматыны викиавторъёслэсь лыдзэс, кудъёсыз бамез чаклан списоке пыртӥзы",
+       "tog-fancysig": "Подписьлэн аслам вики-разметкае (автоматической ӵӧлсконтэк)",
+       "tog-watchlisthideown": "Мынэсьтым тупатонъёсме чаклан списокысь ватыны",
+       "tog-watchlisthidebots": "Чаклан списокысь ватоно ботъёслэсь тупатэмзэс",
+       "tog-watchlisthideminor": "Чаклан списокысь ватоно ичи воштонъёсыз",
+       "tog-watchlisthideliu": "Авторизированной викиавторъёслэсь тупатэмъёссэс чаклан списокысь ватыны",
+       "tog-watchlisthidepatrolled": "Эскерем тупатонъёсыз чаклан списокысь ватыны",
+       "tog-watchlisthidecategorization": "Бамъёслэсь категоризацизэс ватыны",
+       "tog-showhiddencats": "Возьматоно ватэм категориосыз",
        "underline-always": "Котьку",
        "underline-never": "Ноку",
        "underline-default": "Браузерлэсь настройкаоссэ уже кутоно",
@@ -71,7 +91,7 @@
        "september-gen": "куарусёнэ",
        "october-gen": "коньывуонэ",
        "november-gen": "шуркынмонэ",
-       "december-gen": "толсурэ",
+       "december-gen": "толсуре",
        "jan": "тшт",
        "feb": "тпт",
        "mar": "южт",
        "oct": "квт",
        "nov": "шкт",
        "dec": "тст",
+       "january-date": "Толшор $1",
+       "february-date": "Тулыспал $1",
+       "march-date": "Южтолэзь $1",
+       "april-date": "Ожтолэзь $1",
+       "may-date": "Куартолэзь $1",
+       "june-date": "Инвожо $1",
+       "july-date": "Пӧсьтолэзь $1",
+       "august-date": "Гудырикошкон $1",
+       "september-date": "Куарусён $1",
+       "october-date": "Коньывуон $1",
+       "november-date": "Шуркынмон $1",
+       "december-date": "Толсур $1",
        "pagecategories": "{{PLURAL:$1|1=Категория|Категориос}}",
        "category_header": "«$1» категориысь бамъёс",
        "subcategories": "Подкатегориос",
        "category-empty": "''Та категориын али бамъёс но, файлъёс но ӧвӧл.''",
        "hidden-categories": "{{PLURAL:$1|1=Ватэм категория|Ватэм категориос}}",
        "hidden-category-category": "Ватэм категориос",
-       "category-subcat-count": "{{PLURAL:$2|1=Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 подкатегория $2 пӧлысь.}}",
-       "category-subcat-count-limited": "Со категориын $1 подкатегория.",
-       "category-article-count": "{{PLURAL:$2|1=Со категориын одӥг бам гинэ.|Возьматэмын $1 бам $2 пӧлысь.}}",
-       "category-article-count-limited": "Со категориын $1 бам.",
-       "category-file-count": "{{PLURAL:$2|1=Со категориын одӥг файл гинэ.|Возьматэмын $1 файл $2 пӧлысь.}}",
-       "category-file-count-limited": "Со категориын $1 файл.",
+       "category-subcat-count": "{{PLURAL:$2|1=Со категориын одӥг подкатегория гинэ.|Возьматэмын $1 {{PLURAL:$1|подкатегория|подкатегориос}} $2 пӧлысь.}}",
+       "category-subcat-count-limited": "Со категориын {{PLURAL:$1|$1 подкатегория}}.",
+       "category-article-count": "{{PLURAL:$2|1=Со категориын одӥг бам гинэ.|Возьматэмын {{PLURAL:$1|$1 бам}} $2 пӧлысь.}}",
+       "category-article-count-limited": "Со категориын {{PLURAL:$1|$1 бам}}.",
+       "category-file-count": "{{PLURAL:$2|1=Со категориын одӥг файл гинэ.|Возьматэмын {{PLURAL:$1|$1 файл}} $2 пӧлысь.}}",
+       "category-file-count-limited": "Со категориын {{PLURAL:$1|$1 файл}}.",
        "listingcontinuesabbrev": "азьлань",
        "index-category": "Индексировать кароно бамъёс",
        "noindex-category": "Индексировать каронтэм бамъёс",
        "about": "Та сярысь",
        "article": "Статья",
-       "mypage": "Ас бам",
+       "cancel": "Берытсконо",
+       "mypage": "Бам",
        "mytalk": "Викиавтор сярысь вераськон",
-       "anontalk": "Со IP-адрес сярысь вераськон",
+       "anontalk": "Сярысь вераськон",
        "navigation": "Навигация",
+       "and": "&#32;но",
+       "qbfind": "Утчан",
+       "qbbrowse": "Учкыны",
+       "qbedit": "Тупатыны",
        "qbpageoptions": "Бамлэн настройкаосыз",
        "faq": "Юан-веран",
        "faqpage": "Project:Юан-веран",
+       "variants": "Вариантъёс",
+       "navigation-heading": "Навигация",
        "errorpagetitle": "Янгыш",
        "tagline": "{{SITENAME}}-ысь материал",
        "help": "Валэктонъёс",
        "search": "Утчан",
        "searchbutton": "Утчано",
+       "go": "Мыноно",
        "searcharticle": "Мыноно",
        "history": "Бамлэн историез",
        "history_short": "история",
+       "updatedmarker": "воштӥськемын мынам берпуметӥ пыраме бере",
        "printableversion": "Печатламон версия",
        "permalink": "Ӵапак та версиезлы линк",
        "print": "Печатлано",
+       "view": "Учкон",
+       "view-foreign": "$1 сайтын учконы",
        "edit": "тупатыны",
+       "create": "Кылдытоно",
+       "editthispage": "Та бамез тупатыны",
+       "create-this-page": "Та бамез кылдытыны",
        "delete": "Быдтыны",
+       "deletethispage": "Та бамез быдтыны",
+       "undeletethispage": "Та бамез быдтыны",
        "protect": "Утьыны",
+       "protect_change": "воштыны",
+       "protectthispage": "Та бамез утьыны",
+       "unprotect": "Утемез воштыны",
+       "unprotectthispage": "Та бамлэсь утемзэ воштыны",
+       "newpage": "Выль бам",
+       "talkpage": "Та бам сярысь вераськыны",
        "talkpagelinktext": "Вераськон",
+       "specialpage": "Ваньмыз панель",
+       "personaltools": "Нимаз тӥрлыке",
+       "articlepage": "Статьяез учкыны",
        "talk": "Вераськон",
+       "views": "Учконъёс",
        "toolbox": "Тӥрлык",
+       "userpage": "Викиавторлэсь бамзэ учкыны",
+       "templatepage": "Шаблонлэсь бамзэ учкыны",
+       "categorypage": "Категорилэсь бамзэ учкыны",
+       "viewtalkpage": "Вераськонэз учкыны",
+       "otherlanguages": "Мукет кылъёсын",
+       "redirectedfrom": "(Перенаправлять $1)",
+       "redirectpagesub": "Выжытон бам",
+       "redirectto": "Выжытон:",
+       "lastmodifiedat": "Та бамлэн берпуметӥ воштонэз: $2, $1.",
+       "protectedpage": "Утем бам",
+       "jumpto": "Выжон:",
        "jumptonavigation": "навигация",
        "jumptosearch": "утчан",
+       "pool-errorunknown": "Тодмотэм янгыш",
+       "aboutsite": "«{{SITENAME}}»-лэн описаниез",
+       "aboutpage": "Project:Описание",
+       "copyright": "Пуштрос $1 лицензияя луэ ярамон (мукетыз валэктэмын ӧвӧл дыръя).",
+       "copyrightpage": "{{ns:project}}:Автор праваос",
        "currentevents": "Выль иворъёс",
        "currentevents-url": "Project:Выль иворъёс",
+       "disclaimers": "Кыл кутыны пумит луон",
+       "disclaimerpage": "Project:Кыл кутыны пумит луон",
+       "helppage-top-gethelp": "Юрттэт",
        "mainpage": "Кутскон бам",
        "mainpage-description": "Кутскон бам",
        "portal": "Сообщество",
        "portal-url": "Project:Портал сообщества",
+       "privacy": "Конфиденциальностья политика",
+       "privacypage": "Project:Конфиденциальностья политика",
+       "badaccess": "Янгышъёс юаське",
+       "badaccess-group0": "Быдэстэм ужез тонэ уг лэзьы, кин тонэ курозы.",
+       "badaccess-groups": "Ужъёсын но, кудаз тӥледыз курисько поциент {{PLURAL:$2|туркым|группа одӥг}}: $1.",
+       "versionrequired": "MediaWiki доллар кулэ версия $1",
+       "ok": "OK",
        "retrievedfrom": "«$1»-лэсь басьтэмын",
        "editsection": "тупатыны",
+       "editold": "тупатыны",
+       "viewsourceold": "кодзэ учкыны",
+       "editlink": "тупатыны",
+       "viewsourcelink": "кодзэ учкыны",
        "editsectionhint": "$1 секциез тупатоно",
+       "toc": "Пуштрос",
        "showtoc": "возьматоно",
        "hidetoc": "ватоно",
+       "collapsible-collapse": "ватоно",
+       "collapsible-expand": "возьматоно",
+       "confirmable-yes": "Мед",
+       "confirmable-no": "Ӧвӧл",
+       "viewdeleted": "Учкыны $1",
        "site-rss-feed": "$1 — RSS-лента",
        "site-atom-feed": "$1 — Atom-лента",
+       "page-atom-feed": "«$1» Атом-лента",
        "red-link-title": "$1 (со бам ӧвӧл на)",
+       "nstab-main": "Бам",
        "nstab-user": "Викиавтор",
+       "nstab-media": "Мультимедиа",
+       "nstab-special": "Ваньмыз панель",
+       "nstab-project": "Проект сярысь",
+       "nstab-image": "Файл",
        "nstab-mediawiki": "Ивортон",
+       "nstab-template": "Шаблон",
+       "nstab-help": "Валэктон",
+       "nstab-category": "Категория",
+       "mainpage-nstab": "Кутскон бам",
+       "error": "Янгыш",
+       "databaseerror-query": "Курон: $1",
+       "databaseerror-function": "Функция: $1",
+       "databaseerror-error": "Янгыш: $1",
        "viewsource": "Кодзэ учкыны",
-       "login": "Пырон",
+       "viewsource-title": "Текст потон бам $1",
+       "actionthrottled": "Кекатыны ужъёс",
+       "actionthrottledtext": "Ужрадлэн ӟечлыкез злоупотребление-нюръяськон, та ужрад тӥ понна укыр трос поллы сюбегамын быдэстон вакчи дыр кусыпъёс, лимитъёс, та тӥляд но тубе.\nПожалуйста, кӧня ке минут ортчыса, нош ик утчасько.",
+       "protectedpagetext": "Та бамез утьыны луэ шуыса, яке мукет уже предотвращать редактировать карон.",
+       "viewsourcetext": "Та бамез учкыны быгатӥськоды тӥ но потон кӧчыро.",
+       "viewyourtext": "Ошмес но, тонэ учкыны быгатӥськоды кӧчырыны <strong>тон шонертон</strong> та бамам.",
+       "protectedinterface": "Та текст бам вайытиськом, та программаын вики интерфейсъёс, но дурбасьтэ, мед злоупотребление предотвращать.\nВика ватсаса, ваньзэ воштыны яке берыктон понна, пожалуйста, [https://translatewiki.net/ translatewiki.net] MediaWiki локализация проект.",
+       "editinginterface": "<strong>Юа:</strong> редактировать карыны бамзэ тон, программное обеспечение понна со интерфейс текстовые кылдытон понна кутыны.\nТа викилэн мукет бамаз луись туссэ воштон понна та интерфейсэз пользователь пользовательский педпал быгатонлыкъёссэс.",
+       "namespaceprotected": "Тон дорын редактировать карыны бам ӧвӧл юаське <кужмо>$1</strong> инты нимъёс.",
+       "logouttext": "<strong>Тон али потэ.</strong>\n\nУчком, мар быгатозы бам куд-ог сямъёсты тӥледыз кадь возьматӥсько ке луысал, азьвыл сямен азьвыл системая пыртэмын, тон ӧд сузя, дыр кеш браузер.",
+       "welcomeuser": "Гажаса-а, $1!",
+       "welcomecreation-msg": "Тӥляд гожъямъёсты учётной кылдытэмын вал.\nТӥ быгатӥськоды воштэ {{SITENAME}} [[Special:Preferences|параметръёсты]] ке потэ тӥледлы.",
+       "yourname": "Пырон ним:",
+       "userlogin-yourname": "Пырон ним:",
+       "yourpassword": "Лушкемкыл:",
+       "userlogin-yourpassword": "Лушкемкыл",
+       "cannotcreateaccount-title": "Уг быгатиськы гожъян кылдӥз учётной",
+       "yourdomainname": "Тӥ доменэн:",
+       "login": "Пырыны",
        "nav-login-createaccount": "Нимдэс вераны / Регистрациез ортчытыны",
        "userlogin": "Регистрациез ортчытыны яке Википедие пырыны",
-       "userloginnocreate": "Пырон",
+       "userloginnocreate": "Пырыны",
        "logout": "Кошкыны",
-       "userlogout": "Кошкыны",
+       "userlogout": "Потыны",
+       "nologin": "Учётной книга ӧвӧл-а? $1.",
+       "nologinlink": "Выль вики-авторлэн регистрациез",
        "createaccount": "выль вики-авторлэн регистрациез",
+       "gotaccountlink": "Пырыны",
+       "userlogin-resetpassword-link": "Тӥлесьтыд парольдэс куштыны?",
+       "userlogin-helplink2": "Пыронъя юрттэт",
+       "createacct-emailrequired": "Электронной почталэн адресэз",
+       "createacct-submit": "Выль вики-авторлэн регистрациез",
+       "createacct-another-submit": "Выль вики-авторлэн регистрациез",
+       "loginerror": "Янгышъёс пырон",
+       "createacct-error": "Янгышъёс бордын учётной книга кылдытыны",
+       "createaccounterror": "Уг быгатиськы гожъян учётной кылдоз: $1",
+       "nocookiesnew": "Книга кылдытыны учётной пользователь вал, нош система тон уд пыры.\n{{SITENAME}} пользователь cookies пырон понна кутыны.\nDisconnect cookies тонэ дорам.\nПожалуйста, со гожтӥське, нош собере выльысь пырыны логин но пароль.",
+       "nocookieslogin": "{{SITENAME}} пользователь cookies пырон понна кутыны.\nDisconnect cookies тонэ дорам.\nПожалуйста, соосты утчано, выльысь гожтыны.",
+       "blocked-mailpassword": "Тон IP-адрес заблокировать-ысь редактировать карон. Злоупотребление предотвращение понна, та понна кутыны ӧз лэзиське пароль-ысь восстановление IP-адрес.",
+       "loginlanguagelabel": " Кыл: $1",
+       "pt-login": "Пырыны",
+       "pt-login-button": "Пырыны",
+       "pt-createaccount": "Выль вики-авторлэн регистрациез",
+       "pt-userlogout": "Потыны",
+       "oldpassword": "Вуж лушкемкыл:",
+       "newpassword": "Выль лушкемкыл:",
+       "passwordreset-username": "Пырон ним:",
        "summary": "Мар но малы тупатэмын? (вакчияк):",
        "minoredit": "Ичи воштон",
-       "noarticletext": "В настоящий момент текст на данной странице отсутствует.\nВы можете [[Special:Search/{{PAGENAME}}|найти упоминание данного названия]] на других страницах,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} найти соответствующие записи журналов],\nили '''[{{fullurl:{{FULLPAGENAME}}|action=edit}} создать страницу с таким названием]'''</span>.",
+       "watchthis": "Та бамез чаклан списоке пыртыны",
+       "savearticle": "Бамез гожтоно",
+       "preview": "Бамез эскерон",
+       "showpreview": "Бамез эскерон",
+       "showdiff": "Пыртэм воштонъёс",
+       "blockedtitle": "Заблокировать пыриськисьёс",
+       "blockedtext": "<strong>Книгае яке учётной IP-адрес заблокирован.</strong>\n\nБлокировка администратор потӥз $1.\nВозьмалэ вуоно мугез: \"\"$2\"\".\n\n* Кутскон блокировка: $8\n* Блокировка ортчиз: $6\n* Блокировка меретъёсыз: $7\n\nБыгатӥськод-а тон герӟаськемын $1 яке мукет котькудӥныз [[{{MediaWiki:Grouppage-sysop}}|администраторъёс]], блокировка мед эскерозы.\nУчком, мар кутыны уг быгато функцизэс \"гожтэт\", ас ке [[Special:Preferences|настройка персональной]] зуркатӥсь яке электронной почтаезлэн адресэз эн чуртна уг корректный, яке гожтӥськод ке, гожтэт ыстон укшась блокировка алон.\nТон IP-адрес — $3, блокировка идентификаторлэн — $5.\nПожалуйста, аслэсьтым тодон-та вазиськонэз котьку возьмано.",
+       "autoblockedtext": "Тон IP-адрес, герӟет автоматически заблокирован а со, мар солэн кутыны луоно азьвыл кин ке но пырисьёс пӧлысь, заблокирован {{GENDER:$4|участник|куакеч}} $1. \nБлокировка возьмано луоз вуоно мугез:\n\n: \"$2\" - лы.\n\n* Кутскон блокировка: $8\n* Блокировка ортчиз: $6\n* Блокировка меретъёсыз: $7\n\nБыгатӥськод-а тон герӟаськемын $1 яке мукет котькудӥныз [[{{MediaWiki:Grouppage-sysop}}|администраторъёс]], блокировка мед эскерозы.\n\nУчком, мар кутыны уг быгато функцизэс \"гожтэт\", ас ке [[Special:Preferences|настройка персональной]] зуркатӥсь яке электронной почтаезлэн адресэз эн чуртна уг корректный, яке гожтӥськод ке, гожтэт ыстон укшась блокировка алон.\n\nТон IP-адрес — $3, блокировка идентификаторлэн — #$5.\nПожалуйста, аслэсьтым тодон-та вазиськонэз котьку возьмано.",
+       "blockednoreason": "мугезлы эн возьмалэ",
+       "loginreqlink": "пырыны",
+       "noarticletext": "Али дыре та бамын текст ӧвӧл. \nТӥ быгатоды [[Special:Search/{{PAGENAME}}|шедьтыны со сярысь кыӵе ке ивор]] мукет бамъёсысь,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} шедьтыны журналъёсысь гожъямъёсыз], \nяке [{{fullurl:{{FULLPAGENAME}}|action=edit}} сыӵе нимын бам кылдытыны]</span>.",
+       "blocked-notice-logextract": "Пользователь заблокирован сётӥз та учырлы.\nСправка понна радъяськылӥсь журнал блокировка лапег берпуметӥ гожтэт:",
+       "continue-editing": "Тупатъянэз азьланьтоно",
+       "editing": "Тупатон: $1",
+       "editingsection": "Тупатон: $1 (люкет)",
+       "template-protected": "(утемын)",
+       "template-semiprotected": "(полузащищенный)",
+       "nocreate-loggedin": "Тон доразы юаськыны кылдӥз выль бам ӧвӧл.",
+       "permissionserrors": "Янгышъёс юаське",
+       "content-model-wikitext": "викитекст",
+       "cantcreateaccount-text": "Та книгаез кылдытонлы учётной IP-адрес (<кужмо>$1</кужмо>) заблокировать луизы [[User:$3|$3]].\n\nМугез, вайиз $3 возьматэ <em>$2</сиоз>",
+       "cantcreateaccount-range-text": "Учётной кылдытон - гожъян IP-адрес диапазонын <кужмо>$1</strong>, Тон пыриське со IP-адрес (<кужмо>$4</кужмо>), заблокировать луизы [[User:$3|$3]].\n\nМугез, вайиз $3 возьматэ <em>$2</сиоз>",
+       "viewpagelogs": "Та бамлы журналъёсыз возьматыны",
+       "revisionasof": "Версия $1",
+       "previousrevision": "← Вужгем",
+       "history-show-deleted": "Ӵушылэмъёссэ гинэ",
+       "rev-showdeleted": "возьматоно",
        "revdelete-radio-set": "Ватэм",
        "revdelete-radio-unset": "Адӟымон",
+       "revdelete-reason-dropdown": "*Вӧлскем палэнскон мугъёсты\n** Авторской правоосты тӥян\n** Яке кулэтэм информациез личной комментарий\n** Логин несоответствовать\n** Курла информациез Потенциально",
+       "history-title": "$1 — воштонъёслэн историзы",
+       "lineno": "$1-тӥ чур:",
+       "compareselectedversions": "Быръем версиосыз ӵошатыны",
+       "showhideselectedversions": "Возьматыны/ватыны быръем версиосыз",
+       "editundo": "берытсконо",
        "searchresults": "Шедьтэмын",
-       "search-result-size": "$1 кыл({{PLURAL:$2|1=1 word|$2 words}})",
+       "searchresults-title": "утчан \"$1\"",
+       "shown-title": "Адӟытылоно $1 {{PLURAL:$1|шедьтэмез}} бамлы быдэ",
+       "searchprofile-articles": "Валтӥсь бамъёс",
+       "searchprofile-images": "Мультимедиа",
+       "searchprofile-everything": "Котькытын",
+       "searchprofile-advanced": "Паськытатэм",
+       "searchprofile-images-tooltip": "Файлъёсты утчан",
+       "searchprofile-everything-tooltip": "Вань бамъёсэтӥ утчан (вераськон бамъёсты пыртыса)",
+       "search-result-size": "$1 ({{PLURAL:$2|$2 кыл}})",
+       "search-interwiki-more": "(эшшо)",
+       "searchall": "Ваньзэ",
+       "powersearch-toggleall": "Ваньзэ",
+       "powersearch-togglenone": "Номыре",
        "preferences": "настройкаос",
        "mypreferences": "Настройкаос",
        "prefs-watchlist": "Чаклан список",
+       "prefs-editing": "Тупатон",
+       "yourlanguage": "Интерфейслэн кылыз:",
+       "prefs-preview": "Бамез эскерон",
+       "group-sysop": "Администраторъёс",
+       "group-all": "(ваньзэ)",
+       "newuserlogpage": "Викиавторъёсыз регистрациосын журнал",
+       "enhancedrc-history": "история",
        "recentchanges": "Выль тупатонъёс",
+       "recentchanges-label-newpage": "Та тупатонэн выль бам кылдӥз",
+       "recentchanges-label-minor": "Пичи воштон",
+       "recentchanges-label-bot": "Та тупатонэз кариз бот",
+       "recentchanges-submit": "Возьматыны",
+       "rcshowhideminor-show": "Возьматыны",
+       "rcshowhidebots-show": "Возьматыны",
+       "rcshowhideliu-show": "Возьматыны",
+       "rcshowhideanons-show": "Возьматыны",
+       "rcshowhideanons-hide": "Ватыны",
+       "rcshowhidepatr-show": "Возьматыны",
+       "rcshowhidemine": "$1 аслэсьтым тупатонъёсме",
+       "rcshowhidemine-show": "Возьматыны",
+       "rcshowhidemine-hide": "Ватыны",
+       "rcshowhidecategorization-show": "Возьматыны",
+       "rcshowhidecategorization-hide": "Ватыны",
+       "diff": "пӧрт.",
        "hist": "история",
+       "hide": "Ватыны",
+       "show": "Возьматыны",
+       "minoreditletter": "и",
+       "newpageletter": "В",
+       "boteditletter": "б",
+       "rc-change-size-new": "Воштон бере быдӟала: $1 {{PLURAL:$1|байт}}",
+       "newsectionsummary": "/* $1 */ выль тема",
        "recentchangeslinked": "Герӟаськем тупатонъёс",
        "recentchangeslinked-feed": "Герӟаськем тупатонъёс",
        "recentchangeslinked-toolbox": "Герӟаськем тупатонъёс",
        "upload": "Файл поныны",
+       "upload-dialog-button-cancel": "Берытсконо",
+       "nolicense": "Ӧвӧл",
+       "file-anchor-link": "Файл",
+       "filehist": "Файллэн историез",
+       "filehist-datetime": "Дата/дыр",
+       "filehist-thumb": "Миниатюра",
+       "filehist-user": "Викиавтор",
+       "filehist-dimensions": "Быдӟала",
+       "filehist-comment": "Валэктон",
+       "imagelinks": "Файлэз уже кутон",
        "sharedupload": "Та файл — $1-ысь, сое мукет проектъёсын но уже кутыны луэ.",
+       "sharedupload-desc-here": "Та файл — $1-ысь, сое мукет проектъёсын но уже кутыны луэ.\n[$2 Файл гожъясь бамысьтыз] информация адӟытэмын улын.",
        "randompage": "Олокыӵе статья",
-       "nbytes": "$1 байт",
-       "move": "Мукет интые выжтыны",
+       "withoutinterwiki-submit": "Возьматыны",
+       "nbytes": "{{PLURAL:$1|$1 байт}}",
+       "prefixindex-submit": "Возьматыны",
+       "newpages": "Выль бамъёс",
+       "newpages-submit": "Возьматыны",
+       "move": "Нимзэ воштыны",
+       "log": "Журналъёс",
+       "logeventslist-submit": "Возьматыны",
+       "showhideselectedlogentries": "Возьматыны/ватыны быръем журналъёсысь гожъямъёсыз",
+       "checkbox-select": "Бырйыны: $1",
+       "checkbox-all": "Ваньзэ",
+       "checkbox-none": "Номыре",
+       "checkbox-invert": "Воштыны интыен",
+       "categories-submit": "Возьматыны",
+       "sp-deletedcontributions-contribs": "тупатонъёсыз",
+       "listusers-submit": "Возьматыны",
+       "listusers-blocked": "(заблокировать{{GENDER:$1||а}})",
+       "emailuser": "Викиавторлы гожтэт",
        "emailmessage": "Ивортон:",
-       "watchlist": "Чаклано статьяос",
+       "watchlist": "Чаклан список",
        "mywatchlist": "Чаклан список",
        "watch": "Чаклано",
        "unwatch": "Чакламысь дугдыны",
-       "mycontris": "Мынам гожтэмъёсы",
-       "whatlinkshere": "Татчы линкъёс",
-       "movearticle": "Статьяез мукет интые выжтыны",
-       "move-watch": "Та бамез чаклан списоке пыртыны",
-       "delete_and_move": "Быдтыны но мукет интые выжтыны",
+       "watchlist-details": "Тӥляд чаклан списокады {{PLURAL:$1|$1 бам}}, вераськон бамъёсыз лыдӟытэк.",
+       "watchlist-submit": "Возьматыны",
+       "watchlist-options": "Чаклан списокез тупатыны",
+       "enotif_reset": "Вань бамъёсыз лыдӟем пусйыны",
+       "historyaction-submit": "Возьматыны",
+       "rollbacklink": "ӝог берыктыны",
+       "restriction-edit": "Тупатон",
+       "blanknamespace": "(Валтӥсез)",
+       "contributions": "{{GENDER:$1|Викиавтор}} гожтэмъёсы",
+       "contributions-title": "$1 викиавтор гожтэмъёсы",
+       "mycontris": "Гожтэмъёс",
+       "whatlinkshere": "Татчы чӧлсконъёс",
+       "block": "Блокировка пыриськисьёс",
+       "blockip": "Заблокировать пыриськисьёс",
+       "unblocked": "$1 разблокировать",
+       "unblocked-id": "Блокировка $1 басьтоно луиз",
+       "blocklist-target": "Ужпумъёс",
+       "blocklist-reason": "Мугез",
+       "blocklink": "блокировать карыны",
+       "contribslink": "тупатонъёсыз",
+       "blocklogentry": "заблокировать [[$1]] дыр $2 $3",
+       "reblock-logentry": "блокировка воштӥз [[$1]] дыр $2 $3",
+       "blocklogtext": "Блокировка но та журналлэн ужезлы разблокирование пользователь.\nЗаблокировать Автоматически IP-адрес уг возьма.\nПроизведениосыз печатласько эстониын [[нимысьтыз:сьӧд списокын|сьӧд списокын]], бан список блокъёс лэсьтыны.",
+       "unblocklogentry": "разблокировать $1",
+       "range_block_disabled": "Администратор диапазонэз блокировать али.",
+       "move-watch": "Чаклан списоке пыртоно инъет но валтӥсь бамъёсыз",
        "allmessagesname": "Ивортон",
+       "allmessages-filter-all": "Ваньзэ",
+       "thumbnail-more": "Будэтоно",
+       "tooltip-pt-login": "Татын системае пырыны луоно, нош одно ик ӧвӧл",
+       "tooltip-pt-createaccount": "Татын учётной записез лэсьтыны но системае пырыны луоно, нош одно ик ӧвӧл",
        "tooltip-ca-talk": "Бамлэн контентэз сярысь вераськон",
+       "tooltip-ca-edit": "Та бамез тупатъяно",
+       "tooltip-ca-addsection": "Выль люкет кылдытоно",
+       "tooltip-ca-history": "Бамлэн воштонъёсыныз журнал",
+       "tooltip-ca-watch": "Та бамез чаклан списокады пыртоно",
        "tooltip-search": "Утчано {{SITENAME}}",
+       "tooltip-search-go": "Выжоно сыӵе ик нимын баме",
+       "tooltip-search-fulltext": "Шедьтоно бамъёсыз, кудъёсаз пумиське пусъем текст",
+       "tooltip-p-logo": "Кутскон баме мыноно",
        "tooltip-n-mainpage": "Кутскон баме мыноно",
        "tooltip-n-mainpage-description": "Кутскон баме мыноно",
        "tooltip-n-portal": "Проект сярысь, мар карыны быгатоды, ужлы кулэ луэмзэ кытысь шедьтоно",
+       "tooltip-n-currentevents": "Выль иворъёс сярысь веранъёс",
        "tooltip-n-recentchanges": "Берпуметӥ тупатонъёслэн списоксы",
        "tooltip-n-randompage": "Олокыӵе бамез учконо",
+       "tooltip-n-help": "Юрттэт басьтымон инты",
        "tooltip-t-whatlinkshere": "Ваньмыз бамъёс, кудъёсаз та бамлы линксы вань",
+       "tooltip-t-recentchangeslinked": "Выль тупатонъёс бамъёсын, кудъёссэ та бам чӧлске",
+       "tooltip-t-upload": "Файл поныны",
        "tooltip-t-specialpages": "Специальной бамъёслэн списоксы",
+       "tooltip-t-print": "Та бамысь печатламон версия",
+       "tooltip-t-permalink": "Бамлэн та версияз ялан чӧлскон",
+       "tooltip-ca-nstab-main": "Валтӥсь бамез учконо",
+       "tooltip-ca-nstab-user": "Викиавторлэн бамез",
+       "tooltip-ca-nstab-special": "Та бам нимысьтыз, сое тупатон луонтэм",
+       "tooltip-ca-nstab-image": "Файллэн бамез",
+       "tooltip-ca-nstab-category": "Категорилэн бамез",
+       "tooltip-rollback": "Берло викиавторен лэсьтэм воштонъёсыз одӥг зӥбонэн палэнтыны",
+       "pageinfo-header-edits": "Воштонъёслэн историзы",
        "pageinfo-toolboxlink": "Бам сярысь тодэтъёс",
-       "specialpages": "Ваньмыз панельёс"
+       "file-info-size": "$1 × $2 пиксель, файллэн быдӟалаез: $3, MIME-тип: $4",
+       "show-big-image-size": "$1 × $2 пиксель",
+       "metadata": "Метаданнойёс",
+       "metadata-fields": "Суредысь метаданнойёслэн та списоке пыртэм полеоссы адӟытӥськозы суред бам вылын, метаданнойёслэн таблицазы бинемын дыръя.\nМукет полеоссы ватскозы.\n* make\n* model\n* datetimeoriginal\n* exposuretime\n* fnumber\n* isospeedratings\n* focallength\n* artist\n* copyright\n* imagedescription\n* gpslatitude\n* gpslongitude\n* gpsaltitude",
+       "exif-disclaimer": "Кыл кутыны пумит луон",
+       "namespacesall": "ваньзэ",
+       "monthsall": "ваньзэ",
+       "confirm-watch-top": "Та бамез чаклан списокады пыртоно?",
+       "autosumm-new": "Выль бам: «$1»",
+       "specialpages": "Ваньмыз панельёс",
+       "tag-filter": "[[Special:Tags|Тэгъёсыз]] фильтр:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|1=Метка|Меткаос}}]]: $2)",
+       "tags-title": "Меткаос",
+       "logentry-newusers-create": "$1 нимо учётной запись {{GENDER:$2|кылдытэмын}} вал",
+       "searchsuggest-search": "Утчано {{SITENAME}}",
+       "searchsuggest-containing": "кудъёсаз вань...",
+       "api-error-autoblocked": "Тон IP-адрес заблокировать эрказ луи, малы ке шуоно со заблокировать пользователь кутыны луоз.",
+       "api-error-blocked": "Редактирование заблокировать вал тӥлесьтыд.",
+       "expand_templates_preview": "Эскерон",
+       "log-action-filter-all": "Ваньзэ"
 }
index 2646d2c..cccd0bf 100644 (file)
        "upload-dialog-disabled": "Завантаження файлів з допомогою цього діалогового вікна відключені у цій вікі.",
        "upload-dialog-title": "Завантажити файл",
        "upload-dialog-button-cancel": "Скасувати",
+       "upload-dialog-button-back": "Назад",
        "upload-dialog-button-done": "Готово",
        "upload-dialog-button-save": "Зберегти",
        "upload-dialog-button-upload": "Завантажити",
        "apisandbox-results-fixtoken-fail": "Не вдалося викликати токен «$1».",
        "apisandbox-alert-page": "Поля на цій сторінці не є дійсними.",
        "apisandbox-alert-field": "Значення цього поля не є допустимим.",
+       "apisandbox-continue": "Продовжити",
+       "apisandbox-continue-clear": "Очистити",
+       "apisandbox-continue-help": "{{int:apisandbox-continue}} [https://www.mediawiki.org/wiki/API:Query#Continuing_queries продовжить] останній запит; {{int:apisandbox-continue-clear}} очистить параметри, пов'язані з продовженням.",
        "booksources": "Джерела книг",
        "booksources-search-legend": "Пошук інформації про книгу",
        "booksources-isbn": "ISBN:",
        "movelogpagetext": "Далі подано список перейменованих сторінок.",
        "movesubpage": "{{PLURAL:$1|1=Підсторінка|Підсторінки}}",
        "movesubpagetext": "Ця сторінка має $1 {{PLURAL:$1|підсторінку|підсторінки|підсторінок}}.",
+       "movesubpagetalktext": "Відповідна сторінка обговорення має $1 {{PLURAL:$1|підсторінку, показану нижче|підсторінки, показані нижче|підсторінок, показаних нижче}}.",
        "movenosubpage": "Ця сторінка не має підсторінок.",
        "movereason": "Причина:",
        "revertmove": "скасувати перейменування",
        "pageinfo-category-pages": "Кількість сторінок",
        "pageinfo-category-subcats": "Кількість підкатегорій",
        "pageinfo-category-files": "Кількість файлів",
+       "pageinfo-user-id": "ID користувача",
        "markaspatrolleddiff": "Позначити як перевірену",
        "markaspatrolledtext": "Позначити цю сторінку як перевірену",
        "markaspatrolledtext-file": "Позначити цю версію файлу як відпатрульовану",
        "htmlform-cloner-create": "Додати більше",
        "htmlform-cloner-delete": "Вилучити",
        "htmlform-cloner-required": "Необхідно принаймні одне значення.",
+       "htmlform-date-placeholder": "РРРР-ММ-ДД",
+       "htmlform-time-placeholder": "ГГ:ХХ:СС",
+       "htmlform-datetime-placeholder": "РРРР-ММ-ДД ГГ:ХХ:СС",
+       "htmlform-date-invalid": "Введене Вами значення не розпізнається як дата. Спробуйте використати формат РРРР-ММ-ДД.",
+       "htmlform-time-invalid": "Введене Вами значення не розпізнається як час. Спробуйте використати формат ГГ:ХХ:СС.",
+       "htmlform-datetime-invalid": "Введене Вами значення не розпізнається як дата й час. Спробуйте використати формат РРРР-ММ-ДД ГГ:ХХ:СС.",
+       "htmlform-date-toolow": "Задане Вами значення — менше, ніж найраніша дозволена дата $1.",
+       "htmlform-date-toohigh": "Ви вказали значення після найпізнішої дозволеної дати: $1.",
+       "htmlform-time-toolow": "Ви вказали значення до найранішого дозволеного часу: $1",
+       "htmlform-time-toohigh": "Ви вказали значення після найпізнішого дозволеного часу: $1.",
+       "htmlform-datetime-toolow": "Ви вказали значення до найранішої дозволеної дати й часу: $1",
+       "htmlform-datetime-toohigh": "Ви вказали значення після найпізнішої дозволеної дати й часу: $1.",
        "htmlform-title-badnamespace": "[[:$1]] не в просторі назв «{{ns:$2}}».",
        "htmlform-title-not-creatable": "«$1» — назва сторінки, яку не можна створити",
        "htmlform-title-not-exists": "$1 не існує.",
        "usercssispublic": "Будь ласка, зверніть увагу: підсторінки CSS не повинні містити конфіденційних даних, бо їх можуть бачити інші користувачі.",
        "restrictionsfield-badip": "Недійсна IP-адреса або діапазон: $1",
        "restrictionsfield-label": "Дозволені діапазони IP-адрес:",
-       "restrictionsfield-help": "Одна IP-адреса або CIDR-діапазон на рядок. Щоб увімкнути все, використайте<br><code>0.0.0.0/0</code><br><code>::/0</code>"
+       "restrictionsfield-help": "Одна IP-адреса або CIDR-діапазон на рядок. Щоб увімкнути все, використайте<br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "Помилка: $1",
+       "edit-error-long": "Помилки:\n\n$1"
 }
index 73f4629..1c41e4a 100644 (file)
        "yourpasswordagain": "Kọ ọ̀rọ̀ìpamọ́ lẹ́ẹ̀kansí:",
        "createacct-yourpasswordagain": "Ẹ ṣe ìfidájú ọ̀rọ̀ìpamọ́",
        "createacct-yourpasswordagain-ph": "Ẹ kọ ọ̀rọ̀ìpamọ́ lẹ́ẹ̀kan síi",
-       "remembermypassword": "Ṣè'rántí ìwọlé mi lórí kọ̀mpútà yìí (fún ó pẹ́ jù {{PLURAL:$1|ọjọ́|ọjọ́}} $1)",
        "userlogin-remembermypassword": "Fi mí sí ìwọlé",
        "userlogin-signwithsecure": "Lo ìsopọ̀ ẹ̀rọ tó ní àbò",
        "yourdomainname": "Domain yín:",
        "movelogpagetext": "Nísàlẹ̀ ni àtòjọ gbogbo àwọn ìyípòdà ojúewé.",
        "movesubpage": "{{PLURAL:$1|Ojúewé abẹ́|Àwọn ojúewé abẹ́}}",
        "movesubpagetext": "Ojúewé yìí ní {{PLURAL:$1|ojúewé abẹ́|àwọn ojúewé abẹ́}} $1 tó hàn nísàlẹ̀.",
+       "movesubpagetalktext": "Ojúewé ọ̀rọ̀ rẹ̀ ní {{PLURAL:$1|ojúewé abẹ́|àwọn ojúewé abẹ́}} $1 tó hàn nísàlẹ̀.",
        "movenosubpage": "Ojúewé yìí kò ní àwọn abẹ́ojúewé.",
        "movereason": "Ìdíẹ̀:",
        "revertmove": "dápadà",
        "htmlform-submit": "Fúnsílẹ̀",
        "htmlform-reset": "Ìdápadà àwọn àtúnṣe",
        "htmlform-selectorother-other": "Òmíràn",
-       "sqlite-has-fts": "$1 pẹ̀lú àtìlẹ́yìn àwárí ìkọ̀rọ̀ kíkún",
-       "sqlite-no-fts": "$1 láìní àtìlẹ́yìn àwárí ìkọ̀rọ̀ kíkún",
        "logentry-delete-delete": "$1 pa ojúewé $3 rẹ́",
        "logentry-delete-restore": "$1 dá ojúewé $3 padà",
        "logentry-delete-event": "$1 ṣe àyípadà ìhànsí {{PLURAL:$5|ìṣẹ̀lẹ̀ àkọọ́lẹ̀ kan|àwọn ìṣẹ̀lẹ̀ àkọọ́lẹ̀ $5}} lórí $3: $4",
        "special-characters-group-gujarati": "Gujarati",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
-       "special-characters-group-khmer": "Khmer"
+       "special-characters-group-khmer": "Khmer",
+       "edit-error-short": "Àṣìṣe: $1",
+       "edit-error-long": "Àwọn àsìṣe:\n\n\n$1"
 }
index 84ec923..30534c5 100644 (file)
@@ -27,7 +27,8 @@
                        "CRCHF",
                        "Shinjiman",
                        "Macofe",
-                       "Jdforrester"
+                       "Jdforrester",
+                       "Tungakl"
                ]
        },
        "tog-underline": "連結加底線:",
        "htmlform-chosen-placeholder": "揀個選項",
        "htmlform-cloner-create": "加多啲",
        "htmlform-cloner-delete": "拎走",
-       "sqlite-has-fts": "$1 有全文搜尋支援",
-       "sqlite-no-fts": "$1 冇全文搜尋支援",
        "logentry-delete-delete": "$1 刪咗頁 $3",
        "revdelete-restricted": "已經應用限制到操作員",
        "revdelete-unrestricted": "已經拎走對於操作員嘅限制",
        "feedback-back": "返轉頭",
        "feedback-cancel": "取消",
        "feedback-close": "搞掂",
-       "feedback-error-title": "出錯",
        "feedback-message": "信息:",
        "feedback-subject": "主旨:",
        "feedback-submit": "遞交",
        "feedback-thanks-title": "多謝!",
-       "searchsuggest-search": "搵",
+       "searchsuggest-search": "搵{{SITENAME}}",
        "searchsuggest-containing": "名單傳送緊...",
        "api-error-unclassified": "發生未知嘅錯誤。",
        "api-error-unknown-code": "未知嘅出錯:$1。",
index 320a8b2..3696030 100644 (file)
@@ -92,7 +92,8 @@
                        "Cosine02",
                        "Arthur2e5",
                        "Myy730",
-                       "SolidBlock"
+                       "SolidBlock",
+                       "D41D8CD98F"
                ]
        },
        "tog-underline": "链接下划线:",
        "unexpected": "非正常值:“$1”=“$2”。",
        "formerror": "错误:无法提交表单",
        "badarticleerror": "无法在此页进行该操作。",
-       "cannotdelete": "无法删除页面或文件“$1”。\n它可能已被其他人删除了。",
+       "cannotdelete": "无法删除页面或文件“$1”。它可能已被其他人删除了。",
        "cannotdelete-title": "无法删除页面“$1”",
        "delete-hook-aborted": "删除被扩展钩子取消。钩子并没有给出解释。",
        "no-null-revision": "无法创建对“$1”页面新的空白版本",
        "anoneditwarning": "<strong>警告:</strong>您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您<strong>[$1 登录]</strong>或<strong>[$2 创建]</strong>一个账户,您的编辑将归属于您的用户名,且将享受其他好处。",
        "anonpreviewwarning": "<em>您没有登录。保存将您的IP地址记录至此页面的编辑历史中。</em>",
        "missingsummary": "<strong>提示:</strong>您没有提供编辑摘要。如果您再次点击“{{int:savearticle}}”,您的编辑将不带摘要保存。",
-       "selfredirect": "<strong>警告:</strong>您正在将此页面重定向至它自己。您可能指定了错误的重定向目标,或者您正在编辑错误的页面。如果您再次点击“{{int:savearticle}}”,重定向将无论如何被创建。",
+       "selfredirect": "<strong>警告:</strong>您正在将此页面重定向至它自己。您可能指定了错误的重定向目标,或者您正在编辑错误的页面。如果您再次点击“{{int:savearticle}}”,重定向仍将被创建。",
        "missingcommenttext": "请在下面输入评论。",
        "missingcommentheader": "<strong>提示:</strong>您还没有为此评论提供一个标题。如果您再次点击“{{int:savearticle}}”,您的编辑将不带标题保存。",
        "summary-preview": "摘要预览:",
        "lockedbyandtime": "(由 {{GENDER:$1|$1}} 于$2 $3执行)",
        "move-page": "移动$1",
        "move-page-legend": "移动页面",
-       "movepagetext": "您可以使用下面的表单来重命名一个页面,同时将其版本历史移动到新页面。同时老的条目将会被重定向到新条目。您可以自动地将重定向更新到原条目。如果您不选择这样做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。您有责任确保链接会被正确指向他们应该被指向的地方。\n\n注意:即使新条目已经有对应页面,此页面也<strong>不会</strong>被移动,除非新页面无任何编辑历史或是重定向页。这意味着您可在误操作后将页面移回原处,同时,您也无法覆盖现有页面。\n\n<strong>注意:</strong>对这样一个经常被访问的页面而言这可能是一个重大且唐突的更改;请在行动前先了解您的修改可能带来的一切后果。",
+       "movepagetext": "您可以使用下面的表单来重命名一个页面,同时将其版本历史移动到新页面。同时老的条目将会被重定向到新条目。您可以自动地将指向老的条目的重定向更新为指向新条目。如果您不选择这样做的话,请检查[[Special:DoubleRedirects|双重]]或[[Special:BrokenRedirects|损坏重定向]]链接。您有责任确保链接会被正确指向他们应该被指向的地方。\n\n注意:如果新条目已经有对应页面,此页面将<strong>不会</strong>被移动,除非新页面是重定向页并且无任何修订历史。这意味着您可在误操作后将页面移回原处,同时,您无法覆盖现有页面。\n\n<strong>注意:</strong>对这样一个经常被访问的页面而言这可能是一个重大且唐突的更改;请在行动前先了解您的修改可能带来的一切后果。",
        "movepagetext-noredirectfixer": "用下面的表单来重命名一个页面,并将其版本历史同时移动到新页面。老的页面将成为新页面的重定向页。请检查[[Special:DoubleRedirects|双重重定向]]或[[Special:BrokenRedirects|损坏重定向]]链接。您应当负责确定所有链接依然会链到指定的页面。\n\n注意如果新页面已经有内容的话,页面将<strong>不会</strong>被移动,除非新页面无内容或是重定向页,而且没有版本历史。这意味着您再必要时可以在移动到新页面后再移回老的页面,同时您也无法覆盖现有页面。\n\n<strong>注意:</strong>对一个经常被访问的页面而言这可能是一个重大与唐突的更改;请在行动前先确定您了解其所可能带来的后果。",
        "movepagetalktext": "如果您勾选此框,相关联的讨论页将被自动移动到新的标题,除非这里已经有了一个非空讨论页。\n\n在这种情况下,如有需要,您将不得不手动移动或合并页面。",
        "moveuserpage-warning": "'''警告:'''你将移动一个用户页面。请注意,只有该页面会被移动,该用户''不''会被更名。",
        "movelogpagetext": "下面是所有页面移动的列表。",
        "movesubpage": "{{PLURAL:$1|子页面}}",
        "movesubpagetext": "该页面有$1个子页面在下面展示。",
+       "movesubpagetalktext": "相应讨论页有$1个{{PLURAL:$1|子页面}}在下面展示。",
        "movenosubpage": "这个页面没有子页面。",
        "movereason": "原因:",
        "revertmove": "恢复",
        "pageinfo-category-pages": "页面数",
        "pageinfo-category-subcats": "子分类数",
        "pageinfo-category-files": "文件数",
+       "pageinfo-user-id": "用户ID",
        "markaspatrolleddiff": "标记为已巡查",
        "markaspatrolledtext": "标记此页面为已巡查",
        "markaspatrolledtext-file": "将此文件版本标记为已巡查",
        "confirmemail_success": "您的邮箱已经被确认。您现在可以[[Special:UserLogin|登录]]并使用此网站了。",
        "confirmemail_loggedin": "你的电子邮件地址现在已经确认。",
        "confirmemail_subject": "{{SITENAME}}电子邮件地址确认",
-       "confirmemail_body": "来自IP地址$1的用户(可能是您)在{{SITENAME}}上创建了账户“$2”,并提交了您\n的电子邮箱地址。\n\n请确认这个账户是属于您的,并同时激活在{{SITENAME}}上的电子邮件功能。请在浏\n览器中打开下面的链接:\n\n$3\n\n如果您*未曾*注册账户,请打开下面的链接去取消电子邮件确认:\n\n$5\n\n确认码会在$4过期。",
+       "confirmemail_body": "来自IP地址$1的用户(可能是您)在{{SITENAME}}上创建了账户“$2”,并提交了您的电子邮箱地址。\n\n请确认这个账户是属于您的,并同时激活在{{SITENAME}}上的电子邮件功能。请在浏览器中打开下面的链接:\n\n$3\n\n如果您*未曾*注册账户,请打开下面的链接去取消电子邮件确认:\n\n$5\n\n确认码会在$4过期。",
        "confirmemail_body_changed": "拥有IP地址$1的用户(可能是您)在{{SITENAME}}更改了账户“$2”的电子邮箱地址。\n\n要确认此账户确实属于您并同时激活在{{SITENAME}}的电子邮件功能,请在浏览器中打开下面的链接:\n\n$3\n\n如果这个账户*不是*属于您的,请打开下面的链接去取消电子邮件确认:\n\n$5\n\n确认码会在$4过期。",
-       "confirmemail_body_set": "拥有IP地址$1的用户(可能是您)在{{SITENAME}}将账户“$2”的电子邮箱地址设置为这个电子邮件地址。\n\n请确认这个账户是属于您的,并同时激活在{{SITENAME}}上的电子邮件功能。请\n在浏览器中打开下面的链接:\n\n$3\n\n如果这个账户*不是*属于您的,请打开下面的链接去取消电子邮件确认:\n\n$5\n\n确认码会在$4过期。",
+       "confirmemail_body_set": "拥有IP地址$1的用户(可能是您)在{{SITENAME}}将账户“$2”的电子邮箱地址设置为这个电子邮件地址。\n\n请确认这个账户是属于您的,并同时激活在{{SITENAME}}上的电子邮件功能。请在浏览器中打开下面的链接:\n\n$3\n\n如果这个账户*不是*属于您的,请打开下面的链接去取消电子邮件确认:\n\n$5\n\n确认码会在$4过期。",
        "confirmemail_invalidated": "电子邮件地址确认已取消",
        "invalidateemail": "取消电子邮件确认",
        "notificationemail_subject_changed": "{{SITENAME}}注册的电子邮件地址已被更改",
        "notificationemail_subject_removed": "{{SITENAME}}注册的电子邮件地址已被移除",
        "notificationemail_body_changed": "来自IP地址$1的人(可能是您)在{{SITENAME}}上更改了账户“$2”的电子邮件地址至“$3”。\n\n如果这不是您,请立即联系一位网站管理员。",
        "notificationemail_body_removed": "来自IP地址$1的人(可能是您)在{{SITENAME}}上移除了账户“$2”的电子邮件地址。\n\n如果这不是您,请立即联系一位网站管理员。",
-       "scarytranscludedisabled": "[跨网站的编码转换不可用]",
+       "scarytranscludedisabled": "[跨wiki的页面嵌入已被禁用]",
        "scarytranscludefailed": "[提取$1失败]",
        "scarytranscludefailed-httpstatus": "[模板$1读取失败:HTTP $2]",
        "scarytranscludetoolong": "[URL过长]",
index f1692a4..694c23d 100644 (file)
        "tog-enotifminoredits": "當頁面與檔案有小修訂時,傳送電子郵件通知我",
        "tog-enotifrevealaddr": "在通知郵件中顯示我的電子郵件地址",
        "tog-shownumberswatching": "顯示監視使用者數量",
-       "tog-oldsig": "現有簽名:",
+       "tog-oldsig": "您現有的簽名:",
        "tog-fancysig": "將簽名視為 Wikitext 語言 (不自動產生連結)",
        "tog-uselivepreview": "使用即時預覽",
        "tog-forceeditsummary": "未填寫編輯摘要時提示我",
        "tog-showhiddencats": "顯示隱藏分類",
        "tog-norollbackdiff": "執行還原後略過差異比對",
        "tog-useeditwarning": "未儲存離開編輯頁面時警告我",
-       "tog-prefershttps": "登入時始終使用安全連線",
+       "tog-prefershttps": "永遠使用安全連線來登入",
        "underline-always": "永遠使用",
        "underline-never": "永不使用",
        "underline-default": "依外觀或瀏覽器預設值",
        "newwindow": "(以新視窗開啟)",
        "cancel": "取消",
        "moredotdotdot": "更多...",
-       "morenotlisted": "此清單尚未讀取完畢。",
+       "morenotlisted": "這可能只是部份清單。",
        "mypage": "頁面",
        "mytalk": "對話",
        "anontalk": "對話",
        "talk": "討論",
        "views": "檢視",
        "toolbox": "工具",
+       "tool-link-userrights": "更改{{GENDER:$1|使用者}}群組",
+       "tool-link-emailuser": "寄信給這位{{GENDER:$1|使用者}}",
        "userpage": "檢視使用者頁面",
        "projectpage": "檢視專案頁面",
        "imagepage": "檢視檔案頁面",
        "cannotloginnow-title": "現在無法登入",
        "cannotloginnow-text": "使用 $1 時無法登入。",
        "cannotcreateaccount-title": "無法建立帳號",
+       "cannotcreateaccount-text": "此 wiki 未開啟直接建立帳號的功能。",
        "yourdomainname": "您的網域:",
        "password-change-forbidden": "您不可變更此 Wiki 上的密碼。",
        "externaldberror": "這可能是由於資料庫驗證錯誤,或是不允許您更新外部帳號。",
        "eauthentsent": "已寄出一封確認信到您所設定的電子郵件地址。\n在未收到其它電子郵件前,您必須先依照郵件中的指示,確認這個帳號確實是您本人。",
        "throttled-mailpassword": "密碼重設的電子郵件已經在最近 $1 小時內寄出。\n為防止濫用,$1 小時內只能寄出一次密碼重設信件。",
        "mailerror": "傳送電子郵件錯誤:$1",
-       "acct_creation_throttle_hit": "使用您目前的 IP 位址的訪客在最近一天建立了 {{PLURAL:$1|1 個帳號|$1 個帳號}},已超出系統允許的上限。\n因此,目前無法讓使用此 IP 位址的訪客建立帳號。",
+       "acct_creation_throttle_hit": "使用您目前 IP 位址到 wiki 的訪客在最近 $2 建立了 {{PLURAL:$1|1 個帳號|$1 個帳號}},已超出了期間允許的上限。\n因此,目前無法讓使用此 IP 位址的訪客建立任何帳號。",
        "emailauthenticated": "您的電子郵件地址已於 $2 $3 確認。",
        "emailnotauthenticated": "您的電子郵件地址尚未確認,\n尚不會寄出以下功能的電子郵件給您。",
        "noemailprefs": "在您的偏好設定中設定電子郵件地址,讓您可以使用這些功能。",
        "botpasswords-updated-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已更新。",
        "botpasswords-deleted-title": "已刪除機器人密碼",
        "botpasswords-deleted-body": "使用者''$2\"所擁有的機器人\"$1\"之密碼已刪除。",
-       "botpasswords-newpassword": "用來登入 <strong>$1</strong> 的新密碼為 <strong>$2</strong>。 <em>請記錄此密碼以供未來參考使用。</em>",
+       "botpasswords-newpassword": "用來登入 <strong>$1</strong> 的新密碼為 <strong>$2</strong>。 <em>請記錄此密碼以供未來參考使用。</em> <br> (較舊的機器人的登入名稱需與最終使用者名稱相同,您也可使用 <strong>$3</strong> 做為使用者名稱 <strong>$4</strong> 做為密碼。)",
        "botpasswords-no-provider": "BotPasswordsSessionProvider 無法使用。",
        "botpasswords-restriction-failed": "機器人密碼限制已拒絕此次登入。",
        "botpasswords-invalid-name": "指定的使用者名稱未包含機器人密碼分隔字元 (\"$1\")。",
        "passwordreset-emailelement": "使用者名稱:\n$1\n\n臨時密碼:\n$2",
        "passwordreset-emailsentemail": "若此確實為您帳號所登記的電子郵件地址,將會寄出重設密碼的信件給您。",
        "passwordreset-emailsentusername": "若此確實為您使用者名稱所登記的電子郵件地址,將會寄出重設密碼的信件給您。",
-       "passwordreset-emailsent-capture2": "密碼重設{{PLURAL:$1|郵件|郵件}}已寄出,{{PLURAL:$1|使用者名稱與密碼|使用者名稱與密碼}}如下顯示。",
-       "passwordreset-emailerror-capture2": "寄發電子郵件給{{GENDER:$2|使用者}}失敗:$1,{{PLURAL:$3|使用者名稱與密碼|使用者名稱與密碼}}如下顯示。",
+       "passwordreset-emailsent-capture2": "密碼重設{{PLURAL:$1|郵件|郵件}}已寄出,{{PLURAL:$1|使用者名稱與密碼|使用者名稱與密碼清單}}如下顯示。",
+       "passwordreset-emailerror-capture2": "寄發電子郵件給{{GENDER:$2|使用者}}失敗:$1,{{PLURAL:$3|使用者名稱與密碼|使用者名稱與密碼清單}}如下顯示。",
        "passwordreset-nocaller": "必須提供 caller",
        "passwordreset-nosuchcaller": "Caller 不存在:$1",
        "passwordreset-ignored": "未處理密碼重設動作,可能尚未設定提供者?",
        "invalid-content-data": "內容資料無效",
        "content-not-allowed-here": "頁面 [[$2]] 不允許使用 \"$1\" 語法內容",
        "editwarning-warning": "離開此頁面可能會令您遺失之前所作的所有更改。\n若您已經登入,您可在偏好設定的 \"{{int:prefs-editing}}\" 項目關閉此警告。",
+       "editpage-invalidcontentmodel-title": "不支援的內容模型",
+       "editpage-invalidcontentmodel-text": "不支援內容模型 \"$1\"。",
        "editpage-notsupportedcontentformat-title": "不支援此內容格式",
        "editpage-notsupportedcontentformat-text": "內容語法 $2 不支援使用 $1 格式的內容。",
        "content-model-wikitext": "Wikitext",
        "upload-dialog-disabled": "此 wiki 已關閉使用此對話框上傳檔案的功能。",
        "upload-dialog-title": "上傳檔案",
        "upload-dialog-button-cancel": "取消",
+       "upload-dialog-button-back": "返回",
        "upload-dialog-button-done": "完成",
        "upload-dialog-button-save": "儲存",
        "upload-dialog-button-upload": "上傳",
        "uploadstash-errclear": "清除檔案失敗。",
        "uploadstash-refresh": "更新檔案清單",
        "uploadstash-thumbnail": "檢視縮圖",
+       "uploadstash-exception": "無法儲存上傳到儲藏庫 ($1): \"$2\"。",
        "invalid-chunk-offset": "無效區塊位置",
        "img-auth-accessdenied": "拒絕存取",
        "img-auth-nopathinfo": "缺少 PATH_INFO 參數。\n您安裝的伺服器未傳遞此資訊,\n您可能使用 CGI 為基礎的伺服器,且不支援 img_auth 功能。\n請參考 https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization。",
        "apisandbox-results-fixtoken-fail": "取得 \"$1\" 密鑰失敗。",
        "apisandbox-alert-page": "此頁面上的欄位無效。",
        "apisandbox-alert-field": "此欄位的值無效。",
+       "apisandbox-continue": "繼續",
        "apisandbox-continue-clear": "清除",
+       "apisandbox-continue-help": "{{int:apisandbox-continue}} 會 [https://www.mediawiki.org/wiki/API:Query#Continuing_queries 繼續] 最後的請求,{{int:apisandbox-continue-clear}} 則會清除繼續相關的參數。",
        "booksources": "圖書資源",
        "booksources-search-legend": "尋找圖書資源",
        "booksources-isbn": "國際標準書號:",
        "movelogpagetext": "以下是所有移動頁面的動作記錄清單。",
        "movesubpage": "{{PLURAL:$1|子頁面}}",
        "movesubpagetext": "此頁面有 $1 個子頁面如下所示。",
+       "movesubpagetalktext": "對應的對話頁有以下 $1 頁{{PLURAL:$1|子頁面|子頁面}}。",
        "movenosubpage": "此頁面沒有任何子頁面。",
        "movereason": "原因",
        "revertmove": "還原",
        "pageinfo-category-pages": "頁面數量",
        "pageinfo-category-subcats": "子分類數量",
        "pageinfo-category-files": "檔案數量",
+       "pageinfo-user-id": "使用者 ID",
        "markaspatrolleddiff": "標記為已巡查",
        "markaspatrolledtext": "標記此頁面為已巡查",
        "markaspatrolledtext-file": "標記此檔案版本為己巡查",
        "newimages-showbots": "顯示由機器人上傳的檔案",
        "newimages-hidepatrolled": "隱藏己巡查上傳",
        "noimages": "無任何圖片。",
+       "gallery-slideshow-toggle": "切換縮圖",
        "ilsubmit": "搜尋",
        "bydate": "依日期",
        "sp-newimages-showfrom": "顯示自 $1 $2 以來的新檔案",
        "tag-filter": "[[Special:Tags|標籤]]搜尋:",
        "tag-filter-submit": "搜尋",
        "tag-list-wrapper": "([[Special:Tags|$1 個標籤]]:$2)",
+       "tag-mw-contentmodelchange": "內容模型變更",
+       "tag-mw-contentmodelchange-description": "編輯 [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:ChangeContentModel 更改頁面的內容模型]。",
        "tags-title": "標籤",
        "tags-intro": "此頁面列出所有可用來標示編輯內容的標籤以及這些標籤所代表的意思。",
        "tags-tag": "標籤名稱",
        "htmlform-cloner-create": "新增更多",
        "htmlform-cloner-delete": "移除",
        "htmlform-cloner-required": "至少必須填寫一筆資料。",
+       "htmlform-date-placeholder": "YYYY-MM-DD",
+       "htmlform-time-placeholder": "HH:MM:SS",
+       "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
+       "htmlform-date-invalid": "您指定的值不是一個可以辨識的日期,請嘗試使用 YYYY-MM-DD 格式。",
+       "htmlform-time-invalid": "您指定的值不是一個可以辨識的時間,請嘗試使用 HH:MM:SS 格式。",
+       "htmlform-datetime-invalid": "您指定的值不是一個可以辨識的日期及時間,請嘗試使用 YYYY-MM-DD HH:MM:SS 格式。",
+       "htmlform-date-toolow": "您指定的值在允許的日期 $1 之前。",
+       "htmlform-date-toohigh": "您指定的值在允許的日期 $1 之後。",
+       "htmlform-time-toolow": "您指定的值在最早允許的時間 $1 之前。",
+       "htmlform-time-toohigh": "您指定的值在最後允許的時間 $1 之後。",
+       "htmlform-datetime-toolow": "您指定的值在最早允許的日期及時間 $1 之前。",
+       "htmlform-datetime-toohigh": "您指定的值在最後允許的日期及時間 $1 之後。",
        "htmlform-title-badnamespace": "[[:$1]] 不在 \"{{ns:$2}}\" 命名空間中。",
        "htmlform-title-not-creatable": "\"$1\" 並非可用來建立頁面的標題",
        "htmlform-title-not-exists": "$1 並不存在。",
        "feedback-thanks": "感謝!您的意見回饋已發佈到頁面 \"[$2 $1]\"。",
        "feedback-thanks-title": "感謝您!",
        "feedback-useragent": "使用者代理:",
-       "searchsuggest-search": "搜尋",
+       "searchsuggest-search": "搜尋 {{SITENAME}}",
        "searchsuggest-containing": "包含...",
        "api-error-autoblocked": "您的IP位址已經被自動封禁,因為它曾經被一名已封禁的使用者使用過。",
        "api-error-badaccess-groups": "您沒有權限在此 Wiki 上傳檔案。",
        "unlinkaccounts-success": "已取消連結帳號。",
        "authenticationdatachange-ignored": "認証資料變更未被處理,可能未設定提供者?",
        "userjsispublic": "請注意:JavaScript 子頁面可被其他使用者檢視,不應包含憑証資料。",
-       "usercssispublic": "請注意:CSS 子頁面可被其他使用者檢視,不應包含憑証資料。"
+       "usercssispublic": "請注意:CSS 子頁面可被其他使用者檢視,不應包含憑証資料。",
+       "restrictionsfield-badip": "無效的 IP 位址或範圍:$1",
+       "restrictionsfield-label": "允許的 IP 範圍:",
+       "restrictionsfield-help": "一個 IP 位址或 CIDR 範圍一行,要開啟所有範圍可使用 <br><code>0.0.0.0/0</code><br><code>::/0</code>",
+       "edit-error-short": "錯誤:$1",
+       "edit-error-long": "錯誤:\n\n$1"
 }
index 1cb5eef..208cf17 100644 (file)
@@ -104,7 +104,7 @@ abstract class Maintenance {
 
        /**
         * Used by getDB() / setDB()
-        * @var IDatabase
+        * @var Database
         */
        private $mDb = null;
 
@@ -726,6 +726,7 @@ abstract class Maintenance {
 
                if ( is_array( $wgProfiler ) && isset( $wgProfiler['class'] ) ) {
                        $class = $wgProfiler['class'];
+                       /** @var Profiler $profiler */
                        $profiler = new $class(
                                [ 'sampling' => 1, 'output' => [ $output ] ]
                                        + $wgProfiler
@@ -1182,6 +1183,7 @@ abstract class Maintenance {
                $this->beginTransaction( $dbw, __METHOD__ );
 
                # Get "active" text records from the revisions table
+               $cur = [];
                $this->output( 'Searching for active text records in revisions table...' );
                $res = $dbw->select( 'revision', 'rev_text_id', [], __METHOD__, [ 'DISTINCT' ] );
                foreach ( $res as $row ) {
index 9ec61dc..3f0a83d 100644 (file)
@@ -34,11 +34,7 @@ class CheckComposerLockUpToDate extends Maintenance {
                $lock = new ComposerLock( $lockLocation );
                $json = new ComposerJson( $jsonLocation );
 
-               if ( $lock->getHash() === $json->getHash() ) {
-                       $this->output( "Your composer.lock file is up to date with current dependencies!\n" );
-                       return;
-               }
-               // Out of date, lets figure out which dependencies are old
+               // Check all the dependencies to see if any are old
                $found = false;
                $installed = $lock->getInstalledDependencies();
                foreach ( $json->getRequiredDependencies() as $name => $version ) {
@@ -61,8 +57,6 @@ class CheckComposerLockUpToDate extends Maintenance {
                                1
                        );
                } else {
-                       // The hash is the entire composer.json file,
-                       // so it can be updated without any of the dependencies changing
                        // We couldn't find any out-of-date dependencies, so assume everything is ok!
                        $this->output( "Your composer.lock file is up to date with current dependencies!\n" );
                }
index 60b24a2..f3561b5 100644 (file)
@@ -25,6 +25,7 @@
  * @file
  * @ingroup Maintenance
  */
+use MediaWiki\MediaWikiServices;
 
 if ( !defined( 'RUN_MAINTENANCE_IF_MAIN' ) ) {
        echo "This file must be included after Maintenance.php\n";
@@ -113,12 +114,13 @@ $maintenance->execute();
 $maintenance->globals();
 
 // Perform deferred updates.
+$lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+$lbFactory->commitMasterChanges( $maintClass );
 DeferredUpdates::doUpdates();
 
 // log profiling info
 wfLogProfilingData();
 
 // Commit and close up!
-$factory = wfGetLBFactory();
-$factory->commitMasterChanges( 'doMaintenance' );
-$factory->shutdown( $factory::SHUTDOWN_NO_CHRONPROT );
+$lbFactory->commitMasterChanges( 'doMaintenance' );
+$lbFactory->shutdown( $lbFactory::SHUTDOWN_NO_CHRONPROT );
index 068ee8c..aad85da 100644 (file)
@@ -6,7 +6,6 @@
                                "name": "Base",
                                "classes": [
                                        "mw",
-                                       "mw.Map",
                                        "mw.Message",
                                        "mw.loader",
                                        "mw.loader.store",
index b96e7eb..a672e29 100755 (executable)
@@ -145,6 +145,7 @@ class UpdateMediaWiki extends Maintenance {
 
                $this->output( "Going to run database updates for " . wfWikiID() . "\n" );
                if ( $db->getType() === 'sqlite' ) {
+                       /** @var Database|DatabaseSqlite $db */
                        $this->output( "Using SQLite file: '{$db->getDbFilePath()}'\n" );
                }
                $this->output( "Depending on the size of your database this may take a while!\n" );
index ccc68f1..09d7c0b 100644 (file)
@@ -2,82 +2,37 @@
  * Russian (Русский) language functions
  */
 
-// These tests were originally made for names of Wikimedia
-// websites, so they don't currently cover all the possible
-// cases.
-
 mediaWiki.language.convertGrammar = function ( word, form ) {
-       /*global $ */
        'use strict';
 
-       var grammarForms = mediaWiki.language.getData( 'ru', 'grammarForms' );
-       if ( grammarForms && grammarForms[ form ] ) {
-               return grammarForms[ form ][ word ];
+       var forms, transformations, i, rule, sourcePattern, regexp, replacement;
+
+       forms = mediaWiki.language.getData( 'ru', 'grammarForms' );
+       if ( forms && forms[ form ] ) {
+               return forms[ form ][ word ];
+       }
+
+       transformations = mediaWiki.language.getData( 'ru', 'grammarTransformations' );
+
+       if ( !transformations[ form ] ) {
+               return word;
        }
-       switch ( form ) {
-               case 'genitive': // родительный падеж
-                       if ( word.slice( -1 ) === 'ь' ) {
-                               word = word.slice( 0, -1 ) + 'я';
-                       } else if ( word.slice( -2 ) === 'ия' ) {
-                               word = word.slice( 0, -2 ) + 'ии';
-                       } else if ( word.slice( -2 ) === 'ка' ) {
-                               word = word.slice( 0, -2 ) + 'ки';
-                       } else if ( word.slice( -2 ) === 'ти' ) {
-                               word = word.slice( 0, -2 ) + 'тей';
-                       } else if ( word.slice( -2 ) === 'ды' ) {
-                               word = word.slice( 0, -2 ) + 'дов';
-                       } else if ( word.slice( -1 ) === 'д' ) {
-                               word = word.slice( 0, -1 ) + 'да';
-                       } else if ( word.slice( -3 ) === 'ные' ) {
-                               word = word.slice( 0, -3 ) + 'ных';
-                       } else if ( word.slice( -3 ) === 'ник' ) {
-                               word = word.slice( 0, -3 ) + 'ника';
-                       }
-                       break;
-               case 'prepositional': // предложный падеж
-                       if ( word.slice( -1 ) === 'ь' ) {
-                               word = word.slice( 0, -1 ) + 'е';
-                       } else if ( word.slice( -2 ) === 'ия' ) {
-                               word = word.slice( 0, -2 ) + 'ии';
-                       } else if ( word.slice( -2 ) === 'ка' ) {
-                               word = word.slice( 0, -2 ) + 'ке';
-                       } else if ( word.slice( -2 ) === 'ти' ) {
-                               word = word.slice( 0, -2 ) + 'тях';
-                       } else if ( word.slice( -2 ) === 'ды' ) {
-                               word = word.slice( 0, -2 ) + 'дах';
-                       } else if ( word.slice( -1 ) === 'д' ) {
-                               word = word.slice( 0, -1 ) + 'де';
-                       } else if ( word.slice( -3 ) === 'ные' ) {
-                               word = word.slice( 0, -3 ) + 'ных';
-                       } else if ( word.slice( -3 ) === 'ник' ) {
-                               word = word.slice( 0, -3 ) + 'нике';
-                       }
-                       break;
-               case 'languagegen': // язык в родительном падеже ("(с) русского")
-                       if ( word.slice( -3 ) === 'кий' ) {
-                               word = word.slice( 0, -2 ) + 'ого';
-                       } else if ( $.inArray( word, [ 'иврит', 'идиш' ] ) > -1 ) {
-                               word = word + 'а';
-                       }
-                       break;
-               case 'languageprep': // язык в предложном падеже ("(на) русском")
-                       if ( word.slice( -3 ) === 'кий' ) {
-                               word = word.slice( 0, -2 ) + 'ом';
-                       } else if ( $.inArray( word, [ 'иврит', 'идиш' ] ) > -1 ) {
-                               word = word + 'е';
-                       }
-                       break;
-               case 'languageadverb': // наречие с названием языка ("по-русски")
-                       if ( word.slice( -3 ) === 'кий' ) {
-                               word = 'по-' + word.slice( 0, -1 );
-                       } else if ( $.inArray( word, [ 'иврит', 'идиш' ] ) > -1 ) {
-                               word = 'на ' + word + 'е';
-                       } else if ( $.inArray( word, [ 'идо', 'урду', 'хинди', 'эсперанто' ] ) > -1 ) {
-                               word = 'на ' + word;
-                       } else {
-                               word = 'на языке ' + word;
-                       }
-                       break;
+
+       for ( i = 0; i < transformations[ form ].length; i++ ) {
+               rule = transformations[ form ][ i ];
+               sourcePattern = rule[ 0 ];
+
+               if ( sourcePattern === '@metadata' ) {
+                       continue;
+               }
+
+               regexp = new RegExp( sourcePattern );
+               replacement = rule[ 1 ];
+
+               if ( word.match( regexp ) ) {
+                       return word.replace( regexp, replacement );
+               }
        }
+
        return word;
 };
index d9cdf5a..022fa28 100644 (file)
@@ -99,8 +99,8 @@ table.toc td {
 .tocnumber {
        padding-left: 0;
        padding-right: 0.5em;
+       color: #222;
 }
-
 /* @noflip */
 .mw-content-ltr .tocnumber {
        padding-left: 0;
index 5fbfb85..9c52b2a 100644 (file)
@@ -11,6 +11,9 @@ a {
        text-decoration: none;
        color: #0645ad;
        background: none;
+}
+
+a:not( [href] ) {
        cursor: pointer; /* Always cursor:pointer even without href */
 }
 
index a8786ef..9ab2532 100644 (file)
@@ -32,9 +32,9 @@
 
        function convertCheckboxesToMulti( $oldContainer, type ) {
                var $fieldLabel = $( '<td>' ),
-               $td = $( '<td>' ),
-               $fieldLabelText = $( '<label>' ),
-               $container;
+                       $td = $( '<td>' ),
+                       $fieldLabelText = $( '<label>' ),
+                       $container;
                if ( type === 'tr' ) {
                        addMulti( $oldContainer, $td );
                        $container = $( '<tr>' );
                return $container;
        }
 
+       function convertCheckboxesWidgetToCapsules( fieldLayout ) {
+               var checkboxesWidget, checkboxesOptions, capsulesOptions, capsulesWidget;
+
+               checkboxesWidget = fieldLayout.fieldWidget;
+               checkboxesOptions = checkboxesWidget.checkboxMultiselectWidget.getItems();
+               capsulesOptions = checkboxesOptions.map( function ( option ) {
+                       return new OO.ui.MenuOptionWidget( {
+                               data: option.getData(),
+                               label: option.getLabel()
+                       } );
+               } );
+               capsulesWidget = new OO.ui.CapsuleMultiselectWidget( {
+                       menu: {
+                               items: capsulesOptions
+                       }
+               } );
+               capsulesWidget.setItemsFromData( checkboxesWidget.getValue() );
+
+               // Data from CapsuleMultiselectWidget will not be submitted with the form, so keep the original
+               // CheckboxMultiselectInputWidget up-to-date.
+               capsulesWidget.on( 'change', function () {
+                       checkboxesWidget.setValue( capsulesWidget.getItemsData() );
+               } );
+
+               // Hide original widget and add new one in its place. This is a bit hacky, since the FieldLayout
+               // still thinks it's connected to the old widget.
+               checkboxesWidget.toggle( false );
+               checkboxesWidget.$element.after( capsulesWidget.$element );
+       }
+
        mw.hook( 'htmlform.enhance' ).add( function ( $root ) {
-               if ( $root.find( '.mw-htmlform-dropdown' ).length ) {
-                       mw.loader.using( 'jquery.chosen', function () {
-                               $root.find( '.mw-htmlform-dropdown' ).each( function () {
-                                       var type = this.nodeName.toLowerCase(),
-                                               $converted = convertCheckboxesToMulti( $( this ), type );
-                                       $converted.find( '.htmlform-chzn-select' ).chosen( { width: 'auto' } );
-                               } );
+               var $dropdowns = $root.find( '.mw-htmlform-field-HTMLMultiSelectField.mw-htmlform-dropdown' );
+               if ( $dropdowns.length ) {
+                       $dropdowns.each( function () {
+                               var $el = $( this ),
+                                       data, modules, extraModules;
+                               if ( $el.is( '[data-ooui]' ) ) {
+                                       // Load 'oojs-ui-widgets' for CapsuleMultiselectWidget
+                                       modules = [ 'mediawiki.htmlform.ooui', 'oojs-ui-widgets' ];
+                                       data = $el.data( 'mw-modules' );
+                                       if ( data ) {
+                                               // We can trust this value, 'data-mw-*' attributes are banned from user content in Sanitizer
+                                               extraModules = data.split( ',' );
+                                               modules.push.apply( modules, extraModules );
+                                       }
+                                       mw.loader.using( modules, function () {
+                                               /*jshint -W024*/
+                                               convertCheckboxesWidgetToCapsules( OO.ui.FieldLayout.static.infuse( $el ) );
+                                       } );
+                               } else {
+                                       mw.loader.using( 'jquery.chosen', function () {
+                                               var type = $el.is( 'tr' ) ? 'tr' : 'div',
+                                                       $converted = convertCheckboxesToMulti( $el, type );
+                                               $converted.find( '.htmlform-chzn-select' ).chosen( { width: 'auto' } );
+                                       } );
+                               }
                        } );
                }
        } );
index f878e42..6280c95 100644 (file)
        }() );
 
        /**
-        * Create an object that can be read from or written to from methods that allow
+        * Create an object that can be read from or written to via methods that allow
         * interaction both with single and multiple properties at once.
         *
-        *     @example
-        *
-        *     var collection, query, results;
-        *
-        *     // Create your address book
-        *     collection = new mw.Map();
-        *
-        *     // This data could be coming from an external source (eg. API/AJAX)
-        *     collection.set( {
-        *         'John Doe': 'john@example.org',
-        *         'Jane Doe': 'jane@example.org',
-        *         'George van Halen': 'gvanhalen@example.org'
-        *     } );
-        *
-        *     wanted = ['John Doe', 'Jane Doe', 'Daniel Jackson'];
-        *
-        *     // You can detect missing keys first
-        *     if ( !collection.exists( wanted ) ) {
-        *         // One or more are missing (in this case: "Daniel Jackson")
-        *         mw.log( 'One or more names were not found in your address book' );
-        *     }
-        *
-        *     // Or just let it give you what it can. Optionally fill in from a default.
-        *     results = collection.get( wanted, 'nobody@example.com' );
-        *     mw.log( results['Jane Doe'] ); // "jane@example.org"
-        *     mw.log( results['Daniel Jackson'] ); // "nobody@example.com"
-        *
+        * @private
         * @class mw.Map
         *
         * @constructor
-        * @param {Object|boolean} [values] The value-baring object to be mapped. Defaults to an
-        *  empty object.
-        *  For backwards-compatibility with mw.config, this can also be `true` in which case values
-        *  are copied to the Window object as global variables (T72470). Values are copied in
-        *  one direction only. Changes to globals are not reflected in the map.
+        * @param {boolean} [global=false] Whether to synchronise =values to the global
+        *  window object (for backwards-compatibility with mw.config; T72470). Values are
+        *  copied in one direction only. Changes to globals do not reflect in the map.
         */
-       function Map( values ) {
-               if ( values === true ) {
-                       this.values = {};
+       function Map( global ) {
+               this.internalValues = {};
+               if ( global === true ) {
 
                        // Override #set to also set the global variable
                        this.set = function ( selection, value ) {
                                }
                                return false;
                        };
-
-                       return;
                }
 
-               this.values = values || {};
+               // Deprecated since MediaWiki 1.28
+               log.deprecate(
+                       this,
+                       'values',
+                       this.internalValues,
+                       'mw.Map#values is deprecated. Use mw.Map#get() instead.',
+                       'Map-values'
+               );
        }
 
        /**
         * @param {Mixed} value
         */
        function setGlobalMapValue( map, key, value ) {
-               map.values[ key ] = value;
-               mw.log.deprecate(
+               map.internalValues[ key ] = value;
+               log.deprecate(
                                window,
                                key,
                                value,
        }
 
        Map.prototype = {
+               constructor: Map,
+
                /**
                 * Get the value of one or more keys.
                 *
                 * @param {Mixed} [fallback=null] Value for keys that don't exist.
                 * @return {Mixed|Object| null} If selection was a string, returns the value,
                 *  If selection was an array, returns an object of key/values.
-                *  If no selection is passed, the 'values' container is returned. (Beware that,
+                *  If no selection is passed, the internal container is returned. (Beware that,
                 *  as is the default in JavaScript, the object is returned by reference.)
                 */
                get: function ( selection, fallback ) {
                        }
 
                        if ( typeof selection === 'string' ) {
-                               if ( !hasOwn.call( this.values, selection ) ) {
+                               if ( !hasOwn.call( this.internalValues, selection ) ) {
                                        return fallback;
                                }
-                               return this.values[ selection ];
+                               return this.internalValues[ selection ];
                        }
 
                        if ( selection === undefined ) {
-                               return this.values;
+                               return this.internalValues;
                        }
 
                        // Invalid selection key
 
                        if ( $.isPlainObject( selection ) ) {
                                for ( s in selection ) {
-                                       this.values[ s ] = selection[ s ];
+                                       this.internalValues[ s ] = selection[ s ];
                                }
                                return true;
                        }
                        if ( typeof selection === 'string' && arguments.length > 1 ) {
-                               this.values[ selection ] = value;
+                               this.internalValues[ selection ] = value;
                                return true;
                        }
                        return false;
 
                        if ( $.isArray( selection ) ) {
                                for ( s = 0; s < selection.length; s++ ) {
-                                       if ( typeof selection[ s ] !== 'string' || !hasOwn.call( this.values, selection[ s ] ) ) {
+                                       if ( typeof selection[ s ] !== 'string' || !hasOwn.call( this.internalValues, selection[ s ] ) ) {
                                                return false;
                                        }
                                }
                                return true;
                        }
-                       return typeof selection === 'string' && hasOwn.call( this.values, selection );
+                       return typeof selection === 'string' && hasOwn.call( this.internalValues, selection );
                }
        };
 
                 * @param {string} key Name of property to create in `obj`
                 * @param {Mixed} val The value this property should return when accessed
                 * @param {string} [msg] Optional text to include in the deprecation message
+                * @param {string} [logName=key] Optional custom name for the feature.
+                *  This is used instead of `key` in the message and `mw.deprecate` tracking.
                 */
                log.deprecate = !Object.defineProperty ? function ( obj, key, val ) {
                        obj[ key ] = val;
-               } : function ( obj, key, val, msg ) {
-                       msg = 'Use of "' + key + '" is deprecated.' + ( msg ? ( ' ' + msg ) : '' );
+               } : function ( obj, key, val, msg, logName ) {
+                       logName = logName || key;
+                       msg = 'Use of "' + logName + '" is deprecated.' + ( msg ? ( ' ' + msg ) : '' );
                        var logged = new StringSet();
                        function uniqueTrace() {
                                var trace = new Error().stack;
                                        enumerable: true,
                                        get: function () {
                                                if ( uniqueTrace() ) {
-                                                       mw.track( 'mw.deprecate', key );
+                                                       mw.track( 'mw.deprecate', logName );
                                                        mw.log.warn( msg );
                                                }
                                                return val;
                                        },
                                        set: function ( newVal ) {
                                                if ( uniqueTrace() ) {
-                                                       mw.track( 'mw.deprecate', key );
+                                                       mw.track( 'mw.deprecate', logName );
                                                        mw.log.warn( msg );
                                                }
                                                val = newVal;
                                }
                        }
 
+                       /**
+                        * @private
+                        * @param {string[]} implementations Array containing pieces of JavaScript code in the
+                        *  form of calls to mw.loader#implement().
+                        * @param {Function} cb Callback in case of failure
+                        * @param {Error} cb.err
+                        */
+                       function asyncEval( implementations, cb ) {
+                               if ( !implementations.length ) {
+                                       return;
+                               }
+                               mw.requestIdleCallback( function () {
+                                       try {
+                                               $.globalEval( implementations.join( ';' ) );
+                                       } catch ( err ) {
+                                               cb( err );
+                                       }
+                               } );
+                       }
+
                        /**
                         * Make a versioned key for a specific module.
                         *
                                }
                                return {
                                        name: key.slice( 0, index ),
-                                       version: key.slice( index )
+                                       version: key.slice( index + 1 )
                                };
                        }
 
                                 * @protected
                                 */
                                work: function () {
-                                       var q, batch, concatSource, origBatch;
+                                       var q, batch, implementations, sourceModules;
 
                                        batch = [];
 
 
                                        mw.loader.store.init();
                                        if ( mw.loader.store.enabled ) {
-                                               concatSource = [];
-                                               origBatch = batch;
+                                               implementations = [];
+                                               sourceModules = [];
                                                batch = $.grep( batch, function ( module ) {
-                                                       var source = mw.loader.store.get( module );
-                                                       if ( source ) {
-                                                               concatSource.push( source );
+                                                       var implementation = mw.loader.store.get( module );
+                                                       if ( implementation ) {
+                                                               implementations.push( implementation );
+                                                               sourceModules.push( module );
                                                                return false;
                                                        }
                                                        return true;
                                                } );
-                                               try {
-                                                       $.globalEval( concatSource.join( ';' ) );
-                                               } catch ( err ) {
+                                               asyncEval( implementations, function ( err ) {
                                                        // Not good, the cached mw.loader.implement calls failed! This should
                                                        // never happen, barring ResourceLoader bugs, browser bugs and PEBKACs.
                                                        // Depending on how corrupt the string is, it is likely that some
                                                        // something that infected the implement call itself, don't take any
                                                        // risks and clear everything in this cache.
                                                        mw.loader.store.clear();
-                                                       // Re-add the ones still pending back to the batch and let the server
-                                                       // repopulate these modules to the cache.
-                                                       // This means that at most one module will be useless (the one that had
-                                                       // the error) instead of all of them.
+
                                                        mw.track( 'resourceloader.exception', { exception: err, source: 'store-eval' } );
-                                                       origBatch = $.grep( origBatch, function ( module ) {
+                                                       // Re-add the failed ones that are still pending back to the batch
+                                                       var failed = $.grep( sourceModules, function ( module ) {
                                                                return registry[ module ].state === 'loading';
                                                        } );
-                                                       batch = batch.concat( origBatch );
-                                               }
+                                                       batchRequest( failed );
+                                               } );
                                        }
 
                                        batchRequest( batch );
index cb62fbf..a9d17ff 100644 (file)
         */
        mw.storage = {
 
-               localStorage: window.localStorage,
+               localStorage: ( function () {
+                       // Catch exceptions to avoid fatal in Chrome's "Block data storage" mode
+                       // which throws when accessing the localStorage property itself, as opposed
+                       // to the standard behaviour of throwing on getItem/setItem. (T148998)
+                       try {
+                               return window.localStorage;
+                       } catch ( e ) {}
+               }() ),
 
                /**
                 * Retrieve value from device storage.
index 52a1efb..63e7de8 100644 (file)
@@ -89,7 +89,7 @@
                 * @return {number} Current user's id, or 0 if user is anonymous
                 */
                getId: function () {
-                       return mw.config.get( 'wgUserId', 0 );
+                       return mw.config.get( 'wgUserId' ) || 0;
                },
 
                /**
index 474d541..2ff75d2 100644 (file)
@@ -17,6 +17,9 @@ ul.gallery {
        margin: 2px;
        padding: 2px;
        display: block;
+       width: -moz-fit-content;
+       width: -webkit-fit-content;
+       width: fit-content;
 }
 
 li.gallerycaption {
index a0d6b22..e433c2e 100644 (file)
@@ -26,6 +26,7 @@
  * @ingroup Testing
  */
 use MediaWiki\MediaWikiServices;
+use Wikimedia\ScopedCallback;
 
 /**
  * @ingroup Testing
@@ -175,7 +176,7 @@ class ParserTestRunner {
                // arrays: $setup and $teardown. The code snippets in the $setup array
                // are executed at the end of the method, before it returns, and the
                // code snippets in the $teardown array are executed in reverse order
-               // when the ScopedCallback object is consumed.
+               // when the Wikimedia\ScopedCallback object is consumed.
 
                // Because it is a common operation to save, set and restore global
                // variables, we have an additional convention: when the array key of
index 7437053..9a2a9c9 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\ScopedCallback;
+
 require __DIR__ . '/../../maintenance/Maintenance.php';
 
 // Make RequestContext::resetMain() happy
diff --git a/tests/phpunit/data/upload/buggynamespace-bad.svg b/tests/phpunit/data/upload/buggynamespace-bad.svg
new file mode 100644 (file)
index 0000000..974fac0
--- /dev/null
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1"
+        id="svg2" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:version="0.32" sodipodi:docname="India_location_map.svg" inkscape:version="0.46"
+        xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1500px"
+        height="1614.844px" viewBox="0 0 1500 1614.844" enable-background="new 0 0 1500 1614.844" xml:space="preserve">
+<switch>
+       <foreignObject requiredExtensions="&ns_ai;" x="0" y="0" width="1" height="1">
+               <i:pgfRef  xlink:href="#adobe_illustrator_pgf">
+               </i:pgfRef>
+       </foreignObject>
+       <g i:extraneous="self">
+               <circle cx="750" cy="750" r="500" />
+       </g>
+</switch>
+<i:pgf  id="adobe_illustrator_pgf">
+       <![CDATA[
+       eJzsvWl3XjXyL3pf91r9HZ50MyQkfrw1awcIZCBAYyAQaEIzBMd+krjx1LYDzf/F+exXNUml/Qwx
+d1/++qv/+P2XX3/z1fc//9mvf/jyH796+/Lbc2Z9+eNXvzn/9Pbr77/64cfvvv/q7Ye//+53hNBH
++sFf/MXf/Nv/5ec/+38A7g2BFw==
+       ]]>
+</i:pgf>
+</svg>
diff --git a/tests/phpunit/data/upload/buggynamespace-evilhtml.svg b/tests/phpunit/data/upload/buggynamespace-evilhtml.svg
new file mode 100644 (file)
index 0000000..f4be479
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+       <!ENTITY ns_html "http://www.w3.org/1999/xhtml">
+]>
+<svg:svg version="1.1"
+        id="svg2"
+        xmlns="&ns_html;"
+        xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1500px"
+        height="1614.844px" viewBox="0 0 1500 1614.844" enable-background="new 0 0 1500 1614.844" xml:space="preserve">
+       <svg:g><div>foo</div></svg:g>
+</svg:svg>
diff --git a/tests/phpunit/data/upload/buggynamespace-okay.svg b/tests/phpunit/data/upload/buggynamespace-okay.svg
new file mode 100644 (file)
index 0000000..4a5c6aa
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:i="&amp;ns_ai;"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.1"
+   width="1500"
+   height="1614.844"
+   viewBox="0 0 1500 1614.844"
+   id="svg2"
+   xml:space="preserve"><metadata
+   id="metadata15"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+   id="defs13" />
+<switch
+   id="switch3">
+       <foreignObject
+   id="foreignObject5"
+   height="1"
+   width="1"
+   y="0"
+   x="0"
+   requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/">
+               <i:pgfRef
+   xlink:href="#adobe_illustrator_pgf">
+               </i:pgfRef>
+       </foreignObject>
+       <g
+   id="g7">
+               <circle
+   cx="750"
+   cy="750"
+   r="500"
+   id="circle9" />
+       </g>
+</switch>
+<i:pgf
+   id="adobe_illustrator_pgf">
+       
+       eJzsvWl3XjXyL3pf91r9HZ50MyQkfrw1awcIZCBAYyAQaEIzBMd+krjx1LYDzf/F+exXNUml/Qwx
+d1/++qv/+P2XX3/z1fc//9mvf/jyH796+/Lbc2Z9+eNXvzn/9Pbr77/64cfvvv/q7Ye//+53hNBH
++sFf/MXf/Nv/5ec/+38A7g2BFw==
+       
+</i:pgf>
+</svg>
\ No newline at end of file
diff --git a/tests/phpunit/data/upload/buggynamespace-okay2.svg b/tests/phpunit/data/upload/buggynamespace-okay2.svg
new file mode 100644 (file)
index 0000000..fe42310
--- /dev/null
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:i="&amp;#38;ns_ai;"
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   version="1.1"
+   width="1500"
+   height="1614.844"
+   viewBox="0 0 1500 1614.844"
+   id="svg2"
+   xml:space="preserve"><metadata
+   id="metadata15"><rdf:RDF><cc:Work
+       rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+         rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+   id="defs13" />
+<switch
+   id="switch3">
+       <foreignObject
+   requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/"
+   x="0"
+   y="0"
+   width="1"
+   height="1"
+   id="foreignObject5">
+               <i:pgfRef
+   xlink:href="#adobe_illustrator_pgf">
+               </i:pgfRef>
+       </foreignObject>
+       <g
+   id="g7">
+               <circle
+   cx="750"
+   cy="750"
+   r="500"
+   id="circle9" />
+       </g>
+</switch>
+<i:pgf
+   id="adobe_illustrator_pgf">
+       
+       eJzsvWl3XjXyL3pf91r9HZ50MyQkfrw1awcIZCBAYyAQaEIzBMd+krjx1LYDzf/F+exXNUml/Qwx
+d1/++qv/+P2XX3/z1fc//9mvf/jyH796+/Lbc2Z9+eNXvzn/9Pbr77/64cfvvv/q7Ye//+53hNBH
++sFf/MXf/Nv/5ec/+38A7g2BFw==
+       
+</i:pgf>
+</svg>
\ No newline at end of file
diff --git a/tests/phpunit/data/upload/buggynamespace-original.svg b/tests/phpunit/data/upload/buggynamespace-original.svg
new file mode 100644 (file)
index 0000000..c61c91c
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 13.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 14948)  -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+       <!ENTITY ns_extend "http://ns.adobe.com/Extensibility/1.0/">
+       <!ENTITY ns_ai "http://ns.adobe.com/AdobeIllustrator/10.0/">
+       <!ENTITY ns_graphs "http://ns.adobe.com/Graphs/1.0/">
+       <!ENTITY ns_vars "http://ns.adobe.com/Variables/1.0/">
+       <!ENTITY ns_imrep "http://ns.adobe.com/ImageReplacement/1.0/">
+       <!ENTITY ns_sfw "http://ns.adobe.com/SaveForWeb/1.0/">
+       <!ENTITY ns_custom "http://ns.adobe.com/GenericCustomNamespace/1.0/">
+       <!ENTITY ns_adobe_xpath "http://ns.adobe.com/XPath/1.0/">
+]>
+<svg version="1.1"
+        id="svg2" xmlns:x="&ns_extend;" xmlns:i="&ns_ai;" xmlns:graph="&ns_graphs;" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:svg="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:cc="http://creativecommons.org/ns#" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" inkscape:output_extension="org.inkscape.output.svg.inkscape" sodipodi:version="0.32" sodipodi:docname="India_location_map.svg" inkscape:version="0.46"
+        xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="1500px"
+        height="1614.844px" viewBox="0 0 1500 1614.844" enable-background="new 0 0 1500 1614.844" xml:space="preserve">
+<switch>
+       <foreignObject requiredExtensions="&ns_ai;" x="0" y="0" width="1" height="1">
+               <i:pgfRef  xlink:href="#adobe_illustrator_pgf">
+               </i:pgfRef>
+       </foreignObject>
+       <g i:extraneous="self">
+               <circle cx="750" cy="750" r="500" />
+       </g>
+</switch>
+<i:pgf  id="adobe_illustrator_pgf">
+       <![CDATA[
+       eJzsvWl3XjXyL3pf91r9HZ50MyQkfrw1awcIZCBAYyAQaEIzBMd+krjx1LYDzf/F+exXNUml/Qwx
+d1/++qv/+P2XX3/z1fc//9mvf/jyH796+/Lbc2Z9+eNXvzn/9Pbr77/64cfvvv/q7Ye//+53hNBH
++sFf/MXf/Nv/5ec/+38A7g2BFw==
+       ]]>
+</i:pgf>
+</svg>
index c9c50c0..dc0c64c 100644 (file)
@@ -313,6 +313,7 @@ class MediaWikiServicesTest extends MediaWikiTestCase {
                        'WatchedItemStore' => [ 'WatchedItemStore', WatchedItemStore::class ],
                        'WatchedItemQueryService' => [ 'WatchedItemQueryService', WatchedItemQueryService::class ],
                        'CryptRand' => [ 'CryptRand', CryptRand::class ],
+                       'CryptHKDF' => [ 'CryptHKDF', CryptHKDF::class ],
                        'MediaHandlerFactory' => [ 'MediaHandlerFactory', MediaHandlerFactory::class ],
                        'Parser' => [ 'Parser', Parser::class ],
                        'GenderCache' => [ 'GenderCache', GenderCache::class ],
index c51d496..ba47059 100644 (file)
@@ -1,5 +1,6 @@
 <?php
 use MediaWiki\Linker\LinkTarget;
+use Wikimedia\ScopedCallback;
 
 /**
  * @author Addshore
index dc6fc62..13486e2 100644 (file)
@@ -6,6 +6,7 @@ use MediaWiki\Session\SessionInfo;
 use MediaWiki\Session\UserInfo;
 use Psr\Log\LogLevel;
 use StatusValue;
+use Wikimedia\ScopedCallback;
 
 /**
  * @group AuthManager
@@ -184,7 +185,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                $rProp = new \ReflectionProperty( AuthManager::class, 'instance' );
                $rProp->setAccessible( true );
                $old = $rProp->getValue();
-               $cb = new \ScopedCallback( [ $rProp, 'setValue' ], [ $old ] );
+               $cb = new ScopedCallback( [ $rProp, 'setValue' ], [ $old ] );
                $rProp->setValue( null );
 
                $singleton = AuthManager::singleton();
@@ -202,11 +203,11 @@ class AuthManagerTest extends \MediaWikiTestCase {
 
                list( $provider, $reset ) = $this->getMockSessionProvider( false );
                $this->assertFalse( $this->manager->canAuthenticateNow() );
-               \ScopedCallback::consume( $reset );
+               ScopedCallback::consume( $reset );
 
                list( $provider, $reset ) = $this->getMockSessionProvider( true );
                $this->assertTrue( $this->manager->canAuthenticateNow() );
-               \ScopedCallback::consume( $reset );
+               ScopedCallback::consume( $reset );
        }
 
        public function testNormalizeUsername() {
@@ -385,7 +386,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                        $this->unhook( 'SecuritySensitiveOperationStatus' );
                }
 
-               \ScopedCallback::consume( $reset );
+               ScopedCallback::consume( $reset );
        }
 
        public function onSecuritySensitiveOperationStatus( &$status, $operation, $session, $time ) {
@@ -585,7 +586,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                $this->initializeManager();
 
                $context = \RequestContext::getMain();
-               $reset = new \ScopedCallback( [ $context, 'setLanguage' ], [ $context->getLanguage() ] );
+               $reset = new ScopedCallback( [ $context, 'setLanguage' ], [ $context->getLanguage() ] );
                $context->setLanguage( 'de' );
                $this->setMwGlobals( 'wgContLang', \Language::factory( 'zh' ) );
 
@@ -712,7 +713,7 @@ class AuthManagerTest extends \MediaWikiTestCase {
                }
                $this->unhook( 'UserLoggedIn' );
                $this->assertNull( $this->request->getSession()->getSecret( 'AuthManager::authnState' ) );
-               \ScopedCallback::consume( $reset );
+               ScopedCallback::consume( $reset );
                $this->initializeManager( true );
 
                // CreatedAccountAuthenticationRequest
@@ -1449,11 +1450,11 @@ class AuthManagerTest extends \MediaWikiTestCase {
                ];
                $block = new \Block( $blockOptions );
                $block->insert();
-               $scopeVariable = new \ScopedCallback( [ $block, 'delete' ] );
+               $scopeVariable = new ScopedCallback( [ $block, 'delete' ] );
                $status = $this->manager->checkAccountCreatePermissions( new \User );
                $this->assertFalse( $status->isOK() );
                $this->assertTrue( $status->hasMessage( 'cantcreateaccount-range-text' ) );
-               \ScopedCallback::consume( $scopeVariable );
+               ScopedCallback::consume( $scopeVariable );
 
                $this->setMwGlobals( [
                        'wgEnableDnsBlacklist' => true,
index e6d3ecf..68f574b 100644 (file)
@@ -152,7 +152,7 @@ class CheckBlocksSecondaryAuthenticationProviderTest extends \MediaWikiTestCase
                ];
                $block = new \Block( $blockOptions );
                $block->insert();
-               $scopeVariable = new \ScopedCallback( [ $block, 'delete' ] );
+               $scopeVariable = new \Wikimedia\ScopedCallback( [ $block, 'delete' ] );
 
                $user = \User::newFromName( 'UTNormalUser' );
                if ( $user->getID() == 0 ) {
index 8161ed4..bc78c08 100644 (file)
@@ -2,6 +2,8 @@
 
 namespace MediaWiki\Auth;
 
+use Wikimedia\ScopedCallback;
+
 /**
  * @group AuthManager
  * @group Database
@@ -70,7 +72,7 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                        } );
                }
 
-               return new \ScopedCallback( function () {
+               return new ScopedCallback( function () {
                        \Hooks::clear( 'AlternateUserMailer' );
                        \Hooks::register( 'AlternateUserMailer', function () {
                                return false;
@@ -414,7 +416,7 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
 
                $dbw = wfGetDB( DB_MASTER );
                $oldHash = $dbw->selectField( 'user', 'user_newpassword', [ 'user_name' => $cuser ] );
-               $cb = new \ScopedCallback( function () use ( $dbw, $cuser, $oldHash ) {
+               $cb = new ScopedCallback( function () use ( $dbw, $cuser, $oldHash ) {
                        $dbw->update( 'user', [ 'user_newpassword' => $oldHash ], [ 'user_name' => $cuser ] );
                } );
 
@@ -451,7 +453,7 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                $changeReq->password = $newpass;
                $resetMailer = $this->hookMailer();
                $provider->providerChangeAuthenticationData( $changeReq );
-               \ScopedCallback::consume( $resetMailer );
+               ScopedCallback::consume( $resetMailer );
 
                $loginReq->password = $oldpass;
                $ret = $provider->beginPrimaryAuthentication( $loginReqs );
@@ -573,7 +575,7 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                        return false;
                } );
                $provider->providerChangeAuthenticationData( $req );
-               \ScopedCallback::consume( $resetMailer );
+               ScopedCallback::consume( $resetMailer );
                $this->assertTrue( $mailed );
 
                $priv = \TestingAccessWrapper::newFromObject( $provider );
@@ -723,7 +725,7 @@ class TemporaryPasswordPrimaryAuthenticationProviderTest extends \MediaWikiTestC
                $this->assertSame( 'byemail', $provider->finishAccountCreation( $user, $creator, $res ) );
                $this->assertTrue( $mailed );
 
-               \ScopedCallback::consume( $resetMailer );
+               ScopedCallback::consume( $resetMailer );
                $this->assertTrue( $mailed );
        }
 
diff --git a/tests/phpunit/includes/interwiki/InterwikiLookupAdapterTest.php b/tests/phpunit/includes/interwiki/InterwikiLookupAdapterTest.php
new file mode 100644 (file)
index 0000000..4754b04
--- /dev/null
@@ -0,0 +1,117 @@
+<?php
+
+/**
+ * @covers MediaWiki\Interwiki\InterwikiLookupAdapter
+ *
+ * @group MediaWiki
+ * @group Interwiki
+ */
+use MediaWiki\Interwiki\InterwikiLookupAdapter;
+
+class InterwikiLookupAdapterTest extends MediaWikiTestCase {
+
+       /**
+        * @var InterwikiLookupAdapter
+        */
+       private $interwikiLookup;
+
+       protected function setUp() {
+               parent::setUp();
+
+               $this->interwikiLookup = new InterwikiLookupAdapter(
+                       $this->getSiteLookup( $this->getSites() )
+               );
+       }
+
+       public function testIsValidInterwiki() {
+               $this->assertTrue(
+                       $this->interwikiLookup->isValidInterwiki( 'enwt' ),
+                       'enwt known prefix is valid'
+               );
+               $this->assertTrue(
+                       $this->interwikiLookup->isValidInterwiki( 'foo' ),
+                       'foo site known prefix is valid'
+               );
+               $this->assertFalse(
+                       $this->interwikiLookup->isValidInterwiki( 'xyz' ),
+                       'unknown prefix is not valid'
+               );
+       }
+
+       public function testFetch() {
+
+               $interwiki = $this->interwikiLookup->fetch( '' );
+               $this->assertNull( $interwiki );
+
+               $interwiki = $this->interwikiLookup->fetch( 'xyz' );
+               $this->assertFalse( $interwiki );
+
+               $interwiki = $this->interwikiLookup->fetch( 'foo' );
+               $this->assertInstanceOf( Interwiki::class, $interwiki );
+               $this->assertSame( 'foobar', $interwiki->getWikiID() );
+
+               $interwiki = $this->interwikiLookup->fetch( 'enwt' );
+               $this->assertInstanceOf( Interwiki::class, $interwiki );
+
+               $this->assertSame( 'https://en.wiktionary.org/wiki/$1', $interwiki->getURL(), 'getURL' );
+               $this->assertSame( 'https://en.wiktionary.org/w/api.php', $interwiki->getAPI(), 'getAPI' );
+               $this->assertSame( 'enwiktionary', $interwiki->getWikiID(), 'getWikiID' );
+               $this->assertTrue( $interwiki->isLocal(), 'isLocal' );
+       }
+
+       public function testGetAllPrefixes() {
+               $this->assertEquals(
+                       [ 'foo', 'enwt' ],
+                       $this->interwikiLookup->getAllPrefixes(),
+                       'getAllPrefixes()'
+               );
+
+               $this->assertEquals(
+                       [ 'foo' ],
+                       $this->interwikiLookup->getAllPrefixes( false ),
+                       'get external prefixes'
+               );
+
+               $this->assertEquals(
+                       [ 'enwt' ],
+                       $this->interwikiLookup->getAllPrefixes( true ),
+                       'get local prefixes'
+               );
+       }
+
+       private function getSiteLookup( SiteList $sites ) {
+               $siteLookup = $this->getMockBuilder( SiteLookup::class )
+                       ->disableOriginalConstructor()
+                       ->getMock();
+
+               $siteLookup->expects( $this->any() )
+                       ->method( 'getSites' )
+                       ->will( $this->returnValue( $sites ) );
+
+               return $siteLookup;
+       }
+
+       private function getSites() {
+               $sites = [];
+
+               $site = new Site();
+               $site->setGlobalId( 'foobar' );
+               $site->addInterwikiId( 'foo' );
+               $site->setSource( 'external' );
+               $sites[] = $site;
+
+               $site = new MediaWikiSite();
+               $site->setGlobalId( 'enwiktionary' );
+               $site->setGroup( 'wiktionary' );
+               $site->setLanguageCode( 'en' );
+               $site->addNavigationId( 'enwiktionary' );
+               $site->addInterwikiId( 'enwt' );
+               $site->setSource( 'local' );
+               $site->setPath( MediaWikiSite::PATH_PAGE, "https://en.wiktionary.org/wiki/$1" );
+               $site->setPath( MediaWikiSite::PATH_FILE, "https://en.wiktionary.org/w/$1" );
+               $sites[] = $site;
+
+               return new SiteList( $sites );
+       }
+
+}
index 3cde3e2..ded5f8f 100644 (file)
@@ -11,22 +11,6 @@ class ComposerJsonTest extends MediaWikiTestCase {
                $this->json2 = "$IP/tests/phpunit/data/composer/new-composer.json";
        }
 
-       public static function provideGetHash() {
-               return [
-                       [ 'json', 'cc6e7fc565b246cb30b0cac103a2b31e' ],
-                       [ 'json2', '19921dd1fc457f1b00561da932432001' ],
-               ];
-       }
-
-       /**
-        * @dataProvider provideGetHash
-        * @covers ComposerJson::getHash
-        */
-       public function testIsHashUpToDate( $file, $expected ) {
-               $json = new ComposerJson( $this->$file );
-               $this->assertEquals( $expected, $json->getHash() );
-       }
-
        /**
         * @covers ComposerJson::__construct
         * @covers ComposerJson::getRequiredDependencies
index 3d5e8d3..eef7e27 100644 (file)
@@ -10,14 +10,6 @@ class ComposerLockTest extends MediaWikiTestCase {
                $this->lock = "$IP/tests/phpunit/data/composer/composer.lock";
        }
 
-       /**
-        * @covers ComposerLock::getHash
-        */
-       public function testGetHash() {
-               $lock = new ComposerLock( $this->lock );
-               $this->assertEquals( 'a3bb80b0ac4c4a31e52574d48c032923', $lock->getHash() );
-       }
-
        /**
         * @covers ComposerLock::__construct
         * @covers ComposerLock::getInstalledDependencies
index 4e455f7..aa46c96 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 
-class WANObjectCacheTest extends MediaWikiTestCase {
+class WANObjectCacheTest extends PHPUnit_Framework_TestCase  {
        /** @var WANObjectCache */
        private $cache;
        /**@var BagOStuff */
@@ -9,17 +9,11 @@ class WANObjectCacheTest extends MediaWikiTestCase {
        protected function setUp() {
                parent::setUp();
 
-               if ( $this->getCliArg( 'use-wanobjectcache' ) ) {
-                       $name = $this->getCliArg( 'use-wanobjectcache' );
-
-                       $this->cache = ObjectCache::getWANInstance( $name );
-               } else {
-                       $this->cache = new WANObjectCache( [
-                               'cache' => new HashBagOStuff(),
-                               'pool' => 'testcache-hash',
-                               'relayer' => new EventRelayerNull( [] )
-                       ] );
-               }
+               $this->cache = new WANObjectCache( [
+                       'cache' => new HashBagOStuff(),
+                       'pool' => 'testcache-hash',
+                       'relayer' => new EventRelayerNull( [] )
+               ] );
 
                $wanCache = TestingAccessWrapper::newFromObject( $this->cache );
                /** @noinspection PhpUndefinedFieldInspection */
@@ -147,6 +141,19 @@ class WANObjectCacheTest extends MediaWikiTestCase {
                                $key, 100, $callback, [ 'pcTTL' => 5, 'pcGroup' => $groups[$i] ] );
                }
                $this->assertEquals( 9, $hit, "Values evicted" );
+
+               $key = reset( $keys );
+               // Get into cache
+               $this->cache->getWithSetCallback( $key, 100, $callback, [ 'pcTTL' => 5 ] );
+               $this->cache->getWithSetCallback( $key, 100, $callback, [ 'pcTTL' => 5 ] );
+               $this->assertEquals( 10, $hit, "Value cached" );
+               $outerCallback = function () use ( &$callback, $key ) {
+                       $v = $this->cache->getWithSetCallback( $key, 100, $callback, [ 'pcTTL' => 5 ] );
+
+                       return 43 + $v;
+               };
+               $this->cache->getWithSetCallback( $key, 100, $outerCallback );
+               $this->assertEquals( 11, $hit, "Nested callback value process cache skipped" );
        }
 
        /**
@@ -206,7 +213,7 @@ class WANObjectCacheTest extends MediaWikiTestCase {
                $this->assertEquals( $value, $v, "Value returned" );
                $this->assertEquals( 1, $wasSet, "Value regenerated due to check keys" );
                $this->assertEquals( $value, $priorValue, "Has prior value" );
-               $this->assertType( 'float', $priorAsOf, "Has prior value" );
+               $this->assertInternalType( 'float', $priorAsOf, "Has prior value" );
                $t1 = $cache->getCheckKeyTime( $cKey1 );
                $this->assertGreaterThanOrEqual( $priorTime, $t1, 'Check keys generated on miss' );
                $t2 = $cache->getCheckKeyTime( $cKey2 );
@@ -316,7 +323,7 @@ class WANObjectCacheTest extends MediaWikiTestCase {
                $this->assertEquals( $value, $v[$keyB], "Value returned" );
                $this->assertEquals( 1, $wasSet, "Value regenerated due to check keys" );
                $this->assertEquals( $value, $priorValue, "Has prior value" );
-               $this->assertType( 'float', $priorAsOf, "Has prior value" );
+               $this->assertInternalType( 'float', $priorAsOf, "Has prior value" );
                $t1 = $cache->getCheckKeyTime( $cKey1 );
                $this->assertGreaterThanOrEqual( $priorTime, $t1, 'Check keys generated on miss' );
                $t2 = $cache->getCheckKeyTime( $cKey2 );
index 9f4e1fa..5f1bf0c 100644 (file)
@@ -1,5 +1,7 @@
 <?php
 
+use Wikimedia\ScopedCallback;
+
 class WikiCategoryPageTest extends MediaWikiLangTestCase {
 
        /**
index b38c98d..c920982 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+use Wikimedia\ScopedCallback;
 
 /**
  * This is the TestCase subclass for running a single parser test via the
index 167f52a..1de4265 100644 (file)
@@ -252,6 +252,41 @@ class ExtensionRegistryTest extends MediaWikiTestCase {
                                        'mwtestT100767' => false,
                                ],
                        ],
+                       [
+                               'test array_replace_recursive',
+                               [
+                                       'mwtestJsonConfigs' => [
+                                               'JsonZeroConfig' => [
+                                                       'namespace' => 480,
+                                                       'nsName' => 'Zero',
+                                                       'isLocal' => false,
+                                               ],
+                                       ],
+                               ],
+                               [
+                                       'mwtestJsonConfigs' => [
+                                               'JsonZeroConfig' => [
+                                                       'isLocal' => false,
+                                                       'remote' => [
+                                                               'username' => 'foo',
+                                                       ],
+                                               ],
+                                               ExtensionRegistry::MERGE_STRATEGY => 'array_replace_recursive',
+                                       ],
+                               ],
+                               [
+                                       'mwtestJsonConfigs' => [
+                                               'JsonZeroConfig' => [
+                                                       'namespace' => 480,
+                                                       'nsName' => 'Zero',
+                                                       'isLocal' => false,
+                                                       'remote' => [
+                                                               'username' => 'foo',
+                                                       ],
+                                               ],
+                                       ],
+                               ],
+                       ],
                ];
        }
 }
index b12d235..a332528 100644 (file)
@@ -199,6 +199,12 @@ class ResourceLoaderWikiModuleTest extends ResourceLoaderTestCase {
                $rl->register( 'testmodule', $module );
                $context = new ResourceLoaderContext( $rl, new FauxRequest() );
 
+               TestResourceLoaderWikiModule::invalidateModuleCache(
+                       Title::newFromText( 'MediaWiki:Common.css' ),
+                       null,
+                       null,
+                       wfWikiID()
+               );
                TestResourceLoaderWikiModule::preloadTitleInfo(
                        $context,
                        wfGetDB( DB_REPLICA ),
index 799a97b..34e5e44 100644 (file)
@@ -21,7 +21,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                        }
                        return false;
                } );
-               $reset[] = new \ScopedCallback( 'restore_error_handler' );
+               $reset[] = new \Wikimedia\ScopedCallback( 'restore_error_handler' );
 
                $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' );
                $rProp->setAccessible( true );
@@ -30,7 +30,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                        $oldManager = $old->manager;
                        $oldStore = $old->store;
                        $oldLogger = $old->logger;
-                       $reset[] = new \ScopedCallback(
+                       $reset[] = new \Wikimedia\ScopedCallback(
                                [ PHPSessionHandler::class, 'install' ],
                                [ $oldManager, $oldStore, $oldLogger ]
                        );
@@ -49,7 +49,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
 
                $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' );
                $rProp->setAccessible( true );
-               $reset = new \ScopedCallback( [ $rProp, 'setValue' ], [ $rProp->getValue() ] );
+               $reset = new \Wikimedia\ScopedCallback( [ $rProp, 'setValue' ], [ $rProp->getValue() ] );
                $rProp->setValue( $handler );
 
                $handler->setEnableFlags( 'enable' );
@@ -123,7 +123,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                ] );
                PHPSessionHandler::install( $manager );
                $wrap = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
-               $reset[] = new \ScopedCallback(
+               $reset[] = new \Wikimedia\ScopedCallback(
                        [ $wrap, 'setEnableFlags' ],
                        [ $wrap->enable ? $wrap->warn ? 'warn' : 'enable' : 'disable' ]
                );
@@ -326,7 +326,7 @@ class PHPSessionHandlerTest extends MediaWikiTestCase {
                \TestingAccessWrapper::newFromObject( $handler )->setEnableFlags( 'disable' );
                $oldValue = $rProp->getValue();
                $rProp->setValue( $handler );
-               $reset = new \ScopedCallback( [ $rProp, 'setValue' ], [ $oldValue ] );
+               $reset = new \Wikimedia\ScopedCallback( [ $rProp, 'setValue' ], [ $oldValue ] );
 
                call_user_func_array( [ $handler, $method ], $args );
        }
index a3d5de7..8a0adba 100644 (file)
@@ -464,7 +464,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                // Save happens when delay is consumed
                $this->onSessionMetadataCalled = false;
                $priv->metaDirty = true;
-               \ScopedCallback::consume( $delay );
+               \Wikimedia\ScopedCallback::consume( $delay );
                $this->assertTrue( $this->onSessionMetadataCalled );
 
                // Test multiple delays
@@ -475,11 +475,11 @@ class SessionBackendTest extends MediaWikiTestCase {
                $priv->metaDirty = true;
                $priv->autosave();
                $this->assertFalse( $this->onSessionMetadataCalled );
-               \ScopedCallback::consume( $delay3 );
+               \Wikimedia\ScopedCallback::consume( $delay3 );
                $this->assertFalse( $this->onSessionMetadataCalled );
-               \ScopedCallback::consume( $delay1 );
+               \Wikimedia\ScopedCallback::consume( $delay1 );
                $this->assertFalse( $this->onSessionMetadataCalled );
-               \ScopedCallback::consume( $delay2 );
+               \Wikimedia\ScopedCallback::consume( $delay2 );
                $this->assertTrue( $this->onSessionMetadataCalled );
        }
 
@@ -822,7 +822,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                        $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' );
                        $rProp->setAccessible( true );
                        $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
-                       $resetHandler = new \ScopedCallback( function () use ( $handler ) {
+                       $resetHandler = new \Wikimedia\ScopedCallback( function () use ( $handler ) {
                                session_write_close();
                                $handler->enable = false;
                        } );
@@ -862,7 +862,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                        $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' );
                        $rProp->setAccessible( true );
                        $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
-                       $resetHandler = new \ScopedCallback( function () use ( $handler ) {
+                       $resetHandler = new \Wikimedia\ScopedCallback( function () use ( $handler ) {
                                session_write_close();
                                $handler->enable = false;
                        } );
@@ -898,7 +898,7 @@ class SessionBackendTest extends MediaWikiTestCase {
                        $rProp = new \ReflectionProperty( PHPSessionHandler::class, 'instance' );
                        $rProp->setAccessible( true );
                        $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
-                       $resetHandler = new \ScopedCallback( function () use ( $handler ) {
+                       $resetHandler = new \Wikimedia\ScopedCallback( function () use ( $handler ) {
                                session_write_close();
                                $handler->enable = false;
                        } );
index 1ebb07c..6273f47 100644 (file)
@@ -62,7 +62,7 @@ class SessionManagerTest extends MediaWikiTestCase {
                $rProp->setAccessible( true );
                $handler = \TestingAccessWrapper::newFromObject( $rProp->getValue() );
                $oldEnable = $handler->enable;
-               $reset[] = new \ScopedCallback( function () use ( $handler, $oldEnable ) {
+               $reset[] = new \Wikimedia\ScopedCallback( function () use ( $handler, $oldEnable ) {
                        if ( $handler->enable ) {
                                session_write_close();
                        }
index 0cc8ebf..f00de55 100644 (file)
@@ -45,7 +45,7 @@ class TestUtils {
                        PHPSessionHandler::install( $manager );
                }
 
-               return new \ScopedCallback( function () use ( &$reset, $oldInstance ) {
+               return new \Wikimedia\ScopedCallback( function () use ( &$reset, $oldInstance ) {
                        foreach ( $reset as &$arr ) {
                                $arr[0]->setValue( $arr[1] );
                        }
index 3d407fb..145ffb3 100644 (file)
@@ -1,4 +1,6 @@
 <?php
+use Wikimedia\ScopedCallback;
+
 /**
  * Factory for handling the special page list and generating SpecialPage objects.
  *
index 3debe6e..a44926b 100644 (file)
@@ -397,6 +397,46 @@ class UploadBaseTest extends MediaWikiTestCase {
                // @codingStandardsIgnoreEnd
        }
 
+       /**
+        * @dataProvider provideDetectScriptInSvg
+        */
+       public function testDetectScriptInSvg( $svg, $expected, $message ) {
+               // This only checks some weird cases, most tests are in testCheckSvgScriptCallback() above
+               $result = $this->upload->detectScriptInSvg( $svg, false );
+               $this->assertSame( $expected, $result, $message );
+       }
+
+       public static function provideDetectScriptInSvg() {
+               global $IP;
+               return [
+                       [
+                               "$IP/tests/phpunit/data/upload/buggynamespace-original.svg",
+                               false,
+                               'SVG with a weird but valid namespace definition created by Adobe Illustrator'
+                       ],
+                       [
+                               "$IP/tests/phpunit/data/upload/buggynamespace-okay.svg",
+                               false,
+                               'SVG with a namespace definition created by Adobe Illustrator and mangled by Inkscape'
+                       ],
+                       [
+                               "$IP/tests/phpunit/data/upload/buggynamespace-okay2.svg",
+                               false,
+                               'SVG with a namespace definition created by Adobe Illustrator and mangled by Inkscape (twice)'
+                       ],
+                       [
+                               "$IP/tests/phpunit/data/upload/buggynamespace-bad.svg",
+                               [ 'uploadscriptednamespace', 'i' ],
+                               'SVG with a namespace definition using an undefined entity'
+                       ],
+                       [
+                               "$IP/tests/phpunit/data/upload/buggynamespace-evilhtml.svg",
+                               [ 'uploadscriptednamespace', 'http://www.w3.org/1999/xhtml' ],
+                               'SVG with an html namespace encoded as an entity'
+                       ],
+               ];
+       }
+
        /**
         * @dataProvider provideCheckXMLEncodingMissmatch
         */
@@ -442,4 +482,11 @@ class UploadTestHandler extends UploadBase {
                );
                return [ $check->wellFormed, $check->filterMatch ];
        }
+
+       /**
+        * Same as parent function, but override visibility to 'public'.
+        */
+       public function detectScriptInSvg( $filename, $partial ) {
+               return parent::detectScriptInSvg( $filename, $partial );
+       }
 }
index cb27fde..81c84e8 100644 (file)
@@ -1,6 +1,7 @@
 <?php
 
 use MediaWiki\Session\SessionManager;
+use Wikimedia\ScopedCallback;
 
 /**
  * @covers BotPassword
index 4284a77..5a7fc48 100644 (file)
@@ -1,4 +1,5 @@
 <?php
+use Wikimedia\ScopedCallback;
 
 /**
  * The UnitTest must be either a class that inherits from MediaWikiTestCase
index 79f37dc..b79c192 100644 (file)
         */
        QUnit.newMwEnvironment = ( function () {
                var warn, error, liveConfig, liveMessages,
+                       MwMap = mw.config.constructor, // internal use only
                        ajaxRequests = [];
 
-               liveConfig = mw.config.values;
-               liveMessages = mw.messages.values;
+               liveConfig = mw.config;
+               liveMessages = mw.messages;
 
                function suppressWarnings() {
                        warn = mw.log.warn;
                        // NOTE: It is important that we suppress warnings because extend() will also access
                        // deprecated properties and trigger deprecation warnings from mw.log#deprecate.
                        suppressWarnings();
-                       copy = $.extend( {}, liveConfig, custom );
+                       copy = $.extend( {}, liveConfig.get(), custom );
                        restoreWarnings();
 
                        return copy;
                }
 
                function freshMessagesCopy( custom ) {
-                       return $.extend( /*deep=*/true, {}, liveMessages, custom );
+                       return $.extend( /*deep=*/true, {}, liveMessages.get(), custom );
                }
 
                /**
                                setup: function () {
 
                                        // Greetings, mock environment!
-                                       mw.config.values = freshConfigCopy( localEnv.config );
-                                       mw.messages.values = freshMessagesCopy( localEnv.messages );
+                                       mw.config = new MwMap();
+                                       mw.config.set( freshConfigCopy( localEnv.config ) );
+                                       mw.messages = new MwMap();
+                                       mw.messages.set( freshMessagesCopy( localEnv.messages ) );
+                                       // Update reference to mw.messages
+                                       mw.jqueryMsg.setParserDefaults( {
+                                               messages: mw.messages
+                                       } );
+
                                        this.suppressWarnings = suppressWarnings;
                                        this.restoreWarnings = restoreWarnings;
 
                                        $( document ).off( 'ajaxSend', trackAjax );
 
                                        // Farewell, mock environment!
-                                       mw.config.values = liveConfig;
-                                       mw.messages.values = liveMessages;
+                                       mw.config = liveConfig;
+                                       mw.messages = liveMessages;
+                                       // Restore reference to mw.messages
+                                       mw.jqueryMsg.setParserDefaults( {
+                                               messages: liveMessages
+                                       } );
 
                                        // As a convenience feature, automatically restore warnings if they're
                                        // still suppressed by the end of the test.
index bfac513..7233a2e 100644 (file)
                return mw.loader.using( 'test.stale' )
                        .then( function () {
                                assert.strictEqual( count, 1 );
+                               // After implementing, registry contains version as implemented by the response.
+                               assert.strictEqual( mw.loader.getVersion( 'test.stale' ), 'v1', 'Override version' );
                                assert.strictEqual( mw.loader.getState( 'test.stale' ), 'ready' );
                                assert.ok( mw.loader.store.get( 'test.stale' ), 'In store' );
                        } )
index ab463a9..1518a80 100644 (file)
                );
        } );
 
-       QUnit.test( 'mw.Map', 35, function ( assert ) {
+       QUnit.test( 'mw.Map', function ( assert ) {
                var arry, conf, funky, globalConf, nummy, someValues;
 
                conf = new mw.Map();
+
                // Dummy variables
                funky = function () {};
                arry = [];
                        lorem: 'ipsum'
                }, 'Map.get returns multiple values correctly as an object' );
 
-               assert.deepEqual( conf, new mw.Map( conf.values ), 'new mw.Map maps over existing values-bearing object' );
-
                assert.deepEqual( conf.get( [ 'foo', 'notExist' ] ), {
                        foo: 'bar',
                        notExist: null
                }, 'Map.get return includes keys that were not found as null values' );
 
                // Interacting with globals and accessing the values object
+               this.suppressWarnings();
                assert.strictEqual( conf.get(), conf.values, 'Map.get returns the entire values object by reference (if called without arguments)' );
+               this.restoreWarnings();
 
                conf.set( 'globalMapChecker', 'Hi' );
 
                }
        } );
 
-       QUnit.test( 'mw.config', 1, function ( assert ) {
-               assert.ok( mw.config instanceof mw.Map, 'mw.config instance of mw.Map' );
-       } );
-
-       QUnit.test( 'mw.message & mw.messages', 100, function ( assert ) {
+       QUnit.test( 'mw.message & mw.messages', function ( assert ) {
                var goodbye, hello;
 
                // Convenience method for asserting the same result for multiple formats
                }
 
                assert.ok( mw.messages, 'messages defined' );
-               assert.ok( mw.messages instanceof mw.Map, 'mw.messages instance of mw.Map' );
                assert.ok( mw.messages.set( 'hello', 'Hello <b>awesome</b> world' ), 'mw.messages.set: Register' );
 
                hello = mw.message( 'hello' );
index 5122dcd..7f6efa0 100644 (file)
@@ -22,7 +22,7 @@
        QUnit.test( 'getters (anonymous)', function ( assert ) {
                // Forge an anonymous user
                mw.config.set( 'wgUserName', null );
-               delete mw.config.values.wgUserId;
+               mw.config.set( 'wgUserId', null );
 
                assert.strictEqual( mw.user.getName(), null, 'getName()' );
                assert.strictEqual( mw.user.isAnon(), true, 'isAnon()' );