Merge "Fix link prefix/suffixes around Category and Language links (take 2)."
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Tue, 19 Sep 2017 16:59:58 +0000 (16:59 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Tue, 19 Sep 2017 16:59:58 +0000 (16:59 +0000)
360 files changed:
RELEASE-NOTES-1.30
autoload.php
composer.json
docs/deferred.txt
docs/hooks.txt
includes/AjaxDispatcher.php
includes/Block.php
includes/CommentStore.php
includes/CommentStoreComment.php
includes/DefaultSettings.php
includes/Defines.php
includes/EditPage.php
includes/FormOptions.php
includes/GlobalFunctions.php
includes/Hooks.php
includes/Licenses.php [deleted file]
includes/Linker.php
includes/MediaWiki.php
includes/OrderedStreamingForkController.php [new file with mode: 0644]
includes/OutputPage.php
includes/Pingback.php
includes/Preferences.php
includes/Sanitizer.php
includes/TemplateParser.php
includes/Title.php
includes/Xml.php
includes/XmlJsCode.php
includes/actions/HistoryAction.php
includes/actions/InfoAction.php
includes/actions/MarkpatrolledAction.php
includes/api/ApiCSPReport.php
includes/api/ApiEmailUser.php
includes/api/ApiExpandTemplates.php
includes/api/ApiFeedWatchlist.php
includes/api/ApiFormatBase.php
includes/api/ApiFormatFeedWrapper.php
includes/api/ApiMain.php
includes/api/ApiParse.php
includes/api/ApiPurge.php
includes/api/ApiQuery.php
includes/api/ApiQueryBase.php
includes/api/ApiQueryGeneratorBase.php
includes/api/ApiQueryLinks.php
includes/api/ApiQueryRecentChanges.php
includes/api/ApiQueryWatchlist.php
includes/api/ApiStashEdit.php
includes/api/ApiUsageException.php
includes/api/i18n/ar.json
includes/api/i18n/ba.json
includes/api/i18n/cs.json
includes/api/i18n/de.json
includes/api/i18n/en.json
includes/api/i18n/es.json
includes/api/i18n/eu.json
includes/api/i18n/fr.json
includes/api/i18n/gl.json
includes/api/i18n/he.json
includes/api/i18n/hu.json
includes/api/i18n/mk.json
includes/api/i18n/pl.json
includes/api/i18n/pt-br.json
includes/api/i18n/pt.json
includes/api/i18n/qqq.json
includes/api/i18n/ru.json
includes/api/i18n/sv.json
includes/api/i18n/uk.json
includes/api/i18n/zh-hans.json
includes/changes/ChangesList.php
includes/changes/ChangesListBooleanFilter.php
includes/changes/ChangesListFilter.php
includes/changes/EnhancedChangesList.php
includes/collation/IcuCollation.php
includes/compat/normal/UtfNormalUtil.php
includes/config/GlobalVarConfig.php
includes/config/HashConfig.php
includes/config/MultiConfig.php
includes/content/AbstractContent.php
includes/debug/logger/monolog/AvroFormatter.php
includes/deferred/WANCacheReapUpdate.php
includes/diff/DifferenceEngine.php
includes/exception/MWExceptionHandler.php
includes/exception/ProcOpenError.php [new file with mode: 0644]
includes/exception/ShellDisabledError.php [new file with mode: 0644]
includes/export/XmlDumpWriter.php
includes/externalstore/ExternalStoreHttp.php
includes/externalstore/ExternalStoreMwstore.php
includes/filerepo/FileBackendDBRepoWrapper.php
includes/filerepo/ForeignAPIRepo.php
includes/filerepo/file/LocalFile.php
includes/filerepo/file/OldLocalFile.php
includes/htmlform/HTMLFormField.php
includes/htmlform/fields/HTMLTagFilter.php
includes/http/Http.php
includes/http/PhpHttpRequest.php
includes/installer/InstallerSessionProvider.php
includes/installer/MssqlUpdater.php
includes/installer/MysqlInstaller.php
includes/installer/MysqlUpdater.php
includes/installer/PostgresUpdater.php
includes/installer/WebInstaller.php
includes/interwiki/Interwiki.php
includes/jobqueue/JobQueueMemory.php
includes/jobqueue/JobQueueSecondTestQueue.php
includes/jobqueue/aggregator/JobQueueAggregator.php
includes/jobqueue/jobs/HTMLCacheUpdateJob.php
includes/jobqueue/jobs/RefreshLinksJob.php
includes/libs/CSSMin.php
includes/libs/HttpStatus.php
includes/libs/IP.php
includes/libs/MemoizedCallable.php
includes/libs/Xhprof.php
includes/libs/XhprofData.php
includes/libs/filebackend/FileBackendStore.php
includes/libs/mime/IEContentAnalyzer.php
includes/libs/objectcache/BagOStuff.php
includes/libs/objectcache/MemcachedBagOStuff.php
includes/libs/objectcache/WANObjectCache.php
includes/libs/rdbms/TransactionProfiler.php
includes/libs/rdbms/database/Database.php
includes/libs/rdbms/database/DatabaseMssql.php
includes/libs/rdbms/database/DatabasePostgres.php
includes/libs/rdbms/database/IDatabase.php
includes/libs/rdbms/loadmonitor/LoadMonitor.php
includes/libs/stats/NullStatsdDataFactory.php
includes/libs/virtualrest/ParsoidVirtualRESTService.php
includes/libs/virtualrest/RestbaseVirtualRESTService.php
includes/libs/xmp/XMP.php
includes/media/WebP.php
includes/page/Article.php
includes/page/ImageHistoryPseudoPager.php
includes/page/WikiPage.php
includes/parser/BlockLevelPass.php
includes/parser/Parser.php
includes/parser/ParserOutput.php
includes/parser/Preprocessor.php
includes/parser/Preprocessor_Hash.php
includes/poolcounter/PoolWorkArticleView.php
includes/rcfeed/IRCColourfulRCFeedFormatter.php
includes/rcfeed/MachineReadableRCFeedFormatter.php
includes/rcfeed/RedisPubSubFeedEngine.php
includes/rcfeed/UDPRCFeedEngine.php
includes/registration/ExtensionRegistry.php
includes/resourceloader/ResourceLoaderImageModule.php
includes/resourceloader/ResourceLoaderSiteModule.php
includes/resourceloader/ResourceLoaderStartUpModule.php
includes/resourceloader/ResourceLoaderUploadDialogModule.php
includes/resourceloader/ResourceLoaderUserModule.php
includes/revisiondelete/RevDelLogList.php
includes/search/ParserOutputSearchDataExtractor.php
includes/search/SearchEngine.php
includes/search/SearchNearMatcher.php
includes/search/SearchResultSet.php
includes/search/SearchSuggestionSet.php
includes/session/BotPasswordSessionProvider.php
includes/session/Session.php
includes/shell/Command.php [new file with mode: 0644]
includes/shell/Result.php [new file with mode: 0644]
includes/shell/Shell.php [new file with mode: 0644]
includes/site/HashSiteStore.php
includes/skins/Skin.php
includes/skins/SkinTemplate.php
includes/specialpage/ChangesListSpecialPage.php
includes/specialpage/RedirectSpecialPage.php
includes/specialpage/WantedQueryPage.php
includes/specials/SpecialAllPages.php
includes/specials/SpecialBlock.php
includes/specials/SpecialEditWatchlist.php
includes/specials/SpecialEmailuser.php
includes/specials/SpecialImport.php
includes/specials/SpecialLinkSearch.php
includes/specials/SpecialNewpages.php
includes/specials/SpecialRecentchanges.php
includes/specials/SpecialUnlinkAccounts.php
includes/specials/SpecialUpload.php
includes/specials/SpecialVersion.php
includes/specials/SpecialWantedfiles.php
includes/specials/SpecialWatchlist.php
includes/specials/formfields/EditWatchlistCheckboxSeriesField.php [new file with mode: 0644]
includes/specials/formfields/Licenses.php [new file with mode: 0644]
includes/specials/formfields/UploadSourceField.php [new file with mode: 0644]
includes/specials/forms/EditWatchlistNormalHTMLForm.php [new file with mode: 0644]
includes/specials/forms/PreferencesForm.php [new file with mode: 0644]
includes/specials/forms/UploadForm.php [new file with mode: 0644]
includes/specials/helpers/ImportReporter.php [new file with mode: 0644]
includes/specials/helpers/License.php [new file with mode: 0644]
includes/specials/pagers/ActiveUsersPager.php
includes/specials/pagers/ContribsPager.php
includes/specials/pagers/ImageListPager.php
includes/tidy/Balancer.php
includes/tidy/TidyDriverBase.php
includes/user/CentralIdLookup.php
includes/user/User.php
includes/utils/AutoloadGenerator.php
languages/LanguageConverter.php
languages/data/ZhConversion.php
languages/i18n/af.json
languages/i18n/ais.json
languages/i18n/ang.json
languages/i18n/ar.json
languages/i18n/az.json
languages/i18n/azb.json
languages/i18n/be-tarask.json
languages/i18n/bg.json
languages/i18n/bn.json
languages/i18n/ca.json
languages/i18n/ce.json
languages/i18n/cs.json
languages/i18n/csb.json
languages/i18n/da.json
languages/i18n/de.json
languages/i18n/diq.json
languages/i18n/en.json
languages/i18n/et.json
languages/i18n/fa.json
languages/i18n/fi.json
languages/i18n/fr.json
languages/i18n/fy.json
languages/i18n/gl.json
languages/i18n/glk.json
languages/i18n/got.json
languages/i18n/gu.json
languages/i18n/he.json
languages/i18n/hr.json
languages/i18n/hu.json
languages/i18n/it.json
languages/i18n/ja.json
languages/i18n/jv.json
languages/i18n/kab.json
languages/i18n/ko.json
languages/i18n/krc.json
languages/i18n/ku-latn.json
languages/i18n/lb.json
languages/i18n/lfn.json
languages/i18n/mk.json
languages/i18n/ml.json
languages/i18n/mwl.json
languages/i18n/my.json
languages/i18n/nb.json
languages/i18n/ne.json
languages/i18n/nl.json
languages/i18n/nn.json
languages/i18n/pl.json
languages/i18n/ps.json
languages/i18n/pt-br.json
languages/i18n/pt.json
languages/i18n/qqq.json
languages/i18n/roa-tara.json
languages/i18n/ru.json
languages/i18n/sd.json
languages/i18n/skr-arab.json
languages/i18n/sl.json
languages/i18n/sr-ec.json
languages/i18n/sr-el.json
languages/i18n/su.json
languages/i18n/sv.json
languages/i18n/tay.json
languages/i18n/te.json
languages/i18n/th.json
languages/i18n/tl.json
languages/i18n/tr.json
languages/i18n/tt-cyrl.json
languages/i18n/uk.json
languages/i18n/ur.json
languages/i18n/war.json
languages/i18n/zh-hans.json
languages/i18n/zh-hant.json
maintenance/Maintenance.php
maintenance/addSite.php
maintenance/archives/patch-editsummary-length.sql
maintenance/benchmarks/cssmin/circle.svg
maintenance/compareParserCache.php
maintenance/dictionary/mediawiki.dic
maintenance/findDeprecated.php
maintenance/findHooks.php
maintenance/generateSitemap.php
maintenance/language/zhtable/toCN.manual
maintenance/language/zhtable/toHK.manual
maintenance/language/zhtable/toSimp.manual
maintenance/language/zhtable/toTW.manual
maintenance/language/zhtable/trad2simp.manual
maintenance/language/zhtable/tradphrases.manual
maintenance/language/zhtable/tradphrases_exclude.manual
maintenance/migrateComments.php
maintenance/populateIpChanges.php
maintenance/userOptions.inc
phpcs.xml
resources/Resources.php
resources/lib/jquery/jquery.migrate.js
resources/src/jquery/jquery.byteLength.js
resources/src/mediawiki.action/images/close.png [new file with mode: 0644]
resources/src/mediawiki.action/images/close.svg [new file with mode: 0644]
resources/src/mediawiki.action/mediawiki.action.edit.preview.js
resources/src/mediawiki.action/mediawiki.action.view.postEdit.less
resources/src/mediawiki.action/mediawiki.action.view.postEdit.monobook.css [new file with mode: 0644]
resources/src/mediawiki.language/mediawiki.language.js
resources/src/mediawiki.legacy/shared.css
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.FiltersViewModel.js
resources/src/mediawiki.rcfilters/dm/mw.rcfilters.dm.SavedQueriesModel.js
resources/src/mediawiki.rcfilters/mw.rcfilters.Controller.js
resources/src/mediawiki.rcfilters/mw.rcfilters.init.js
resources/src/mediawiki.rcfilters/mw.rcfilters.js
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.ChangesListWrapperWidget.highlightCircles.seenunseen.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.FilterTagMultiselectWidget.less
resources/src/mediawiki.rcfilters/styles/mw.rcfilters.ui.SaveFiltersPopupButtonWidget.less
resources/src/mediawiki.rcfilters/ui/mw.rcfilters.ui.FilterTagMultiselectWidget.js
resources/src/mediawiki.skinning/interface.css
resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.preferences.js [deleted file]
resources/src/mediawiki.special/mediawiki.special.preferences.tabs.js [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.preferences.timezone.js [new file with mode: 0644]
resources/src/mediawiki.special/mediawiki.special.search.styles.css
resources/src/mediawiki.special/mediawiki.special.userlogin.common.css
resources/src/mediawiki.ui/components/inputs.less
resources/src/mediawiki/api/upload.js
resources/src/mediawiki/mediawiki.ForeignStructuredUpload.BookletLayout.less
resources/src/mediawiki/mediawiki.Title.js
resources/src/mediawiki/mediawiki.apihelp.css
resources/src/mediawiki/mediawiki.feedback.css
resources/src/mediawiki/mediawiki.filewarning.less
resources/src/mediawiki/mediawiki.js
resources/src/mediawiki/mediawiki.util.js
tests/integration/includes/http/MWHttpRequestTestCase.php
tests/parser/DbTestPreviewer.php
tests/parser/ParserTestPrinter.php
tests/parser/ParserTestResultNormalizer.php
tests/parser/ParserTestRunner.php
tests/parser/PhpunitTestRecorder.php
tests/parser/TidySupport.php
tests/parser/parserTests.txt
tests/phpunit/MediaWikiTestCase.php
tests/phpunit/ResourceLoaderTestCase.php
tests/phpunit/data/cssmin/circle.svg
tests/phpunit/data/templates/recurse.mustache [new file with mode: 0644]
tests/phpunit/includes/GlobalFunctions/wfTimestampTest.php
tests/phpunit/includes/HooksTest.php
tests/phpunit/includes/SanitizerTest.php
tests/phpunit/includes/SiteStatsTest.php
tests/phpunit/includes/TemplateParserTest.php
tests/phpunit/includes/TitleMethodsTest.php
tests/phpunit/includes/TitleTest.php
tests/phpunit/includes/XmlTest.php
tests/phpunit/includes/collation/CollationFaTest.php
tests/phpunit/includes/db/DatabaseTestHelper.php
tests/phpunit/includes/libs/CSSMinTest.php
tests/phpunit/includes/libs/objectcache/WANObjectCacheTest.php
tests/phpunit/includes/libs/rdbms/TransactionProfilerTest.php
tests/phpunit/includes/libs/rdbms/database/DatabaseMysqlBaseTest.php
tests/phpunit/includes/shell/CommandTest.php [new file with mode: 0644]
tests/phpunit/includes/shell/ShellTest.php [new file with mode: 0644]
tests/phpunit/includes/specials/SpecialPageExecutor.php
tests/phpunit/includes/specials/SpecialPageTestBase.php
tests/phpunit/mocks/content/DummyContentHandlerForTesting.php
tests/phpunit/mocks/content/DummyNonTextContentHandler.php
tests/phpunit/mocks/filebackend/MockFSFile.php
tests/phpunit/phpunit.php
tests/phpunit/suites/ParserTestTopLevelSuite.php
tests/qunit/suites/resources/mediawiki/mediawiki.language.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.loader.test.js
tests/qunit/suites/resources/mediawiki/mediawiki.util.test.js

index 0b2faec..8517a8f 100644 (file)
@@ -70,6 +70,9 @@ section).
 ** This is currently gated by $wgCommentTableSchemaMigrationStage. Most wikis
    can set this to MIGRATION_NEW and run maintenance/migrateComments.php as
    soon as any necessary extensions are updated.
+* (T138166) Added ability for users to prohibit other users from sending them
+  emails with Special:Emailuser. Can be enabled by setting
+  $wgEnableUserEmailBlacklist to true.
 
 === External library changes in 1.30 ===
 
@@ -212,6 +215,12 @@ changes to languages because of Phabricator reports.
 * (T157227) bot_password.bp_user, change_tag.ct_log_id, change_tag.ct_rev_id,
   page_restrictions.pr_user, tag_summary.ts_log_id, tag_summary.ts_rev_id and
   user_properties.up_user have all been made unsigned on MySQL.
+* DB_SLAVE is deprecated. DB_REPLICA should be used instead.
+* wfUsePHP() is deprecated.
+* wfFixSessionID() was removed.
+* wfShellExec() and related functions are deprecated, use Shell::command().
+* (T138166) SpecialEmailUser::getTarget() now requires a second argument, the sending
+  user object. Using the method without the second argument is deprecated.
 
 == Compatibility ==
 MediaWiki 1.30 requires PHP 5.5.9 or later. There is experimental support for
index c7f13d5..61fd192 100644 (file)
@@ -421,8 +421,8 @@ $wgAutoloadLocalClasses = [
        'EditAction' => __DIR__ . '/includes/actions/EditAction.php',
        'EditCLI' => __DIR__ . '/maintenance/edit.php',
        'EditPage' => __DIR__ . '/includes/EditPage.php',
-       'EditWatchlistCheckboxSeriesField' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
-       'EditWatchlistNormalHTMLForm' => __DIR__ . '/includes/specials/SpecialEditWatchlist.php',
+       'EditWatchlistCheckboxSeriesField' => __DIR__ . '/includes/specials/formfields/EditWatchlistCheckboxSeriesField.php',
+       'EditWatchlistNormalHTMLForm' => __DIR__ . '/includes/specials/forms/EditWatchlistNormalHTMLForm.php',
        'EmailConfirmation' => __DIR__ . '/includes/specials/SpecialConfirmemail.php',
        'EmailInvalidation' => __DIR__ . '/includes/specials/SpecialEmailInvalidate.php',
        'EmailNotification' => __DIR__ . '/includes/mail/EmailNotification.php',
@@ -633,7 +633,7 @@ $wgAutoloadLocalClasses = [
        'ImageQueryPage' => __DIR__ . '/includes/specialpage/ImageQueryPage.php',
        'ImportImages' => __DIR__ . '/maintenance/importImages.php',
        'ImportLogFormatter' => __DIR__ . '/includes/logging/ImportLogFormatter.php',
-       'ImportReporter' => __DIR__ . '/includes/specials/SpecialImport.php',
+       'ImportReporter' => __DIR__ . '/includes/specials/helpers/ImportReporter.php',
        'ImportSiteScripts' => __DIR__ . '/maintenance/importSiteScripts.php',
        'ImportSites' => __DIR__ . '/maintenance/importSites.php',
        'ImportSource' => __DIR__ . '/includes/import/ImportSource.php',
@@ -746,8 +746,8 @@ $wgAutoloadLocalClasses = [
        'Languages' => __DIR__ . '/maintenance/language/languages.inc',
        'LayeredParameterizedPassword' => __DIR__ . '/includes/password/LayeredParameterizedPassword.php',
        'LegacyLogFormatter' => __DIR__ . '/includes/logging/LogFormatter.php',
-       'License' => __DIR__ . '/includes/Licenses.php',
-       'Licenses' => __DIR__ . '/includes/Licenses.php',
+       'License' => __DIR__ . '/includes/specials/helpers/License.php',
+       'Licenses' => __DIR__ . '/includes/specials/formfields/Licenses.php',
        'LinkBatch' => __DIR__ . '/includes/cache/LinkBatch.php',
        'LinkCache' => __DIR__ . '/includes/cache/LinkCache.php',
        'LinkFilter' => __DIR__ . '/includes/LinkFilter.php',
@@ -904,6 +904,7 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Logger\\NullSpi' => __DIR__ . '/includes/debug/logger/NullSpi.php',
        'MediaWiki\\Logger\\Spi' => __DIR__ . '/includes/debug/logger/Spi.php',
        'MediaWiki\\MediaWikiServices' => __DIR__ . '/includes/MediaWikiServices.php',
+       'MediaWiki\\ProcOpenError' => __DIR__ . '/includes/exception/ProcOpenError.php',
        'MediaWiki\\Search\\ParserOutputSearchDataExtractor' => __DIR__ . '/includes/search/ParserOutputSearchDataExtractor.php',
        'MediaWiki\\Services\\CannotReplaceActiveServiceException' => __DIR__ . '/includes/services/CannotReplaceActiveServiceException.php',
        'MediaWiki\\Services\\ContainerDisabledException' => __DIR__ . '/includes/services/ContainerDisabledException.php',
@@ -928,6 +929,10 @@ $wgAutoloadLocalClasses = [
        'MediaWiki\\Session\\SessionProviderInterface' => __DIR__ . '/includes/session/SessionProviderInterface.php',
        'MediaWiki\\Session\\Token' => __DIR__ . '/includes/session/Token.php',
        'MediaWiki\\Session\\UserInfo' => __DIR__ . '/includes/session/UserInfo.php',
+       'MediaWiki\\ShellDisabledError' => __DIR__ . '/includes/exception/ShellDisabledError.php',
+       'MediaWiki\\Shell\\Command' => __DIR__ . '/includes/shell/Command.php',
+       'MediaWiki\\Shell\\Result' => __DIR__ . '/includes/shell/Result.php',
+       'MediaWiki\\Shell\\Shell' => __DIR__ . '/includes/shell/Shell.php',
        'MediaWiki\\Site\\MediaWikiPageNameNormalizer' => __DIR__ . '/includes/site/MediaWikiPageNameNormalizer.php',
        'MediaWiki\\Tidy\\BalanceActiveFormattingElements' => __DIR__ . '/includes/tidy/Balancer.php',
        'MediaWiki\\Tidy\\BalanceElement' => __DIR__ . '/includes/tidy/Balancer.php',
@@ -1043,6 +1048,7 @@ $wgAutoloadLocalClasses = [
        'OldLocalFile' => __DIR__ . '/includes/filerepo/file/OldLocalFile.php',
        'OracleInstaller' => __DIR__ . '/includes/installer/OracleInstaller.php',
        'OracleUpdater' => __DIR__ . '/includes/installer/OracleUpdater.php',
+       'OrderedStreamingForkController' => __DIR__ . '/includes/OrderedStreamingForkController.php',
        'OrphanStats' => __DIR__ . '/maintenance/storage/orphanStats.php',
        'Orphans' => __DIR__ . '/maintenance/orphans.php',
        'OutputPage' => __DIR__ . '/includes/OutputPage.php',
@@ -1129,7 +1135,7 @@ $wgAutoloadLocalClasses = [
        'PostgresInstaller' => __DIR__ . '/includes/installer/PostgresInstaller.php',
        'PostgresUpdater' => __DIR__ . '/includes/installer/PostgresUpdater.php',
        'Preferences' => __DIR__ . '/includes/Preferences.php',
-       'PreferencesForm' => __DIR__ . '/includes/Preferences.php',
+       'PreferencesForm' => __DIR__ . '/includes/specials/forms/PreferencesForm.php',
        'PrefixSearch' => __DIR__ . '/includes/PrefixSearch.php',
        'PreprocessDump' => __DIR__ . '/maintenance/preprocessDump.php',
        'Preprocessor' => __DIR__ . '/includes/parser/Preprocessor.php',
@@ -1526,14 +1532,14 @@ $wgAutoloadLocalClasses = [
        'UploadChunkVerificationException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
        'UploadChunkZeroLengthFileException' => __DIR__ . '/includes/upload/UploadFromChunks.php',
        'UploadDumper' => __DIR__ . '/maintenance/dumpUploads.php',
-       'UploadForm' => __DIR__ . '/includes/specials/SpecialUpload.php',
+       'UploadForm' => __DIR__ . '/includes/specials/forms/UploadForm.php',
        'UploadFromChunks' => __DIR__ . '/includes/upload/UploadFromChunks.php',
        'UploadFromFile' => __DIR__ . '/includes/upload/UploadFromFile.php',
        'UploadFromStash' => __DIR__ . '/includes/upload/UploadFromStash.php',
        'UploadFromUrl' => __DIR__ . '/includes/upload/UploadFromUrl.php',
        'UploadLogFormatter' => __DIR__ . '/includes/logging/UploadLogFormatter.php',
        'UploadSourceAdapter' => __DIR__ . '/includes/import/UploadSourceAdapter.php',
-       'UploadSourceField' => __DIR__ . '/includes/specials/SpecialUpload.php',
+       'UploadSourceField' => __DIR__ . '/includes/specials/formfields/UploadSourceField.php',
        'UploadStash' => __DIR__ . '/includes/upload/UploadStash.php',
        'UploadStashBadPathException' => __DIR__ . '/includes/upload/UploadStash.php',
        'UploadStashCleanup' => __DIR__ . '/maintenance/cleanupUploadStash.php',
index dd7567c..70d2e8f 100644 (file)
@@ -54,7 +54,7 @@
                "jakub-onderka/php-parallel-lint": "0.9.2",
                "jetbrains/phpstorm-stubs": "dev-master#1b9906084d6635456fcf3f3a01f0d7d5b99a578a",
                "justinrainbow/json-schema": "~5.2",
-               "mediawiki/mediawiki-codesniffer": "0.11.0",
+               "mediawiki/mediawiki-codesniffer": "0.12.0",
                "monolog/monolog": "~1.22.1",
                "nikic/php-parser": "2.1.0",
                "nmred/kafka-php": "0.1.5",
index b8ec76b..9a62fda 100644 (file)
@@ -30,7 +30,7 @@ Currently there are a few different types of jobs:
 
   htmlCacheUpdate
     Clear caches when a template is changed to ensure that changes can be seen.
-    Each job clears $wgUpdateRowsPerJob pages (500 by default).
+    Each job clears $wgUpdateRowsPerJob pages (300 by default).
 
   enotifNotify
     Used to send mail using the job queue.
index b7fe8c1..a19e9fc 100644 (file)
@@ -996,13 +996,10 @@ $special: ChangesListSpecialPage instance
 'ChangesListSpecialPageQuery': Called when building SQL query on pages
 inheriting from ChangesListSpecialPage (in core: RecentChanges,
 RecentChangesLinked and Watchlist).
-
 Do not use this to implement individual filters if they are compatible with the
 ChangesListFilter and ChangesListFilterGroup structure.
-
 Instead, use sub-classes of those classes, in conjunction with the
 ChangesListSpecialPageStructuredFilters hook.
-
 This hook can be used to implement filters that do not implement that structure,
 or custom behavior that is not an individual filter.
 $name: name of the special page, e.g. 'Watchlist'
@@ -1017,20 +1014,16 @@ $opts: FormOptions for this request
 filters for pages inheriting from ChangesListSpecialPage (in core: RecentChanges,
 RecentChangesLinked, and Watchlist).  Generally, you will want to construct
 new ChangesListBooleanFilter or ChangesListStringOptionsFilter objects.
-
 When constructing them, you specify which group they belong to.  You can reuse
 existing groups (accessed through $special->getFilterGroup), or create your own
 (ChangesListBooleanFilterGroup or ChangesListStringOptionsFilterGroup).
 If you create new groups, you must register them with $special->registerFilterGroup.
-
 Note that this is called regardless of whether the user is currently using
 the new (structured) or old (unstructured) filter UI.  If you want your boolean
 filter to show on both the new and old UI, specify all the supported fields.
 These include showHide, label, and description.
-
 See the constructor of each ChangesList* class for documentation of supported
 fields.
-
 $special: ChangesListSpecialPage instance
 
 'ChangeTagAfterDelete': Called after a change tag has been deleted (that is,
index 2adbc80..75fcff3 100644 (file)
@@ -56,6 +56,7 @@ class AjaxDispatcher {
 
        /**
         * Load up our object with user supplied data
+        * @param Config $config
         */
        function __construct( Config $config ) {
                $this->config = $config;
index 40095f1..5a4c43e 100644 (file)
@@ -1329,7 +1329,7 @@ class Block {
         * which in turn gives User::getName().
         *
         * @param string|int|User|null $target
-        * @return array( User|String|null, Block::TYPE_ constant|null )
+        * @return array [ User|String|null, Block::TYPE_ constant|null ]
         */
        public static function parseTarget( $target ) {
                # We may have been through this before
@@ -1396,7 +1396,7 @@ class Block {
         * Get the target and target type for this particular Block.  Note that for autoblocks,
         * this returns the unredacted name; frontend functions need to call $block->getRedactedName()
         * in this situation.
-        * @return array( User|String, Block::TYPE_ constant )
+        * @return array [ User|String, Block::TYPE_ constant ]
         * @todo FIXME: This should be an integral part of the Block member variables
         */
        public function getTargetAndType() {
index 2ed21d1..b8a31e6 100644 (file)
@@ -367,26 +367,7 @@ class CommentStore {
         * @return CommentStoreComment
         */
        public function createComment( IDatabase $dbw, $comment, array $data = null ) {
-               global $wgContLang;
-
-               if ( !$comment instanceof CommentStoreComment ) {
-                       if ( $data !== null ) {
-                               foreach ( $data as $k => $v ) {
-                                       if ( substr( $k, 0, 1 ) === '_' ) {
-                                               throw new InvalidArgumentException( 'Keys in $data beginning with "_" are reserved' );
-                                       }
-                               }
-                       }
-                       if ( $comment instanceof Message ) {
-                               $message = clone $comment;
-                               $text = $message->inLanguage( $wgContLang ) // Avoid $wgForceUIMsgAsContentMsg
-                                       ->setInterfaceMessageFlag( true )
-                                       ->text();
-                               $comment = new CommentStoreComment( null, $text, $message, $data );
-                       } else {
-                               $comment = new CommentStoreComment( null, $comment, null, $data );
-                       }
-               }
+               $comment = CommentStoreComment::newUnsavedComment( $comment, $data );
 
                # Truncate comment in a Unicode-sensitive manner
                $comment->text = $this->lang->truncate( $comment->text, self::MAX_COMMENT_LENGTH );
index afc1374..3920ba0 100644 (file)
@@ -42,7 +42,7 @@ class CommentStoreComment {
        public $data;
 
        /**
-        * @private For use by CommentStore only
+        * @private For use by CommentStore only. Use self::newUnsavedComment() instead.
         * @param int|null $id
         * @param string $text
         * @param Message|null $message
@@ -54,4 +54,39 @@ class CommentStoreComment {
                $this->message = $message ?: new RawMessage( '$1', [ $text ] );
                $this->data = $data;
        }
+
+       /**
+        * Create a new, unsaved CommentStoreComment
+        *
+        * @param string|Message|CommentStoreComment $comment Comment text or Message object.
+        *  A CommentStoreComment is also accepted here, in which case it is returned unchanged.
+        * @param array|null $data Structured data to store. Keys beginning with '_' are reserved.
+        *  Ignored if $comment is a CommentStoreComment.
+        * @return CommentStoreComment
+        */
+       public static function newUnsavedComment( $comment, array $data = null ) {
+               global $wgContLang;
+
+               if ( $comment instanceof CommentStoreComment ) {
+                       return $comment;
+               }
+
+               if ( $data !== null ) {
+                       foreach ( $data as $k => $v ) {
+                               if ( substr( $k, 0, 1 ) === '_' ) {
+                                       throw new InvalidArgumentException( 'Keys in $data beginning with "_" are reserved' );
+                               }
+                       }
+               }
+
+               if ( $comment instanceof Message ) {
+                       $message = clone $comment;
+                       $text = $message->inLanguage( $wgContLang ) // Avoid $wgForceUIMsgAsContentMsg
+                               ->setInterfaceMessageFlag( true )
+                               ->text();
+                       return new CommentStoreComment( null, $text, $message, $data );
+               } else {
+                       return new CommentStoreComment( null, $comment, null, $data );
+               }
+       }
 }
index cf8e089..852cd08 100644 (file)
@@ -1603,6 +1603,13 @@ $wgEnableEmail = true;
  */
 $wgEnableUserEmail = true;
 
+/**
+ * Set to true to enable user-to-user e-mail blacklist.
+ *
+ * @since 1.30
+ */
+$wgEnableUserEmailBlacklist = false;
+
 /**
  * If true put the sending user's email in a Reply-To header
  * instead of From (false). ($wgPasswordSender will be used as From.)
@@ -3394,8 +3401,8 @@ $wgExperimentalHtmlIds = false;
 /**
  * How should section IDs be encoded?
  * This array can contain 1 or 2 elements, each of them can be one of:
- * - 'html5'  is modern HTML5 style encoding with minimal escaping. Allows to
- *            display Unicode characters in many browsers' address bars.
+ * - 'html5'  is modern HTML5 style encoding with minimal escaping. Displays Unicode
+ *            characters in most browsers' address bars.
  * - 'legacy' is old MediaWiki-style encoding, e.g. 啤酒 turns into .E5.95.A4.E9.85.92
  * - 'html5-legacy' corresponds to DEPRECATED $wgExperimentalHtmlIds mode. DO NOT use
  *            it for anything but migration off that mode (see below).
@@ -4920,6 +4927,7 @@ $wgDefaultUserOptions = [
        'previewontop' => 1,
        'rcdays' => 7,
        'rcenhancedfilters' => 0,
+       'rcenhancedfilters-disable' => 0,
        'rclimit' => 50,
        'rows' => 25, // @deprecated since 1.29 No longer used in core
        'showhiddencats' => 0,
@@ -6830,18 +6838,29 @@ $wgRCWatchCategoryMembership = false;
 $wgUseRCPatrol = true;
 
 /**
- * Whether to show the new experimental views (like namespaces, tags, and users) in
- * RecentChanges filters
+ * Whether a preference is displayed for structured change filters.
+ * If false, no preference is displayed and structured change filters are disabled.
+ * If true, structured change filters are *enabled* by default, and a preference is displayed
+ * that lets users disable them.
+ *
+ * Temporary variable during development and will be removed.
+ *
+ * @since 1.30
  */
-$wgStructuredChangeFiltersEnableExperimentalViews = false;
+$wgStructuredChangeFiltersShowPreference = false;
 
 /**
- * Whether to allow users to use the experimental live update feature in the new RecentChanges UI
+ * Whether to show the new experimental views (like namespaces, tags, and users) in
+ * RecentChanges filters
+ *
+ * Temporary variable during development and will be removed.
  */
-$wgStructuredChangeFiltersEnableLiveUpdate = false;
+$wgStructuredChangeFiltersEnableExperimentalViews = false;
 
 /**
  * Whether to enable RCFilters app on Special:Watchlist
+ *
+ * Temporary variable during development and will be removed.
  */
 $wgStructuredChangeFiltersOnWatchlist = false;
 
index 8ac84e5..ca603e7 100644 (file)
@@ -31,6 +31,9 @@ use Wikimedia\Rdbms\IDatabase;
  */
 
 # Obsolete aliases
+/**
+ * @deprecated since 1.28
+ */
 define( 'DB_SLAVE', -1 );
 
 /**@{
index 06a5cc3..12966e5 100644 (file)
@@ -527,7 +527,7 @@ class EditPage {
         * the newly-edited page.
         */
        public function edit() {
-               global $wgRequest, $wgUser;
+               global $wgRequest;
                // Allow extensions to modify/prevent this form or submission
                if ( !Hooks::run( 'AlternateEdit', [ $this ] ) ) {
                        return;
@@ -570,9 +570,8 @@ class EditPage {
                        wfDebug( __METHOD__ . ": User can't edit\n" );
                        // Auto-block user's IP if the account was "hard" blocked
                        if ( !wfReadOnly() ) {
-                               $user = $wgUser;
-                               DeferredUpdates::addCallableUpdate( function () use ( $user ) {
-                                       $user->spreadAnyEditBlock();
+                               DeferredUpdates::addCallableUpdate( function () {
+                                       $this->context->getUser()->spreadAnyEditBlock();
                                } );
                        }
                        $this->displayPermissionsError( $permErrors );
@@ -657,15 +656,14 @@ class EditPage {
         * @return array
         */
        protected function getEditPermissionErrors( $rigor = 'secure' ) {
-               global $wgUser;
-
-               $permErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $wgUser, $rigor );
+               $user = $this->context->getUser();
+               $permErrors = $this->mTitle->getUserPermissionsErrors( 'edit', $user, $rigor );
                # Can this title be created?
                if ( !$this->mTitle->exists() ) {
                        $permErrors = array_merge(
                                $permErrors,
                                wfArrayDiff2(
-                                       $this->mTitle->getUserPermissionsErrors( 'create', $wgUser, $rigor ),
+                                       $this->mTitle->getUserPermissionsErrors( 'create', $user, $rigor ),
                                        $permErrors
                                )
                        );
@@ -787,7 +785,7 @@ class EditPage {
         * @return bool
         */
        protected function previewOnOpen() {
-               global $wgRequest, $wgUser, $wgPreviewOnOpenNamespaces;
+               global $wgRequest, $wgPreviewOnOpenNamespaces;
                if ( $wgRequest->getVal( 'preview' ) == 'yes' ) {
                        // Explicit override from request
                        return true;
@@ -798,7 +796,7 @@ class EditPage {
                        // Nothing *to* preview for new sections
                        return false;
                } elseif ( ( $wgRequest->getVal( 'preload' ) !== null || $this->mTitle->exists() )
-                       && $wgUser->getOption( 'previewonfirst' )
+                       && $this->context->getUser()->getOption( 'previewonfirst' )
                ) {
                        // Standard preference behavior
                        return true;
@@ -851,8 +849,6 @@ class EditPage {
         * @throws ErrorPageError
         */
        public function importFormData( &$request ) {
-               global $wgUser;
-
                # Section edit can come from either the form or a link
                $this->section = $request->getVal( 'wpSection', $request->getVal( 'section' ) );
 
@@ -961,14 +957,15 @@ class EditPage {
                        $this->minoredit = $request->getCheck( 'wpMinoredit' );
                        $this->watchthis = $request->getCheck( 'wpWatchthis' );
 
+                       $user = $this->context->getUser();
                        # Don't force edit summaries when a user is editing their own user or talk page
                        if ( ( $this->mTitle->mNamespace == NS_USER || $this->mTitle->mNamespace == NS_USER_TALK )
-                               && $this->mTitle->getText() == $wgUser->getName()
+                               && $this->mTitle->getText() == $user->getName()
                        ) {
                                $this->allowBlankSummary = true;
                        } else {
                                $this->allowBlankSummary = $request->getBool( 'wpIgnoreBlankSummary' )
-                                       || !$wgUser->getOption( 'forceeditsummary' );
+                                       || !$user->getOption( 'forceeditsummary' );
                        }
 
                        $this->autoSumm = $request->getText( 'wpAutoSummary' );
@@ -1084,7 +1081,6 @@ class EditPage {
         * @return bool If the requested section is valid
         */
        public function initialiseForm() {
-               global $wgUser;
                $this->edittime = $this->page->getTimestamp();
                $this->editRevId = $this->page->getLatest();
 
@@ -1094,19 +1090,20 @@ class EditPage {
                }
                $this->textbox1 = $this->toEditText( $content );
 
+               $user = $this->context->getUser();
                // activate checkboxes if user wants them to be always active
                # Sort out the "watch" checkbox
-               if ( $wgUser->getOption( 'watchdefault' ) ) {
+               if ( $user->getOption( 'watchdefault' ) ) {
                        # Watch all edits
                        $this->watchthis = true;
-               } elseif ( $wgUser->getOption( 'watchcreations' ) && !$this->mTitle->exists() ) {
+               } elseif ( $user->getOption( 'watchcreations' ) && !$this->mTitle->exists() ) {
                        # Watch creations
                        $this->watchthis = true;
-               } elseif ( $wgUser->isWatched( $this->mTitle ) ) {
+               } elseif ( $user->isWatched( $this->mTitle ) ) {
                        # Already watched
                        $this->watchthis = true;
                }
-               if ( $wgUser->getOption( 'minordefault' ) && !$this->isNew ) {
+               if ( $user->getOption( 'minordefault' ) && !$this->isNew ) {
                        $this->minoredit = true;
                }
                if ( $this->textbox1 === false ) {
@@ -1123,10 +1120,11 @@ class EditPage {
         * @since 1.21
         */
        protected function getContentObject( $def_content = null ) {
-               global $wgRequest, $wgUser, $wgContLang;
+               global $wgRequest, $wgContLang;
 
                $content = false;
 
+               $user = $this->context->getUser();
                // For message page not locally set, use the i18n message.
                // For other non-existent articles, use preload text if any.
                if ( !$this->mTitle->exists() || $this->section == 'new' ) {
@@ -1149,7 +1147,7 @@ class EditPage {
                } else {
                        if ( $this->section != '' ) {
                                // Get section edit text (returns $def_text for invalid sections)
-                               $orig = $this->getOriginalContent( $wgUser );
+                               $orig = $this->getOriginalContent( $user );
                                $content = $orig ? $orig->getSection( $this->section ) : null;
 
                                if ( !$content ) {
@@ -1177,8 +1175,8 @@ class EditPage {
                                                        $undoMsg = 'failure';
                                                } else {
                                                        $oldContent = $this->page->getContent( Revision::RAW );
-                                                       $popts = ParserOptions::newFromUserAndLang( $wgUser, $wgContLang );
-                                                       $newContent = $content->preSaveTransform( $this->mTitle, $wgUser, $popts );
+                                                       $popts = ParserOptions::newFromUserAndLang( $user, $wgContLang );
+                                                       $newContent = $content->preSaveTransform( $this->mTitle, $user, $popts );
                                                        if ( $newContent->getModel() !== $oldContent->getModel() ) {
                                                                // The undo may change content
                                                                // model if its reverting the top
@@ -1239,7 +1237,7 @@ class EditPage {
                                }
 
                                if ( $content === false ) {
-                                       $content = $this->getOriginalContent( $wgUser );
+                                       $content = $this->getOriginalContent( $user );
                                }
                        }
                }
@@ -1365,8 +1363,6 @@ class EditPage {
         * @since 1.21
         */
        protected function getPreloadedContent( $preload, $params = [] ) {
-               global $wgUser;
-
                if ( !empty( $this->mPreloadContent ) ) {
                        return $this->mPreloadContent;
                }
@@ -1377,9 +1373,10 @@ class EditPage {
                        return $handler->makeEmptyContent();
                }
 
+               $user = $this->context->getUser();
                $title = Title::newFromText( $preload );
                # Check for existence to avoid getting MediaWiki:Noarticletext
-               if ( $title === null || !$title->exists() || !$title->userCan( 'read', $wgUser ) ) {
+               if ( $title === null || !$title->exists() || !$title->userCan( 'read', $user ) ) {
                        // TODO: somehow show a warning to the user!
                        return $handler->makeEmptyContent();
                }
@@ -1388,14 +1385,14 @@ class EditPage {
                if ( $page->isRedirect() ) {
                        $title = $page->getRedirectTarget();
                        # Same as before
-                       if ( $title === null || !$title->exists() || !$title->userCan( 'read', $wgUser ) ) {
+                       if ( $title === null || !$title->exists() || !$title->userCan( 'read', $user ) ) {
                                // TODO: somehow show a warning to the user!
                                return $handler->makeEmptyContent();
                        }
                        $page = WikiPage::factory( $title );
                }
 
-               $parserOptions = ParserOptions::newFromUser( $wgUser );
+               $parserOptions = ParserOptions::newFromUser( $user );
                $content = $page->getContent( Revision::RAW );
 
                if ( !$content ) {
@@ -1429,10 +1426,10 @@ class EditPage {
         * @private
         */
        public function tokenOk( &$request ) {
-               global $wgUser;
                $token = $request->getVal( 'wpEditToken' );
-               $this->mTokenOk = $wgUser->matchEditToken( $token );
-               $this->mTokenOkExceptSuffix = $wgUser->matchEditTokenNoSuffix( $token );
+               $user = $this->context->getUser();
+               $this->mTokenOk = $user->matchEditToken( $token );
+               $this->mTokenOkExceptSuffix = $user->matchEditTokenNoSuffix( $token );
                return $this->mTokenOk;
        }
 
@@ -1472,10 +1469,8 @@ class EditPage {
         * @return Status The resulting status object.
         */
        public function attemptSave( &$resultDetails = false ) {
-               global $wgUser;
-
                # Allow bots to exempt some edits from bot flagging
-               $bot = $wgUser->isAllowed( 'bot' ) && $this->bot;
+               $bot = $this->context->getUser()->isAllowed( 'bot' ) && $this->bot;
                $status = $this->internalAttemptSave( $resultDetails, $bot );
 
                Hooks::run( 'EditPage::attemptSave:after', [ $this, $status, $resultDetails ] );
@@ -1507,8 +1502,6 @@ class EditPage {
         * @return bool False, if output is done, true if rest of the form should be displayed
         */
        private function handleStatus( Status $status, $resultDetails ) {
-               global $wgUser;
-
                /**
                 * @todo FIXME: once the interface for internalAttemptSave() is made
                 *   nicer, this should use the message in $status
@@ -1598,7 +1591,7 @@ class EditPage {
                                return false;
 
                        case self::AS_BLOCKED_PAGE_FOR_USER:
-                               throw new UserBlockedError( $wgUser->getBlock() );
+                               throw new UserBlockedError( $this->context->getUser()->getBlock() );
 
                        case self::AS_IMAGE_REDIRECT_ANON:
                        case self::AS_IMAGE_REDIRECT_LOGGED:
@@ -1737,10 +1730,11 @@ class EditPage {
         * time.
         */
        public function internalAttemptSave( &$result, $bot = false ) {
-               global $wgUser, $wgRequest, $wgMaxArticleSize;
+               global $wgRequest, $wgMaxArticleSize;
                global $wgContentHandlerUseDB;
 
                $status = Status::newGood();
+               $user = $this->context->getUser();
 
                if ( !Hooks::run( 'EditPage::attemptSave', [ $this ] ) ) {
                        wfDebug( "Hook 'EditPage::attemptSave' aborted article saving\n" );
@@ -1753,7 +1747,7 @@ class EditPage {
                if ( $spam !== '' ) {
                        wfDebugLog(
                                'SimpleAntiSpam',
-                               $wgUser->getName() .
+                               $user->getName() .
                                ' editing "' .
                                $this->mTitle->getPrefixedText() .
                                '" submitted bogus field "' .
@@ -1782,9 +1776,9 @@ class EditPage {
                # Check image redirect
                if ( $this->mTitle->getNamespace() == NS_FILE &&
                        $textbox_content->isRedirect() &&
-                       !$wgUser->isAllowed( 'upload' )
+                       !$user->isAllowed( 'upload' )
                ) {
-                               $code = $wgUser->isAnon() ? self::AS_IMAGE_REDIRECT_ANON : self::AS_IMAGE_REDIRECT_LOGGED;
+                               $code = $user->isAnon() ? self::AS_IMAGE_REDIRECT_ANON : self::AS_IMAGE_REDIRECT_LOGGED;
                                $status->setResult( false, $code );
 
                                return $status;
@@ -1832,10 +1826,10 @@ class EditPage {
                        return $status;
                }
 
-               if ( $wgUser->isBlockedFrom( $this->mTitle, false ) ) {
+               if ( $user->isBlockedFrom( $this->mTitle, false ) ) {
                        // Auto-block user's IP if the account was "hard" blocked
                        if ( !wfReadOnly() ) {
-                               $wgUser->spreadAnyEditBlock();
+                               $user->spreadAnyEditBlock();
                        }
                        # Check block state against master, thus 'false'.
                        $status->setResult( false, self::AS_BLOCKED_PAGE_FOR_USER );
@@ -1850,8 +1844,8 @@ class EditPage {
                        return $status;
                }
 
-               if ( !$wgUser->isAllowed( 'edit' ) ) {
-                       if ( $wgUser->isAnon() ) {
+               if ( !$user->isAllowed( 'edit' ) ) {
+                       if ( $user->isAnon() ) {
                                $status->setResult( false, self::AS_READ_ONLY_PAGE_ANON );
                                return $status;
                        } else {
@@ -1867,15 +1861,15 @@ class EditPage {
                                $status->fatal( 'editpage-cannot-use-custom-model' );
                                $status->value = self::AS_CANNOT_USE_CUSTOM_MODEL;
                                return $status;
-                       } elseif ( !$wgUser->isAllowed( 'editcontentmodel' ) ) {
+                       } elseif ( !$user->isAllowed( 'editcontentmodel' ) ) {
                                $status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL );
                                return $status;
                        }
                        // Make sure the user can edit the page under the new content model too
                        $titleWithNewContentModel = clone $this->mTitle;
                        $titleWithNewContentModel->setContentModel( $this->contentModel );
-                       if ( !$titleWithNewContentModel->userCan( 'editcontentmodel', $wgUser )
-                               || !$titleWithNewContentModel->userCan( 'edit', $wgUser )
+                       if ( !$titleWithNewContentModel->userCan( 'editcontentmodel', $user )
+                               || !$titleWithNewContentModel->userCan( 'edit', $user )
                        ) {
                                $status->setResult( false, self::AS_NO_CHANGE_CONTENT_MODEL );
                                return $status;
@@ -1887,7 +1881,7 @@ class EditPage {
 
                if ( $this->changeTags ) {
                        $changeTagsStatus = ChangeTags::canAddTagsAccompanyingChange(
-                               $this->changeTags, $wgUser );
+                               $this->changeTags, $user );
                        if ( !$changeTagsStatus->isOK() ) {
                                $changeTagsStatus->value = self::AS_CHANGE_TAG_ERROR;
                                return $changeTagsStatus;
@@ -1899,8 +1893,8 @@ class EditPage {
                        $status->value = self::AS_READ_ONLY_PAGE;
                        return $status;
                }
-               if ( $wgUser->pingLimiter() || $wgUser->pingLimiter( 'linkpurge', 0 )
-                       || ( $changingContentModel && $wgUser->pingLimiter( 'editcontentmodel' ) )
+               if ( $user->pingLimiter() || $user->pingLimiter( 'linkpurge', 0 )
+                       || ( $changingContentModel && $user->pingLimiter( 'editcontentmodel' ) )
                ) {
                        $status->fatal( 'actionthrottledtext' );
                        $status->value = self::AS_RATE_LIMITED;
@@ -1921,7 +1915,7 @@ class EditPage {
 
                if ( $new ) {
                        // Late check for create permission, just in case *PARANOIA*
-                       if ( !$this->mTitle->userCan( 'create', $wgUser ) ) {
+                       if ( !$this->mTitle->userCan( 'create', $user ) ) {
                                $status->fatal( 'nocreatetext' );
                                $status->value = self::AS_NO_CREATE_PERMISSION;
                                wfDebug( __METHOD__ . ": no create permission\n" );
@@ -1945,7 +1939,7 @@ class EditPage {
                                return $status;
                        }
 
-                       if ( !$this->runPostMergeFilters( $textbox_content, $status, $wgUser ) ) {
+                       if ( !$this->runPostMergeFilters( $textbox_content, $status, $user ) ) {
                                return $status;
                        }
 
@@ -1981,7 +1975,7 @@ class EditPage {
                        ) {
                                $this->isConflict = true;
                                if ( $this->section == 'new' ) {
-                                       if ( $this->page->getUserText() == $wgUser->getName() &&
+                                       if ( $this->page->getUserText() == $user->getName() &&
                                                $this->page->getComment() == $this->newSectionSummary()
                                        ) {
                                                // Probably a duplicate submission of a new comment.
@@ -1997,7 +1991,7 @@ class EditPage {
                                } elseif ( $this->section == ''
                                        && Revision::userWasLastToEdit(
                                                DB_MASTER, $this->mTitle->getArticleID(),
-                                               $wgUser->getId(), $this->edittime
+                                               $user->getId(), $this->edittime
                                        )
                                ) {
                                        # Suppress edit conflict with self, except for section edits where merging is required.
@@ -2067,7 +2061,7 @@ class EditPage {
                                return $status;
                        }
 
-                       if ( !$this->runPostMergeFilters( $content, $status, $wgUser ) ) {
+                       if ( !$this->runPostMergeFilters( $content, $status, $user ) ) {
                                return $status;
                        }
 
@@ -2088,7 +2082,7 @@ class EditPage {
                                        return $status;
                                }
                        } elseif ( !$this->allowBlankSummary
-                               && !$content->equals( $this->getOriginalContent( $wgUser ) )
+                               && !$content->equals( $this->getOriginalContent( $user ) )
                                && !$content->isRedirect()
                                && md5( $this->summary ) == $this->autoSumm
                        ) {
@@ -2158,7 +2152,7 @@ class EditPage {
                        $this->summary,
                        $flags,
                        false,
-                       $wgUser,
+                       $user,
                        $content->getDefaultFormat(),
                        $this->changeTags,
                        $this->undidRev
@@ -2182,7 +2176,7 @@ class EditPage {
                $result['nullEdit'] = $doEditStatus->hasMessage( 'edit-no-change' );
                if ( $result['nullEdit'] ) {
                        // We don't know if it was a null edit until now, so increment here
-                       $wgUser->pingLimiter( 'linkpurge' );
+                       $user->pingLimiter( 'linkpurge' );
                }
                $result['redirect'] = $content->isRedirect();
 
@@ -2191,7 +2185,7 @@ class EditPage {
                // If the content model changed, add a log entry
                if ( $changingContentModel ) {
                        $this->addContentModelChangeLogEntry(
-                               $wgUser,
+                               $user,
                                $new ? false : $oldContentModel,
                                $this->contentModel,
                                $this->summary
@@ -2225,13 +2219,11 @@ class EditPage {
         * Register the change of watch status
         */
        protected function updateWatchlist() {
-               global $wgUser;
-
-               if ( !$wgUser->isLoggedIn() ) {
+               $user = $this->context->getUser();
+               if ( !$user->isLoggedIn() ) {
                        return;
                }
 
-               $user = $wgUser;
                $title = $this->mTitle;
                $watch = $this->watchthis;
                // Do this in its own transaction to reduce contention...
@@ -2345,14 +2337,15 @@ class EditPage {
        }
 
        public function setHeaders() {
-               global $wgUser, $wgAjaxEditStash;
+               global $wgAjaxEditStash;
 
                $out = $this->context->getOutput();
 
                $out->addModules( 'mediawiki.action.edit' );
                $out->addModuleStyles( 'mediawiki.action.edit.styles' );
 
-               if ( $wgUser->getOption( 'showtoolbar' ) ) {
+               $user = $this->context->getUser();
+               if ( $user->getOption( 'showtoolbar' ) ) {
                        // The addition of default buttons is handled by getEditToolbar() which
                        // has its own dependency on this module. The call here ensures the module
                        // is loaded in time (it has position "top") for other modules to register
@@ -2360,11 +2353,11 @@ class EditPage {
                        $out->addModules( 'mediawiki.toolbar' );
                }
 
-               if ( $wgUser->getOption( 'uselivepreview' ) ) {
+               if ( $user->getOption( 'uselivepreview' ) ) {
                        $out->addModules( 'mediawiki.action.edit.preview' );
                }
 
-               if ( $wgUser->getOption( 'useeditwarning' ) ) {
+               if ( $user->getOption( 'useeditwarning' ) ) {
                        $out->addModules( 'mediawiki.action.edit.editWarning' );
                }
 
@@ -2405,7 +2398,6 @@ class EditPage {
         * Show all applicable editing introductions
         */
        protected function showIntro() {
-               global $wgUser;
                if ( $this->suppressIntro ) {
                        return;
                }
@@ -2480,7 +2472,7 @@ class EditPage {
                        $helpLink = wfExpandUrl( Skin::makeInternalOrExternalUrl(
                                $this->context->msg( 'helppage' )->inContentLanguage()->text()
                        ) );
-                       if ( $wgUser->isLoggedIn() ) {
+                       if ( $this->context->getUser()->isLoggedIn() ) {
                                $out->wrapWikiMsg(
                                        // Suppress the external link icon, consider the help url an internal one
                                        "<div class=\"mw-newarticletext plainlinks\">\n$1\n</div>",
@@ -2606,8 +2598,6 @@ class EditPage {
         * use the EditPage::showEditForm:fields hook instead.
         */
        public function showEditForm( $formCallback = null ) {
-               global $wgUser;
-
                # need to parse the preview early so that we know which templates are used,
                # otherwise users with "show preview after edit box" will get a blank list
                # we parse this near the beginning so that setHeaders can do the title
@@ -2642,7 +2632,8 @@ class EditPage {
 
                $out->addHTML( $this->editFormPageTop );
 
-               if ( $wgUser->getOption( 'previewontop' ) ) {
+               $user = $this->context->getUser();
+               if ( $user->getOption( 'previewontop' ) ) {
                        $this->displayPreviewArea( $previewOutput, true );
                }
 
@@ -2774,7 +2765,7 @@ class EditPage {
 
                $out->addHTML( $this->editFormTextBeforeContent );
 
-               if ( !$this->isCssJsSubpage && $showToolbar && $wgUser->getOption( 'showtoolbar' ) ) {
+               if ( !$this->isCssJsSubpage && $showToolbar && $user->getOption( 'showtoolbar' ) ) {
                        $out->addHTML( self::getEditToolbar( $this->mTitle ) );
                }
 
@@ -2851,7 +2842,7 @@ class EditPage {
                $out->addHTML( Html::hidden( 'wpUltimateParam', true ) );
                $out->addHTML( $this->editFormTextBottom . "\n</form>\n" );
 
-               if ( !$wgUser->getOption( 'previewontop' ) ) {
+               if ( !$user->getOption( 'previewontop' ) ) {
                        $this->displayPreviewArea( $previewOutput, false );
                }
        }
@@ -2898,10 +2889,10 @@ class EditPage {
        }
 
        protected function showHeader() {
-               global $wgUser;
                global $wgAllowUserCss, $wgAllowUserJs;
 
                $out = $this->context->getOutput();
+               $user = $this->context->getUser();
                if ( $this->isConflict ) {
                        $this->addExplainConflictHeader( $out );
                        $this->editRevId = $this->page->getLatest();
@@ -2915,7 +2906,7 @@ class EditPage {
                                }
                        }
 
-                       $buttonLabel = $this->context->msg( $this->getSaveButtonLabel() )->text();
+                       $buttonLabel = $this->context->msg( $this->getSubmitButtonLabel() )->text();
 
                        if ( $this->missingComment ) {
                                $out->wrapWikiMsg( "<div id='mw-missingcommenttext'>\n$1\n</div>", 'missingcommenttext' );
@@ -2962,7 +2953,7 @@ class EditPage {
                                if ( $revision ) {
                                        // Let sysop know that this will make private content public if saved
 
-                                       if ( !$revision->userCan( Revision::DELETED_TEXT, $wgUser ) ) {
+                                       if ( !$revision->userCan( Revision::DELETED_TEXT, $user ) ) {
                                                $out->wrapWikiMsg(
                                                        "<div class='mw-warning plainlinks'>\n$1\n</div>\n",
                                                        'rev-deleted-text-permission'
@@ -2993,7 +2984,7 @@ class EditPage {
                                "<div id=\"mw-read-only-warning\">\n$1\n</div>",
                                [ 'readonlywarning', wfReadOnlyReason() ]
                        );
-               } elseif ( $wgUser->isAnon() ) {
+               } elseif ( $user->isAnon() ) {
                        if ( $this->formtype != 'preview' ) {
                                $out->wrapWikiMsg(
                                        "<div id='mw-anon-edit-warning' class='warningbox'>\n$1\n</div>",
@@ -3022,7 +3013,7 @@ class EditPage {
                                                [ 'userinvalidcssjstitle', $this->mTitle->getSkinFromCssJsSubpage() ]
                                        );
                                }
-                               if ( $this->getTitle()->isSubpageOf( $wgUser->getUserPage() ) ) {
+                               if ( $this->getTitle()->isSubpageOf( $user->getUserPage() ) ) {
                                        $out->wrapWikiMsg( '<div class="mw-usercssjspublic">$1</div>',
                                                $this->isCssSubpage ? 'usercssispublic' : 'userjsispublic'
                                        );
@@ -3234,7 +3225,6 @@ class EditPage {
        }
 
        protected function showFormAfterText() {
-               global $wgUser;
                /**
                 * To make it harder for someone to slip a user a page
                 * which submits an edit form to the wiki without their
@@ -3248,7 +3238,9 @@ class EditPage {
                 * broken text-mangling proxies.
                 */
                $this->context->getOutput()->addHTML(
-                       "\n" . Html::hidden( "wpEditToken", $wgUser->getEditToken() ) . "\n"
+                       "\n" .
+                       Html::hidden( "wpEditToken", $this->context->getUser()->getEditToken() ) .
+                       "\n"
                );
        }
 
@@ -3323,12 +3315,10 @@ class EditPage {
        }
 
        protected function showTextbox( $text, $name, $customAttribs = [] ) {
-               global $wgUser;
-
                $wikitext = $this->safeUnicodeOutput( $text );
                $wikitext = $this->addNewLineAtEnd( $wikitext );
 
-               $attribs = $this->buildTextboxAttribs( $name, $customAttribs, $wgUser );
+               $attribs = $this->buildTextboxAttribs( $name, $customAttribs, $this->context->getUser() );
 
                $this->context->getOutput()->addHTML( Html::textarea( $name, $wikitext, $attribs ) );
        }
@@ -3403,7 +3393,7 @@ class EditPage {
         * save and then make a comparison.
         */
        public function showDiff() {
-               global $wgUser, $wgContLang;
+               global $wgContLang;
 
                $oldtitlemsg = 'currentrev';
                # if message does not exist, show diff against the preloaded default
@@ -3433,8 +3423,9 @@ class EditPage {
                if ( $newContent ) {
                        Hooks::run( 'EditPageGetDiffContent', [ $this, &$newContent ] );
 
-                       $popts = ParserOptions::newFromUserAndLang( $wgUser, $wgContLang );
-                       $newContent = $newContent->preSaveTransform( $this->mTitle, $wgUser, $popts );
+                       $user = $this->context->getUser();
+                       $popts = ParserOptions::newFromUserAndLang( $user, $wgContLang );
+                       $newContent = $newContent->preSaveTransform( $this->mTitle, $user, $popts );
                }
 
                if ( ( $oldContent && !$oldContent->isEmpty() ) || ( $newContent && !$newContent->isEmpty() ) ) {
@@ -3794,7 +3785,7 @@ class EditPage {
         * @return string
         */
        public function getPreviewText() {
-               global $wgRawHtml, $wgLang;
+               global $wgRawHtml;
                global $wgAllowUserCss, $wgAllowUserJs;
 
                $out = $this->context->getOutput();
@@ -3830,7 +3821,8 @@ class EditPage {
 
                        # provide a anchor link to the editform
                        $continueEditing = '<span class="mw-continue-editing">' .
-                               '[[#' . self::EDITFORM_ID . '|' . $wgLang->getArrow() . ' ' .
+                               '[[#' . self::EDITFORM_ID . '|' .
+                               $this->context->getLanguage()->getArrow() . ' ' .
                                $this->context->msg( 'continue-editing' )->text() . ']]</span>';
                        if ( $this->mTriedSave && !$this->mTokenOk ) {
                                if ( $this->mTokenOkExceptSuffix ) {
@@ -3958,11 +3950,11 @@ class EditPage {
         *   - html: The HTML to be displayed
         */
        protected function doPreviewParse( Content $content ) {
-               global $wgUser;
+               $user = $this->context->getUser();
                $parserOptions = $this->getPreviewParserOptions();
-               $pstContent = $content->preSaveTransform( $this->mTitle, $wgUser, $parserOptions );
+               $pstContent = $content->preSaveTransform( $this->mTitle, $user, $parserOptions );
                $scopedCallback = $parserOptions->setupFakeRevision(
-                       $this->mTitle, $pstContent, $wgUser );
+                       $this->mTitle, $pstContent, $user );
                $parserOutput = $pstContent->getParserOutput( $this->mTitle, null, $parserOptions );
                ScopedCallback::consume( $scopedCallback );
                $parserOutput->setEditSectionTokens( false ); // no section edit links
@@ -4149,11 +4141,11 @@ class EditPage {
         * @return array
         */
        public function getCheckboxesDefinition( $checked ) {
-               global $wgUser;
                $checkboxes = [];
 
+               $user = $this->context->getUser();
                // don't show the minor edit checkbox if it's a new page or section
-               if ( !$this->isNew && $wgUser->isAllowed( 'minoredit' ) ) {
+               if ( !$this->isNew && $user->isAllowed( 'minoredit' ) ) {
                        $checkboxes['wpMinoredit'] = [
                                'id' => 'wpMinoredit',
                                'label-message' => 'minoredit',
@@ -4165,7 +4157,7 @@ class EditPage {
                        ];
                }
 
-               if ( $wgUser->isLoggedIn() ) {
+               if ( $user->isLoggedIn() ) {
                        $checkboxes['wpWatchthis'] = [
                                'id' => 'wpWatchthis',
                                'label-message' => 'watchthis',
@@ -4333,9 +4325,9 @@ class EditPage {
         *
         * @return string
         */
-       private function getSaveButtonLabel() {
+       protected function getSubmitButtonLabel() {
                $labelAsPublish =
-                       $this->mArticle->getContext()->getConfig()->get( 'EditSubmitButtonLabelPublish' );
+                       $this->context->getConfig()->get( 'EditSubmitButtonLabelPublish' );
 
                // Can't use $this->isNew as that's also true if we're adding a new section to an extant page
                $newPage = !$this->mTitle->exists();
@@ -4360,7 +4352,7 @@ class EditPage {
        public function getEditButtons( &$tabindex ) {
                $buttons = [];
 
-               $buttonLabel = $this->context->msg( $this->getSaveButtonLabel() )->text();
+               $buttonLabel = $this->context->msg( $this->getSubmitButtonLabel() )->text();
 
                $attribs = [
                        'name' => 'wpSave',
@@ -4448,11 +4440,10 @@ class EditPage {
         * @param string|array|bool $match Text (or array of texts) which triggered one or more filters
         */
        public function spamPageWithContent( $match = false ) {
-               global $wgLang;
                $this->textbox2 = $this->textbox1;
 
                if ( is_array( $match ) ) {
-                       $match = $wgLang->listToText( $match );
+                       $match = $this->context->getLanguage()->listToText( $match );
                }
                $out = $this->context->getOutput();
                $out->prepareErrorPage( $this->context->msg( 'spamprotectiontitle' ) );
@@ -4640,19 +4631,20 @@ class EditPage {
         * @since 1.29
         */
        protected function addLongPageWarningHeader() {
-               global $wgMaxArticleSize, $wgLang;
+               global $wgMaxArticleSize;
 
                if ( $this->contentLength === false ) {
                        $this->contentLength = strlen( $this->textbox1 );
                }
 
                $out = $this->context->getOutput();
+               $lang = $this->context->getLanguage();
                if ( $this->tooBig || $this->contentLength > $wgMaxArticleSize * 1024 ) {
                        $out->wrapWikiMsg( "<div class='error' id='mw-edit-longpageerror'>\n$1\n</div>",
                                [
                                        'longpageerror',
-                                       $wgLang->formatNum( round( $this->contentLength / 1024, 3 ) ),
-                                       $wgLang->formatNum( $wgMaxArticleSize )
+                                       $lang->formatNum( round( $this->contentLength / 1024, 3 ) ),
+                                       $lang->formatNum( $wgMaxArticleSize )
                                ]
                        );
                } else {
@@ -4660,7 +4652,7 @@ class EditPage {
                                $out->wrapWikiMsg( "<div id='mw-edit-longpage-hint'>\n$1\n</div>",
                                        [
                                                'longpage-hint',
-                                               $wgLang->formatSize( strlen( $this->textbox1 ) ),
+                                               $lang->formatSize( strlen( $this->textbox1 ) ),
                                                strlen( $this->textbox1 )
                                        ]
                                );
@@ -4717,7 +4709,7 @@ class EditPage {
        protected function addExplainConflictHeader( OutputPage $out ) {
                $out->wrapWikiMsg(
                        "<div class='mw-explainconflict'>\n$1\n</div>",
-                       [ 'explainconflict', $this->context->msg( $this->getSaveButtonLabel() )->text() ]
+                       [ 'explainconflict', $this->context->msg( $this->getSubmitButtonLabel() )->text() ]
                );
        }
 
index 725a512..53c8d3b 100644 (file)
@@ -246,6 +246,9 @@ class FormOptions implements ArrayAccess {
 
        /**
         * @see validateBounds()
+        * @param string $name
+        * @param int $min
+        * @param int $max
         */
        public function validateIntBounds( $name, $min, $max ) {
                $this->validateBounds( $name, $min, $max );
index 49159ed..e80ecf1 100644 (file)
@@ -26,8 +26,10 @@ if ( !defined( 'MEDIAWIKI' ) ) {
 
 use Liuggio\StatsdClient\Sender\SocketSender;
 use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\ProcOpenError;
 use MediaWiki\Session\SessionManager;
 use MediaWiki\MediaWikiServices;
+use MediaWiki\Shell\Shell;
 use Wikimedia\ScopedCallback;
 use Wikimedia\Rdbms\DBReplicationWaitError;
 
@@ -2237,64 +2239,12 @@ function wfIniGetBool( $setting ) {
  * @param string $args,... strings to escape and glue together,
  *  or a single array of strings parameter
  * @return string
+ * @deprecated since 1.30 use MediaWiki\Shell::escape()
  */
 function wfEscapeShellArg( /*...*/ ) {
        $args = func_get_args();
-       if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
-               // If only one argument has been passed, and that argument is an array,
-               // treat it as a list of arguments
-               $args = reset( $args );
-       }
 
-       $first = true;
-       $retVal = '';
-       foreach ( $args as $arg ) {
-               if ( !$first ) {
-                       $retVal .= ' ';
-               } else {
-                       $first = false;
-               }
-
-               if ( wfIsWindows() ) {
-                       // Escaping for an MSVC-style command line parser and CMD.EXE
-                       // @codingStandardsIgnoreStart For long URLs
-                       // Refs:
-                       //  * https://web.archive.org/web/20020708081031/http://mailman.lyra.org/pipermail/scite-interest/2002-March/000436.html
-                       //  * https://technet.microsoft.com/en-us/library/cc723564.aspx
-                       //  * T15518
-                       //  * CR r63214
-                       // Double the backslashes before any double quotes. Escape the double quotes.
-                       // @codingStandardsIgnoreEnd
-                       $tokens = preg_split( '/(\\\\*")/', $arg, -1, PREG_SPLIT_DELIM_CAPTURE );
-                       $arg = '';
-                       $iteration = 0;
-                       foreach ( $tokens as $token ) {
-                               if ( $iteration % 2 == 1 ) {
-                                       // Delimiter, a double quote preceded by zero or more slashes
-                                       $arg .= str_replace( '\\', '\\\\', substr( $token, 0, -1 ) ) . '\\"';
-                               } elseif ( $iteration % 4 == 2 ) {
-                                       // ^ in $token will be outside quotes, need to be escaped
-                                       $arg .= str_replace( '^', '^^', $token );
-                               } else { // $iteration % 4 == 0
-                                       // ^ in $token will appear inside double quotes, so leave as is
-                                       $arg .= $token;
-                               }
-                               $iteration++;
-                       }
-                       // Double the backslashes before the end of the string, because
-                       // we will soon add a quote
-                       $m = [];
-                       if ( preg_match( '/^(.*?)(\\\\+)$/', $arg, $m ) ) {
-                               $arg = $m[1] . str_replace( '\\', '\\\\', $m[2] );
-                       }
-
-                       // Add surrounding quotes
-                       $retVal .= '"' . $arg . '"';
-               } else {
-                       $retVal .= escapeshellarg( $arg );
-               }
-       }
-       return $retVal;
+       return call_user_func_array( Shell::class . '::escape', $args );
 }
 
 /**
@@ -2302,18 +2252,10 @@ function wfEscapeShellArg( /*...*/ ) {
  *
  * @return bool|string False or 'disabled'
  * @since 1.22
+ * @deprecated since 1.30 use MediaWiki\Shell::isDisabled()
  */
 function wfShellExecDisabled() {
-       static $disabled = null;
-       if ( is_null( $disabled ) ) {
-               if ( !function_exists( 'proc_open' ) ) {
-                       wfDebug( "proc_open() is disabled\n" );
-                       $disabled = 'disabled';
-               } else {
-                       $disabled = false;
-               }
-       }
-       return $disabled;
+       return Shell::isDisabled() ? 'disabled' : false;
 }
 
 /**
@@ -2337,221 +2279,40 @@ function wfShellExecDisabled() {
  *     method. Set this to a string for an alternative method to profile from
  *
  * @return string Collected stdout as a string
+ * @deprecated since 1.30 use class MediaWiki\Shell\Shell
  */
 function wfShellExec( $cmd, &$retval = null, $environ = [],
        $limits = [], $options = []
 ) {
-       global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime,
-               $wgMaxShellWallClockTime, $wgShellCgroup;
-
-       $disabled = wfShellExecDisabled();
-       if ( $disabled ) {
+       if ( Shell::isDisabled() ) {
                $retval = 1;
+               // Backwards compatibility be upon us...
                return 'Unable to run external programs, proc_open() is disabled.';
        }
 
-       $includeStderr = isset( $options['duplicateStderr'] ) && $options['duplicateStderr'];
-       $profileMethod = isset( $options['profileMethod'] ) ? $options['profileMethod'] : wfGetCaller();
-
-       $envcmd = '';
-       foreach ( $environ as $k => $v ) {
-               if ( wfIsWindows() ) {
-                       /* Surrounding a set in quotes (method used by wfEscapeShellArg) makes the quotes themselves
-                        * appear in the environment variable, so we must use carat escaping as documented in
-                        * https://technet.microsoft.com/en-us/library/cc723564.aspx
-                        * Note however that the quote isn't listed there, but is needed, and the parentheses
-                        * are listed there but doesn't appear to need it.
-                        */
-                       $envcmd .= "set $k=" . preg_replace( '/([&|()<>^"])/', '^\\1', $v ) . '&& ';
-               } else {
-                       /* Assume this is a POSIX shell, thus required to accept variable assignments before the command
-                        * http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_09_01
-                        */
-                       $envcmd .= "$k=" . escapeshellarg( $v ) . ' ';
-               }
-       }
        if ( is_array( $cmd ) ) {
-               $cmd = wfEscapeShellArg( $cmd );
+               $cmd = Shell::escape( $cmd );
        }
 
-       $cmd = $envcmd . $cmd;
+       $includeStderr = isset( $options['duplicateStderr'] ) && $options['duplicateStderr'];
+       $profileMethod = isset( $options['profileMethod'] ) ? $options['profileMethod'] : wfGetCaller();
 
-       $useLogPipe = false;
-       if ( is_executable( '/bin/bash' ) ) {
-               $time = intval( isset( $limits['time'] ) ? $limits['time'] : $wgMaxShellTime );
-               if ( isset( $limits['walltime'] ) ) {
-                       $wallTime = intval( $limits['walltime'] );
-               } elseif ( isset( $limits['time'] ) ) {
-                       $wallTime = $time;
-               } else {
-                       $wallTime = intval( $wgMaxShellWallClockTime );
-               }
-               $mem = intval( isset( $limits['memory'] ) ? $limits['memory'] : $wgMaxShellMemory );
-               $filesize = intval( isset( $limits['filesize'] ) ? $limits['filesize'] : $wgMaxShellFileSize );
-
-               if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) {
-                       $cmd = '/bin/bash ' . escapeshellarg( "$IP/includes/limit.sh" ) . ' ' .
-                               escapeshellarg( $cmd ) . ' ' .
-                               escapeshellarg(
-                                       "MW_INCLUDE_STDERR=" . ( $includeStderr ? '1' : '' ) . ';' .
-                                       "MW_CPU_LIMIT=$time; " .
-                                       'MW_CGROUP=' . escapeshellarg( $wgShellCgroup ) . '; ' .
-                                       "MW_MEM_LIMIT=$mem; " .
-                                       "MW_FILE_SIZE_LIMIT=$filesize; " .
-                                       "MW_WALL_CLOCK_LIMIT=$wallTime; " .
-                                       "MW_USE_LOG_PIPE=yes"
-                               );
-                       $useLogPipe = true;
-               } elseif ( $includeStderr ) {
-                       $cmd .= ' 2>&1';
-               }
-       } elseif ( $includeStderr ) {
-               $cmd .= ' 2>&1';
-       }
-       wfDebug( "wfShellExec: $cmd\n" );
-
-       // Don't try to execute commands that exceed Linux's MAX_ARG_STRLEN.
-       // Other platforms may be more accomodating, but we don't want to be
-       // accomodating, because very long commands probably include user
-       // input. See T129506.
-       if ( strlen( $cmd ) > SHELL_MAX_ARG_STRLEN ) {
-               throw new Exception( __METHOD__ .
-                       '(): total length of $cmd must not exceed SHELL_MAX_ARG_STRLEN' );
-       }
-
-       $desc = [
-               0 => [ 'file', 'php://stdin', 'r' ],
-               1 => [ 'pipe', 'w' ],
-               2 => [ 'file', 'php://stderr', 'w' ] ];
-       if ( $useLogPipe ) {
-               $desc[3] = [ 'pipe', 'w' ];
-       }
-       $pipes = null;
-       $scoped = Profiler::instance()->scopedProfileIn( __FUNCTION__ . '-' . $profileMethod );
-       $proc = proc_open( $cmd, $desc, $pipes );
-       if ( !$proc ) {
-               wfDebugLog( 'exec', "proc_open() failed: $cmd" );
+       try {
+               $result = Shell::command( [] )
+                       ->unsafeParams( (array)$cmd )
+                       ->environment( $environ )
+                       ->limits( $limits )
+                       ->includeStderr( $includeStderr )
+                       ->profileMethod( $profileMethod )
+                       ->execute();
+       } catch ( ProcOpenError $ex ) {
                $retval = -1;
                return '';
        }
-       $outBuffer = $logBuffer = '';
-       $emptyArray = [];
-       $status = false;
-       $logMsg = false;
-
-       /* According to the documentation, it is possible for stream_select()
-        * to fail due to EINTR. I haven't managed to induce this in testing
-        * despite sending various signals. If it did happen, the error
-        * message would take the form:
-        *
-        * stream_select(): unable to select [4]: Interrupted system call (max_fd=5)
-        *
-        * where [4] is the value of the macro EINTR and "Interrupted system
-        * call" is string which according to the Linux manual is "possibly"
-        * localised according to LC_MESSAGES.
-        */
-       $eintr = defined( 'SOCKET_EINTR' ) ? SOCKET_EINTR : 4;
-       $eintrMessage = "stream_select(): unable to select [$eintr]";
-
-       $running = true;
-       $timeout = null;
-       $numReadyPipes = 0;
-
-       while ( $running === true || $numReadyPipes !== 0 ) {
-               if ( $running ) {
-                       $status = proc_get_status( $proc );
-                       // If the process has terminated, switch to nonblocking selects
-                       // for getting any data still waiting to be read.
-                       if ( !$status['running'] ) {
-                               $running = false;
-                               $timeout = 0;
-                       }
-               }
 
-               $readyPipes = $pipes;
+       $retval = $result->getExitCode();
 
-               // Clear last error
-               // @codingStandardsIgnoreStart Generic.PHP.NoSilencedErrors.Discouraged
-               @trigger_error( '' );
-               $numReadyPipes = @stream_select( $readyPipes, $emptyArray, $emptyArray, $timeout );
-               if ( $numReadyPipes === false ) {
-                       // @codingStandardsIgnoreEnd
-                       $error = error_get_last();
-                       if ( strncmp( $error['message'], $eintrMessage, strlen( $eintrMessage ) ) == 0 ) {
-                               continue;
-                       } else {
-                               trigger_error( $error['message'], E_USER_WARNING );
-                               $logMsg = $error['message'];
-                               break;
-                       }
-               }
-               foreach ( $readyPipes as $fd => $pipe ) {
-                       $block = fread( $pipe, 65536 );
-                       if ( $block === '' ) {
-                               // End of file
-                               fclose( $pipes[$fd] );
-                               unset( $pipes[$fd] );
-                               if ( !$pipes ) {
-                                       break 2;
-                               }
-                       } elseif ( $block === false ) {
-                               // Read error
-                               $logMsg = "Error reading from pipe";
-                               break 2;
-                       } elseif ( $fd == 1 ) {
-                               // From stdout
-                               $outBuffer .= $block;
-                       } elseif ( $fd == 3 ) {
-                               // From log FD
-                               $logBuffer .= $block;
-                               if ( strpos( $block, "\n" ) !== false ) {
-                                       $lines = explode( "\n", $logBuffer );
-                                       $logBuffer = array_pop( $lines );
-                                       foreach ( $lines as $line ) {
-                                               wfDebugLog( 'exec', $line );
-                                       }
-                               }
-                       }
-               }
-       }
-
-       foreach ( $pipes as $pipe ) {
-               fclose( $pipe );
-       }
-
-       // Use the status previously collected if possible, since proc_get_status()
-       // just calls waitpid() which will not return anything useful the second time.
-       if ( $running ) {
-               $status = proc_get_status( $proc );
-       }
-
-       if ( $logMsg !== false ) {
-               // Read/select error
-               $retval = -1;
-               proc_close( $proc );
-       } elseif ( $status['signaled'] ) {
-               $logMsg = "Exited with signal {$status['termsig']}";
-               $retval = 128 + $status['termsig'];
-               proc_close( $proc );
-       } else {
-               if ( $status['running'] ) {
-                       $retval = proc_close( $proc );
-               } else {
-                       $retval = $status['exitcode'];
-                       proc_close( $proc );
-               }
-               if ( $retval == 127 ) {
-                       $logMsg = "Possibly missing executable file";
-               } elseif ( $retval >= 129 && $retval <= 192 ) {
-                       $logMsg = "Probably exited with signal " . ( $retval - 128 );
-               }
-       }
-
-       if ( $logMsg !== false ) {
-               wfDebugLog( 'exec', "$logMsg: $cmd" );
-       }
-
-       return $outBuffer;
+       return $result->getStdout();
 }
 
 /**
@@ -2569,6 +2330,7 @@ function wfShellExec( $cmd, &$retval = null, $environ = [],
  * @param array $limits Optional array with limits(filesize, memory, time, walltime)
  *   this overwrites the global wgMaxShell* limits.
  * @return string Collected stdout and stderr as a string
+ * @deprecated since 1.30 use class MediaWiki\Shell\Shell
  */
 function wfShellExecWithStderr( $cmd, &$retval = null, $environ = [], $limits = [] ) {
        return wfShellExec( $cmd, $retval, $environ, $limits,
@@ -2609,7 +2371,7 @@ function wfShellWikiCmd( $script, array $parameters = [], array $options = [] )
        }
        $cmd[] = $script;
        // Escape each parameter for shell
-       return wfEscapeShellArg( array_merge( $cmd, $parameters ) );
+       return Shell::escape( array_merge( $cmd, $parameters ) );
 }
 
 /**
@@ -2654,7 +2416,7 @@ function wfMerge( $old, $mine, $yours, &$result ) {
        fclose( $yourtextFile );
 
        # Check for a conflict
-       $cmd = wfEscapeShellArg( $wgDiff3, '-a', '--overlap-only', $mytextName,
+       $cmd = Shell::escape( $wgDiff3, '-a', '--overlap-only', $mytextName,
                $oldtextName, $yourtextName );
        $handle = popen( $cmd, 'r' );
 
@@ -2666,7 +2428,7 @@ function wfMerge( $old, $mine, $yours, &$result ) {
        pclose( $handle );
 
        # Merge differences
-       $cmd = wfEscapeShellArg( $wgDiff3, '-a', '-e', '--merge', $mytextName,
+       $cmd = Shell::escape( $wgDiff3, '-a', '-e', '--merge', $mytextName,
                $oldtextName, $yourtextName );
        $handle = popen( $cmd, 'r' );
        $result = '';
@@ -2730,7 +2492,7 @@ function wfDiff( $before, $after, $params = '-u' ) {
        fclose( $newtextFile );
 
        // Get the diff of the two files
-       $cmd = "$wgDiff " . $params . ' ' . wfEscapeShellArg( $oldtextName, $newtextName );
+       $cmd = "$wgDiff " . $params . ' ' . Shell::escape( $oldtextName, $newtextName );
 
        $h = popen( $cmd, 'r' );
        if ( !$h ) {
@@ -2781,6 +2543,9 @@ function wfDiff( $before, $after, $params = '-u' ) {
  * @see perldoc -f use
  *
  * @param string|int|float $req_ver The version to check, can be a string, an integer, or a float
+ *
+ * @deprecated since 1.30
+ *
  * @throws MWException
  */
 function wfUsePHP( $req_ver ) {
@@ -2809,7 +2574,7 @@ function wfUsePHP( $req_ver ) {
  *
  * @see perldoc -f use
  *
- * @deprecated since 1.26, use the "requires' property of extension.json
+ * @deprecated since 1.26, use the "requires" property of extension.json
  * @param string|int|float $req_ver The version to check, can be a string, an integer, or a float
  * @throws MWException
  */
@@ -2916,14 +2681,6 @@ function wfBaseConvert( $input, $sourceBase, $destBase, $pad = 1,
        return Wikimedia\base_convert( $input, $sourceBase, $destBase, $pad, $lowercase, $engine );
 }
 
-/**
- * @deprecated since 1.27, PHP's session generation isn't used with
- *  MediaWiki\Session\SessionManager
- */
-function wfFixSessionID() {
-       wfDeprecated( __FUNCTION__, '1.27' );
-}
-
 /**
  * Reset the session id
  *
@@ -3403,6 +3160,7 @@ function wfShorthandToInteger( $string = '', $default = -1 ) {
 /**
  * Get the normalised IETF language tag
  * See unit test for examples.
+ * See mediawiki.language.bcp47 for the JavaScript implementation.
  *
  * @param string $code The language code.
  * @return string The language code which complying with BCP 47 standards.
index f4f86be..c22dc97 100644 (file)
@@ -108,17 +108,89 @@ class Hooks {
                }
        }
 
+       /**
+        * @param string $event Event name
+        * @param array|callable $hook
+        * @param array $args Array of parameters passed to hook functions
+        * @param string|null $deprecatedVersion [optional]
+        * @param string &$fname [optional] Readable name of hook [returned]
+        * @return null|string|bool
+        */
+       private static function callHook( $event, $hook, array $args, $deprecatedVersion = null,
+               &$fname = null
+       ) {
+               // Turn non-array values into an array. (Can't use casting because of objects.)
+               if ( !is_array( $hook ) ) {
+                       $hook = [ $hook ];
+               }
+
+               if ( !array_filter( $hook ) ) {
+                       // Either array is empty or it's an array filled with null/false/empty.
+                       return null;
+               }
+
+               if ( is_array( $hook[0] ) ) {
+                       // First element is an array, meaning the developer intended
+                       // the first element to be a callback. Merge it in so that
+                       // processing can be uniform.
+                       $hook = array_merge( $hook[0], array_slice( $hook, 1 ) );
+               }
+
+               /**
+                * $hook can be: a function, an object, an array of $function and
+                * $data, an array of just a function, an array of object and
+                * method, or an array of object, method, and data.
+                */
+               if ( $hook[0] instanceof Closure ) {
+                       $fname = "hook-$event-closure";
+                       $callback = array_shift( $hook );
+               } elseif ( is_object( $hook[0] ) ) {
+                       $object = array_shift( $hook );
+                       $method = array_shift( $hook );
+
+                       // If no method was specified, default to on$event.
+                       if ( $method === null ) {
+                               $method = "on$event";
+                       }
+
+                       $fname = get_class( $object ) . '::' . $method;
+                       $callback = [ $object, $method ];
+               } elseif ( is_string( $hook[0] ) ) {
+                       $fname = $callback = array_shift( $hook );
+               } else {
+                       throw new MWException( 'Unknown datatype in hooks for ' . $event . "\n" );
+               }
+
+               // Run autoloader (workaround for call_user_func_array bug)
+               // and throw error if not callable.
+               if ( !is_callable( $callback ) ) {
+                       throw new MWException( 'Invalid callback ' . $fname . ' in hooks for ' . $event . "\n" );
+               }
+
+               // mark hook as deprecated, if deprecation version is specified
+               if ( $deprecatedVersion !== null ) {
+                       wfDeprecated( "$event hook (used in $fname)", $deprecatedVersion );
+               }
+
+               // Call the hook.
+               $hook_args = array_merge( $hook, $args );
+               return call_user_func_array( $callback, $hook_args );
+       }
+
        /**
         * Call hook functions defined in Hooks::register and $wgHooks.
         *
-        * For a certain hook event, fetch the array of hook events and
+        * For the given hook event, fetch the array of hook events and
         * process them. Determine the proper callback for each hook and
         * then call the actual hook using the appropriate arguments.
         * Finally, process the return value and return/throw accordingly.
         *
+        * For hook event that are not abortable through a handler's return value,
+        * use runWithoutAbort() instead.
+        *
         * @param string $event Event name
         * @param array $args Array of parameters passed to hook functions
-        * @param string|null $deprecatedVersion Optionally, mark hook as deprecated with version number
+        * @param string|null $deprecatedVersion [optional] Mark hook as deprecated with version number
         * @return bool True if no handler aborted the hook
         *
         * @throws Exception
@@ -130,61 +202,11 @@ class Hooks {
         */
        public static function run( $event, array $args = [], $deprecatedVersion = null ) {
                foreach ( self::getHandlers( $event ) as $hook ) {
-                       // Turn non-array values into an array. (Can't use casting because of objects.)
-                       if ( !is_array( $hook ) ) {
-                               $hook = [ $hook ];
-                       }
-
-                       if ( !array_filter( $hook ) ) {
-                               // Either array is empty or it's an array filled with null/false/empty.
+                       $retval = self::callHook( $event, $hook, $args, $deprecatedVersion );
+                       if ( $retval === null ) {
                                continue;
-                       } elseif ( is_array( $hook[0] ) ) {
-                               // First element is an array, meaning the developer intended
-                               // the first element to be a callback. Merge it in so that
-                               // processing can be uniform.
-                               $hook = array_merge( $hook[0], array_slice( $hook, 1 ) );
-                       }
-
-                       /**
-                        * $hook can be: a function, an object, an array of $function and
-                        * $data, an array of just a function, an array of object and
-                        * method, or an array of object, method, and data.
-                        */
-                       if ( $hook[0] instanceof Closure ) {
-                               $func = "hook-$event-closure";
-                               $callback = array_shift( $hook );
-                       } elseif ( is_object( $hook[0] ) ) {
-                               $object = array_shift( $hook );
-                               $method = array_shift( $hook );
-
-                               // If no method was specified, default to on$event.
-                               if ( $method === null ) {
-                                       $method = "on$event";
-                               }
-
-                               $func = get_class( $object ) . '::' . $method;
-                               $callback = [ $object, $method ];
-                       } elseif ( is_string( $hook[0] ) ) {
-                               $func = $callback = array_shift( $hook );
-                       } else {
-                               throw new MWException( 'Unknown datatype in hooks for ' . $event . "\n" );
-                       }
-
-                       // Run autoloader (workaround for call_user_func_array bug)
-                       // and throw error if not callable.
-                       if ( !is_callable( $callback ) ) {
-                               throw new MWException( 'Invalid callback ' . $func . ' in hooks for ' . $event . "\n" );
                        }
 
-                       // mark hook as deprecated, if deprecation version is specified
-                       if ( $deprecatedVersion !== null ) {
-                               wfDeprecated( "$event hook (used in $func)", $deprecatedVersion );
-                       }
-
-                       // Call the hook.
-                       $hook_args = array_merge( $hook, $args );
-                       $retval = call_user_func_array( $callback, $hook_args );
-
                        // Process the return value.
                        if ( is_string( $retval ) ) {
                                // String returned means error.
@@ -197,4 +219,26 @@ class Hooks {
 
                return true;
        }
+
+       /**
+        * Call hook functions defined in Hooks::register and $wgHooks.
+        *
+        * @param string $event Event name
+        * @param array $args Array of parameters passed to hook functions
+        * @param string|null $deprecatedVersion [optional] Mark hook as deprecated with version number
+        * @return bool Always true
+        * @throws MWException If a callback is invalid, unknown
+        * @throws UnexpectedValueException If a callback returns an abort value.
+        * @since 1.30
+        */
+       public static function runWithoutAbort( $event, array $args = [], $deprecatedVersion = null ) {
+               foreach ( self::getHandlers( $event ) as $hook ) {
+                       $fname = null;
+                       $retval = self::callHook( $event, $hook, $args, $deprecatedVersion, $fname );
+                       if ( $retval !== null && $retval !== true ) {
+                               throw new UnexpectedValueException( "Invalid return from $fname for unabortable $event." );
+                       }
+               }
+               return true;
+       }
 }
diff --git a/includes/Licenses.php b/includes/Licenses.php
deleted file mode 100644 (file)
index 6467777..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-<?php
-/**
- * License selector for use on Special:Upload.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- * http://www.gnu.org/copyleft/gpl.html
- *
- * @file
- * @ingroup SpecialPage
- * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
- * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
- * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
- */
-
-/**
- * A License class for use on Special:Upload
- */
-class Licenses extends HTMLFormField {
-       /** @var string */
-       protected $msg;
-
-       /** @var array */
-       protected $licenses = [];
-
-       /** @var string */
-       protected $html;
-       /**#@-*/
-
-       /**
-        * @param array $params
-        */
-       public function __construct( $params ) {
-               parent::__construct( $params );
-
-               $this->msg = empty( $params['licenses'] )
-                       ? wfMessage( 'licenses' )->inContentLanguage()->plain()
-                       : $params['licenses'];
-               $this->selected = null;
-
-               $this->makeLicenses();
-       }
-
-       /**
-        * @private
-        */
-       protected function makeLicenses() {
-               $levels = [];
-               $lines = explode( "\n", $this->msg );
-
-               foreach ( $lines as $line ) {
-                       if ( strpos( $line, '*' ) !== 0 ) {
-                               continue;
-                       } else {
-                               list( $level, $line ) = $this->trimStars( $line );
-
-                               if ( strpos( $line, '|' ) !== false ) {
-                                       $obj = new License( $line );
-                                       $this->stackItem( $this->licenses, $levels, $obj );
-                               } else {
-                                       if ( $level < count( $levels ) ) {
-                                               $levels = array_slice( $levels, 0, $level );
-                                       }
-                                       if ( $level == count( $levels ) ) {
-                                               $levels[$level - 1] = $line;
-                                       } elseif ( $level > count( $levels ) ) {
-                                               $levels[] = $line;
-                                       }
-                               }
-                       }
-               }
-       }
-
-       /**
-        * @param string $str
-        * @return array
-        */
-       protected function trimStars( $str ) {
-               $numStars = strspn( $str, '*' );
-               return [ $numStars, ltrim( substr( $str, $numStars ), ' ' ) ];
-       }
-
-       /**
-        * @param array &$list
-        * @param array $path
-        * @param mixed $item
-        */
-       protected function stackItem( &$list, $path, $item ) {
-               $position =& $list;
-               if ( $path ) {
-                       foreach ( $path as $key ) {
-                               $position =& $position[$key];
-                       }
-               }
-               $position[] = $item;
-       }
-
-       /**
-        * @param array $tagset
-        * @param int $depth
-        */
-       protected function makeHtml( $tagset, $depth = 0 ) {
-               foreach ( $tagset as $key => $val ) {
-                       if ( is_array( $val ) ) {
-                               $this->html .= $this->outputOption(
-                                       $key, '',
-                                       [
-                                               'disabled' => 'disabled',
-                                               'style' => 'color: GrayText', // for MSIE
-                                       ],
-                                       $depth
-                               );
-                               $this->makeHtml( $val, $depth + 1 );
-                       } else {
-                               $this->html .= $this->outputOption(
-                                       $val->text, $val->template,
-                                       [ 'title' => '{{' . $val->template . '}}' ],
-                                       $depth
-                               );
-                       }
-               }
-       }
-
-       /**
-        * @param string $message
-        * @param string $value
-        * @param null|array $attribs
-        * @param int $depth
-        * @return string
-        */
-       protected function outputOption( $message, $value, $attribs = null, $depth = 0 ) {
-               $msgObj = $this->msg( $message );
-               $text = $msgObj->exists() ? $msgObj->text() : $message;
-               $attribs['value'] = $value;
-               if ( $value === $this->selected ) {
-                       $attribs['selected'] = 'selected';
-               }
-
-               $val = str_repeat( /* &nbsp */ "\xc2\xa0", $depth * 2 ) . $text;
-               return str_repeat( "\t", $depth ) . Xml::element( 'option', $attribs, $val ) . "\n";
-       }
-
-       /**#@-*/
-
-       /**
-        *  Accessor for $this->licenses
-        *
-        * @return array
-        */
-       public function getLicenses() {
-               return $this->licenses;
-       }
-
-       /**
-        * Accessor for $this->html
-        *
-        * @param bool $value
-        *
-        * @return string
-        */
-       public function getInputHTML( $value ) {
-               $this->selected = $value;
-
-               $this->html = $this->outputOption( wfMessage( 'nolicense' )->text(), '',
-                       (bool)$this->selected ? null : [ 'selected' => 'selected' ] );
-               $this->makeHtml( $this->getLicenses() );
-
-               $attribs = [
-                       'name' => $this->mName,
-                       'id' => $this->mID
-               ];
-               if ( !empty( $this->mParams['disabled'] ) ) {
-                       $attibs['disabled'] = 'disabled';
-               }
-
-               return Html::rawElement( 'select', $attribs, $this->html );
-       }
-}
-
-/**
- * A License class for use on Special:Upload (represents a single type of license).
- */
-class License {
-       /** @var string */
-       public $template;
-
-       /** @var string */
-       public $text;
-
-       /**
-        * @param string $str License name??
-        */
-       function __construct( $str ) {
-               list( $text, $template ) = explode( '|', strrev( $str ), 2 );
-
-               $this->template = strrev( $template );
-               $this->text = strrev( $text );
-       }
-}
index aedb704..403b10a 100644 (file)
@@ -76,7 +76,7 @@ class Linker {
         * @since 1.18 Method exists since 1.16 as non-static, made static in 1.18.
         * @deprecated since 1.28, use MediaWiki\Linker\LinkRenderer instead
         *
-        * @param Title $target Can currently only be a Title, but this may
+        * @param LinkTarget $target Can currently only be a LinkTarget, but this may
         *   change to support Images, literal URLs, etc.
         * @param string $html The HTML contents of the <a> element, i.e.,
         *   the link text.  This is raw HTML and will not be escaped.  If null,
@@ -107,8 +107,8 @@ class Linker {
        public static function link(
                $target, $html = null, $customAttribs = [], $query = [], $options = []
        ) {
-               if ( !$target instanceof Title ) {
-                       wfWarn( __METHOD__ . ': Requires $target to be a Title object.', 2 );
+               if ( !$target instanceof LinkTarget ) {
+                       wfWarn( __METHOD__ . ': Requires $target to be a LinkTarget object.', 2 );
                        return "<!-- ERROR -->$html";
                }
 
@@ -1175,7 +1175,7 @@ class Linker {
                                                        $sectionTitle = Title::newFromText( '#' . $section );
                                                } else {
                                                        $sectionTitle = Title::makeTitleSafe( $title->getNamespace(),
-                                                               $title->getDBkey(), $section );
+                                                               $title->getDBkey(), Sanitizer::decodeCharReferences( $section ) );
                                                }
                                                if ( $sectionTitle ) {
                                                        $link = Linker::makeCommentLink( $sectionTitle, $wgLang->getArrow(), $wikiId, 'noclasses' );
@@ -1291,9 +1291,7 @@ class Linker {
                                                        if ( $target->getText() == '' && !$target->isExternal()
                                                                && !$local && $title
                                                        ) {
-                                                               $newTarget = clone $title;
-                                                               $newTarget->setFragment( '#' . $target->getFragment() );
-                                                               $target = $newTarget;
+                                                               $target = $title->createFragmentTarget( $target->getFragment() );
                                                        }
 
                                                        $thelink = Linker::makeCommentLink( $target, $linkText . $inside, $wikiId ) . $trail;
@@ -1321,7 +1319,7 @@ class Linker {
         *
         * @note This is only public for technical reasons. It's not intended for use outside Linker.
         *
-        * @param Title $title
+        * @param LinkTarget $linkTarget
         * @param string $text
         * @param string|null $wikiId Id of the wiki to link to (if not the local wiki),
         *  as used by WikiMap.
@@ -1330,23 +1328,23 @@ class Linker {
         * @return string HTML link
         */
        public static function makeCommentLink(
-               Title $title, $text, $wikiId = null, $options = []
+               LinkTarget $linkTarget, $text, $wikiId = null, $options = []
        ) {
-               if ( $wikiId !== null && !$title->isExternal() ) {
+               if ( $wikiId !== null && !$linkTarget->isExternal() ) {
                        $link = self::makeExternalLink(
                                WikiMap::getForeignURL(
                                        $wikiId,
-                                       $title->getNamespace() === 0
-                                               ? $title->getDBkey()
-                                               : MWNamespace::getCanonicalName( $title->getNamespace() ) . ':'
-                                                       . $title->getDBkey(),
-                                       $title->getFragment()
+                                       $linkTarget->getNamespace() === 0
+                                               ? $linkTarget->getDBkey()
+                                               : MWNamespace::getCanonicalName( $linkTarget->getNamespace() ) . ':'
+                                                       . $linkTarget->getDBkey(),
+                                       $linkTarget->getFragment()
                                ),
                                $text,
                                /* escape = */ false // Already escaped
                        );
                } else {
-                       $link = self::link( $title, $text, [], [], $options );
+                       $link = self::link( $linkTarget, $text, [], [], $options );
                }
 
                return $link;
@@ -1539,10 +1537,16 @@ class Linker {
                if ( $sectionIndex !== false ) {
                        $classes .= " tocsection-$sectionIndex";
                }
-               return "\n<li class=\"$classes\"><a href=\"#" .
-                       $anchor . '"><span class="tocnumber">' .
-                       $tocnumber . '</span> <span class="toctext">' .
-                       $tocline . '</span></a>';
+
+               // \n<li class="$classes"><a href="#$anchor"><span class="tocnumber">
+               // $tocnumber</span> <span class="toctext">$tocline</span></a>
+               return "\n" . Html::openElement( 'li', [ 'class' => $classes ] )
+                       . Html::rawElement( 'a',
+                               [ 'href' => "#$anchor" ],
+                               Html::element( 'span', [ 'class' => 'tocnumber' ], $tocnumber )
+                                       . ' '
+                                       . Html::rawElement( 'span', [ 'class' => 'toctext' ], $tocline )
+                       );
        }
 
        /**
index 7b59ee9..0f40c19 100644 (file)
@@ -712,10 +712,11 @@ class MediaWiki {
                        MWExceptionHandler::rollbackMasterChangesAndLog( $e );
                }
 
+               $blocksHttpClient = true;
                // Defer everything else if possible...
-               $callback = function () use ( $mode ) {
+               $callback = function () use ( $mode, &$blocksHttpClient ) {
                        try {
-                               $this->restInPeace( $mode );
+                               $this->restInPeace( $mode, $blocksHttpClient );
                        } catch ( Exception $e ) {
                                // If this is post-send, then displaying errors can cause broken HTML
                                MWExceptionHandler::rollbackMasterChangesAndLog( $e );
@@ -725,9 +726,11 @@ class MediaWiki {
                if ( function_exists( 'register_postsend_function' ) ) {
                        // https://github.com/facebook/hhvm/issues/1230
                        register_postsend_function( $callback );
+                       $blocksHttpClient = false;
                } else {
                        if ( function_exists( 'fastcgi_finish_request' ) ) {
                                fastcgi_finish_request();
+                               $blocksHttpClient = false;
                        } else {
                                // Either all DB and deferred updates should happen or none.
                                // The latter should not be cancelled due to client disconnect.
@@ -870,8 +873,9 @@ class MediaWiki {
        /**
         * Ends this task peacefully
         * @param string $mode Use 'fast' to always skip job running
+        * @param bool $blocksHttpClient Whether this blocks an HTTP response to a client
         */
-       public function restInPeace( $mode = 'fast' ) {
+       public function restInPeace( $mode = 'fast', $blocksHttpClient = true ) {
                $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
                // Assure deferred updates are not in the main transaction
                $lbFactory->commitMasterChanges( __METHOD__ );
@@ -887,8 +891,8 @@ class MediaWiki {
                // Important: this must be the last deferred update added (T100085, T154425)
                DeferredUpdates::addCallableUpdate( [ JobQueueGroup::class, 'pushLazyJobs' ] );
 
-               // Do any deferred jobs
-               DeferredUpdates::doUpdates( 'enqueue' );
+               // Do any deferred jobs; preferring to run them now if a client will not wait on them
+               DeferredUpdates::doUpdates( $blocksHttpClient ? 'enqueue' : 'run' );
 
                // Now that everything specific to this request is done,
                // try to occasionally run jobs (if enabled) from the queues
diff --git a/includes/OrderedStreamingForkController.php b/includes/OrderedStreamingForkController.php
new file mode 100644 (file)
index 0000000..ff29cb5
--- /dev/null
@@ -0,0 +1,216 @@
+<?php
+
+/**
+ * Reads lines of work from an input stream and farms them out to multiple
+ * child streams. Each child has exactly one piece of work in flight at a given
+ * moment. Writes the result of child's work to an output stream. If numProcs
+ * <= zero the work will be performed in process.
+ *
+ * This class amends ForkController with the requirement that the output is
+ * produced in the same exact order as input values were.
+ *
+ * Currently used by CirrusSearch extension to implement CLI search script.
+ *
+ * @ingroup Maintenance
+ * @since 1.30
+ *
+ * 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
+ */
+class OrderedStreamingForkController extends ForkController {
+       /** @var callable */
+       protected $workCallback;
+       /** @var resource */
+       protected $input;
+       /** @var resource */
+       protected $output;
+       /** @var int */
+       protected $nextOutputId;
+       /** @var string[] Int key indicates order, value is data */
+       protected $delayedOutputData = [];
+
+       /**
+        * @param int $numProcs The number of worker processes to fork
+        * @param callable $workCallback A callback to call in the child process
+        *  once for each line of work to process.
+        * @param resource $input A socket to read work lines from
+        * @param resource $output A socket to write the result of work to.
+        */
+       public function __construct( $numProcs, $workCallback, $input, $output ) {
+               parent::__construct( $numProcs );
+               $this->workCallback = $workCallback;
+               $this->input = $input;
+               $this->output = $output;
+       }
+
+       /**
+        * @inheritDoc
+        */
+       public function start() {
+               if ( $this->procsToStart > 0 ) {
+                       $status = parent::start();
+                       if ( $status === 'child' ) {
+                               $this->consume();
+                       }
+               } else {
+                       $status = 'parent';
+                       $this->consumeNoFork();
+               }
+               return $status;
+       }
+
+       /**
+        * @param int $numProcs
+        * @return string
+        */
+       protected function forkWorkers( $numProcs ) {
+               $this->prepareEnvironment();
+
+               $childSockets = [];
+               // Create the child processes
+               for ( $i = 0; $i < $numProcs; $i++ ) {
+                       $sockets = stream_socket_pair( STREAM_PF_UNIX, STREAM_SOCK_STREAM, STREAM_IPPROTO_IP );
+                       // Do the fork
+                       $pid = pcntl_fork();
+                       if ( $pid === -1 || $pid === false ) {
+                               echo "Error creating child processes\n";
+                               exit( 1 );
+                       }
+
+                       if ( !$pid ) {
+                               $this->initChild();
+                               $this->childNumber = $i;
+                               $this->input = $sockets[0];
+                               $this->output = $sockets[0];
+                               fclose( $sockets[1] );
+                               return 'child';
+                       } else {
+                               // This is the parent process
+                               $this->children[$pid] = true;
+                               fclose( $sockets[0] );
+                               $childSockets[] = $sockets[1];
+                       }
+               }
+               $this->feedChildren( $childSockets );
+               foreach ( $childSockets as $socket ) {
+                       // if a child has already shutdown the sockets will be closed,
+                       // closing a second time would raise a warning.
+                       if ( is_resource( $socket ) ) {
+                               fclose( $socket );
+                       }
+               }
+               return 'parent';
+       }
+
+       /**
+        * Child worker process. Reads work from $this->input and writes the
+        * result of that work to $this->output when completed.
+        */
+       protected function consume() {
+               while ( !feof( $this->input ) ) {
+                       $line = trim( fgets( $this->input ) );
+                       if ( $line ) {
+                               list( $id, $data ) = json_decode( $line );
+                               $result = call_user_func( $this->workCallback, $data );
+                               fwrite( $this->output, json_encode( [ $id, $result ] ) . "\n" );
+                       }
+               }
+       }
+
+       /**
+        * Special cased version of self::consume() when no forking occurs
+        */
+       protected function consumeNoFork() {
+               while ( !feof( $this->input ) ) {
+                       $line = trim( fgets( $this->input ) );
+                       if ( $line ) {
+                               $result = call_user_func( $this->workCallback, $line );
+                               fwrite( $this->output, "$result\n" );
+                       }
+               }
+       }
+
+       /**
+        * Reads lines of work from $this->input and farms them out to
+        * the provided socket.
+        *
+        * @param resource[] $sockets
+        */
+       protected function feedChildren( array $sockets ) {
+               $used = [];
+               $id = 0;
+               $this->nextOutputId = 0;
+
+               while ( !feof( $this->input ) ) {
+                       $data = fgets( $this->input );
+                       if ( $used ) {
+                               do {
+                                       $this->updateAvailableSockets( $sockets, $used, $sockets ? 0 : 5 );
+                               } while ( !$sockets );
+                       }
+                       $data = trim( $data );
+                       if ( !$data ) {
+                               continue;
+                       }
+                       $socket = array_pop( $sockets );
+                       fwrite( $socket, json_encode( [ $id++, $data ] ) . "\n" );
+                       $used[] = $socket;
+               }
+               while ( $used ) {
+                       $this->updateAvailableSockets( $sockets, $used, 5 );
+               }
+       }
+
+       /**
+        * Moves sockets from $used to $sockets when they are available
+        * for more work
+        *
+        * @param resource[] &$sockets List of sockets that are waiting for work
+        * @param resource[] &$used List of sockets currently performing work
+        * @param int $timeout The number of seconds to block waiting. 0 for
+        *  non-blocking operation.
+        */
+       protected function updateAvailableSockets( &$sockets, &$used, $timeout ) {
+               $read = $used;
+               $write = $except = [];
+               stream_select( $read, $write, $except, $timeout );
+               foreach ( $read as $socket ) {
+                       $line = fgets( $socket );
+                       list( $id, $data ) = json_decode( trim( $line ) );
+                       $this->receive( (int)$id, $data );
+                       $sockets[] = $socket;
+                       $idx = array_search( $socket, $used );
+                       unset( $used[$idx] );
+               }
+       }
+
+       /**
+        * @param int $id
+        * @param string $data
+        */
+       protected function receive( $id, $data ) {
+               if ( $id !== $this->nextOutputId ) {
+                       $this->delayedOutputData[$id] = $data;
+                       return;
+               }
+               fwrite( $this->output, $data . "\n" );
+               $this->nextOutputId = $id + 1;
+               while ( isset( $this->delayedOutputData[$this->nextOutputId] ) ) {
+                       fwrite( $this->output, $this->delayedOutputData[$this->nextOutputId] . "\n" );
+                       unset( $this->delayedOutputData[$this->nextOutputId] );
+                       $this->nextOutputId++;
+               }
+       }
+}
index dd21194..5216146 100644 (file)
@@ -139,6 +139,9 @@ class OutputPage extends ContextSource {
        /** @var array Array of elements in "<head>". Parser might add its own headers! */
        protected $mHeadItems = [];
 
+       /** @var array Additional <body> classes; there are also <body> classes from other sources */
+       protected $mAdditionalBodyClasses = [];
+
        /** @var array */
        protected $mModules = [];
 
@@ -705,6 +708,16 @@ class OutputPage extends ContextSource {
                return isset( $this->mHeadItems[$name] );
        }
 
+       /**
+        * Add a class to the <body> element
+        *
+        * @since 1.30
+        * @param string|string[] $classes One or more classes to add
+        */
+       public function addBodyClasses( $classes ) {
+               $this->mAdditionalBodyClasses = array_merge( $this->mAdditionalBodyClasses, (array)$classes );
+       }
+
        /**
         * @deprecated since 1.28 Obsolete - wgUseETag experiment was removed.
         * @param string $tag
@@ -2013,7 +2026,7 @@ class OutputPage extends ContextSource {
                }
 
                $age = time() - wfTimestamp( TS_UNIX, $mtime );
-               $adaptiveTTL = max( .9 * $age, $minTTL );
+               $adaptiveTTL = max( 0.9 * $age, $minTTL );
                $adaptiveTTL = min( $adaptiveTTL, $maxTTL );
 
                $this->lowerCdnMaxage( (int)$adaptiveTTL );
@@ -2923,7 +2936,7 @@ class OutputPage extends ContextSource {
 
                $pieces[] = Html::closeElement( 'head' );
 
-               $bodyClasses = [];
+               $bodyClasses = $this->mAdditionalBodyClasses;
                $bodyClasses[] = 'mediawiki';
 
                # Classes for LTR/RTL directionality support
index bd1b2a2..c3393bc 100644 (file)
@@ -228,6 +228,7 @@ class Pingback {
         *
         * The schema for the data is located at:
         * <https://meta.wikimedia.org/wiki/Schema:MediaWikiPingback>
+        * @return bool
         */
        public function sendPingback() {
                if ( !$this->acquireLock() ) {
index c64e8a8..a7e6684 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 /**
- * Form to edit user preferences.
- *
  * 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
@@ -556,6 +554,22 @@ class Preferences {
                                        'label-message' => 'tog-ccmeonemails',
                                        'disabled' => $disableEmailPrefs,
                                ];
+
+                               if ( $config->get( 'EnableUserEmailBlacklist' )
+                                        && !$disableEmailPrefs
+                                        && !(bool)$user->getOption( 'disablemail' )
+                               ) {
+                                       $lookup = CentralIdLookup::factory();
+                                       $ids = $user->getOption( 'email-blacklist', [] );
+                                       $names = $ids ? $lookup->namesFromCentralIds( $ids, $user ) : [];
+
+                                       $defaultPreferences['email-blacklist'] = [
+                                               'type' => 'usersmultiselect',
+                                               'label-message' => 'email-blacklist-label',
+                                               'section' => 'personal/email',
+                                               'default' => implode( "\n", $names ),
+                                       ];
+                               }
                        }
 
                        if ( $config->get( 'EnotifWatchlist' ) ) {
@@ -611,7 +625,6 @@ class Preferences {
                        $defaultPreferences['skin'] = [
                                'type' => 'radio',
                                'options' => $skinOptions,
-                               'label' => '&#160;',
                                'section' => 'rendering/skin',
                        ];
                }
@@ -681,7 +694,6 @@ class Preferences {
                        $defaultPreferences['date'] = [
                                'type' => 'radio',
                                'options' => $dateOptions,
-                               'label' => '&#160;',
                                'section' => 'rendering/dateformat',
                        ];
                }
@@ -958,6 +970,15 @@ class Preferences {
                                'label-message' => 'tog-shownumberswatching',
                        ];
                }
+
+               if ( $config->get( 'StructuredChangeFiltersShowPreference' ) ) {
+                       $defaultPreferences['rcenhancedfilters-disable'] = [
+                               'type' => 'toggle',
+                               'section' => 'rc/opt-out',
+                               'label-message' => 'rcfilters-preference-label',
+                               'help-message' => 'rcfilters-preference-help',
+                       ];
+               }
        }
 
        /**
@@ -1356,7 +1377,7 @@ class Preferences {
                $htmlForm->setSubmitText( $context->msg( 'saveprefs' )->text() );
                # Used message keys: 'accesskey-preferences-save', 'tooltip-preferences-save'
                $htmlForm->setSubmitTooltip( 'preferences-save' );
-               $htmlForm->setSubmitID( 'prefsubmit' );
+               $htmlForm->setSubmitID( 'prefcontrol' );
                $htmlForm->setSubmitCallback( [ 'Preferences', 'tryFormSubmit' ] );
 
                return $htmlForm;
@@ -1626,123 +1647,3 @@ class Preferences {
                return $timeZoneList;
        }
 }
-
-/** Some tweaks to allow js prefs to work */
-class PreferencesForm extends HTMLForm {
-       // Override default value from HTMLForm
-       protected $mSubSectionBeforeFields = false;
-
-       private $modifiedUser;
-
-       /**
-        * @param User $user
-        */
-       public function setModifiedUser( $user ) {
-               $this->modifiedUser = $user;
-       }
-
-       /**
-        * @return User
-        */
-       public function getModifiedUser() {
-               if ( $this->modifiedUser === null ) {
-                       return $this->getUser();
-               } else {
-                       return $this->modifiedUser;
-               }
-       }
-
-       /**
-        * Get extra parameters for the query string when redirecting after
-        * successful save.
-        *
-        * @return array
-        */
-       public function getExtraSuccessRedirectParameters() {
-               return [];
-       }
-
-       /**
-        * @param string $html
-        * @return string
-        */
-       function wrapForm( $html ) {
-               $html = Xml::tags( 'div', [ 'id' => 'preferences' ], $html );
-
-               return parent::wrapForm( $html );
-       }
-
-       /**
-        * @return string
-        */
-       function getButtons() {
-               $attrs = [ 'id' => 'mw-prefs-restoreprefs' ];
-
-               if ( !$this->getModifiedUser()->isAllowedAny( 'editmyprivateinfo', 'editmyoptions' ) ) {
-                       return '';
-               }
-
-               $html = parent::getButtons();
-
-               if ( $this->getModifiedUser()->isAllowed( 'editmyoptions' ) ) {
-                       $t = $this->getTitle()->getSubpage( 'reset' );
-
-                       $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
-                       $html .= "\n" . $linkRenderer->makeLink( $t, $this->msg( 'restoreprefs' )->text(),
-                               Html::buttonAttributes( $attrs, [ 'mw-ui-quiet' ] ) );
-
-                       $html = Xml::tags( 'div', [ 'class' => 'mw-prefs-buttons' ], $html );
-               }
-
-               return $html;
-       }
-
-       /**
-        * Separate multi-option preferences into multiple preferences, since we
-        * have to store them separately
-        * @param array $data
-        * @return array
-        */
-       function filterDataForSubmit( $data ) {
-               foreach ( $this->mFlatFields as $fieldname => $field ) {
-                       if ( $field instanceof HTMLNestedFilterable ) {
-                               $info = $field->mParams;
-                               $prefix = isset( $info['prefix'] ) ? $info['prefix'] : $fieldname;
-                               foreach ( $field->filterDataForSubmit( $data[$fieldname] ) as $key => $value ) {
-                                       $data["$prefix$key"] = $value;
-                               }
-                               unset( $data[$fieldname] );
-                       }
-               }
-
-               return $data;
-       }
-
-       /**
-        * Get the whole body of the form.
-        * @return string
-        */
-       function getBody() {
-               return $this->displaySection( $this->mFieldTree, '', 'mw-prefsection-' );
-       }
-
-       /**
-        * Get the "<legend>" for a given section key. Normally this is the
-        * prefs-$key message but we'll allow extensions to override it.
-        * @param string $key
-        * @return string
-        */
-       function getLegend( $key ) {
-               $legend = parent::getLegend( $key );
-               Hooks::run( 'PreferencesGetLegend', [ $this, $key, &$legend ] );
-               return $legend;
-       }
-
-       /**
-        * Get the keys of each top level preference section.
-        * @return array of section keys
-        */
-       function getPreferenceSections() {
-               return array_keys( array_filter( $this->mFieldTree, 'is_array' ) );
-       }
-}
index ed09701..a7f963a 100644 (file)
@@ -1203,8 +1203,6 @@ class Sanitizer {
                global $wgExperimentalHtmlIds;
                $options = (array)$options;
 
-               $id = self::decodeCharReferences( $id );
-
                if ( $wgExperimentalHtmlIds && !in_array( 'legacy', $options ) ) {
                        $id = preg_replace( '/[ \t\n\r\f_\'"&#%]+/', '_', $id );
                        $id = trim( $id, '_' );
@@ -1284,7 +1282,6 @@ class Sanitizer {
                $mode = $wgFragmentMode[self::ID_PRIMARY];
 
                $id = self::escapeIdInternal( $id, $mode );
-               $id = self::urlEscapeId( $id, $mode );
 
                return $id;
        }
@@ -1302,23 +1299,6 @@ class Sanitizer {
                global $wgExternalInterwikiFragmentMode;
 
                $id = self::escapeIdInternal( $id, $wgExternalInterwikiFragmentMode );
-               $id = self::urlEscapeId( $id, $wgExternalInterwikiFragmentMode );
-
-               return $id;
-       }
-
-       /**
-        * Helper for escapeIdFor*() functions. URL-escapes the ID if needed.
-        *
-        * @param string $id String to escape
-        * @param string $mode One of modes from $wgFragmentMode
-        * @return string
-        */
-       private static function urlEscapeId( $id, $mode ) {
-               if ( $mode === 'html5' ) {
-                       $id = urlencode( $id );
-                       $id = str_replace( '%3A', ':', $id );
-               }
 
                return $id;
        }
@@ -1331,8 +1311,6 @@ class Sanitizer {
         * @return string
         */
        private static function escapeIdInternal( $id, $mode ) {
-               $id = self::decodeCharReferences( $id );
-
                switch ( $mode ) {
                        case 'html5':
                                $id = str_replace( ' ', '_', $id );
index 2759ff9..2293dab 100644 (file)
@@ -38,6 +38,13 @@ class TemplateParser {
         */
        protected $forceRecompile = false;
 
+       /**
+        * @var int Compilation flags passed to LightnCandy
+        */
+       // Do not add more flags here without discussion.
+       // If you do add more flags, be sure to update unit tests as well.
+       protected $compileFlags = LightnCandy::FLAG_ERROR_EXCEPTION;
+
        /**
         * @param string $templateDir
         * @param bool $forceRecompile
@@ -47,6 +54,18 @@ class TemplateParser {
                $this->forceRecompile = $forceRecompile;
        }
 
+       /**
+        * Enable/disable the use of recursive partials.
+        * @param bool $enable
+        */
+       public function enableRecursivePartials( $enable ) {
+               if ( $enable ) {
+                       $this->compileFlags = $this->compileFlags | LightnCandy::FLAG_RUNTIMEPARTIAL;
+               } else {
+                       $this->compileFlags = $this->compileFlags & ~LightnCandy::FLAG_RUNTIMEPARTIAL;
+               }
+       }
+
        /**
         * Constructs the location of the the source Mustache template
         * @param string $templateName The name of the template
@@ -73,11 +92,13 @@ class TemplateParser {
         * @throws RuntimeException
         */
        protected function getTemplate( $templateName ) {
+               $templateKey = $templateName . '|' . $this->compileFlags;
+
                // If a renderer has already been defined for this template, reuse it
-               if ( isset( $this->renderers[$templateName] ) &&
-                       is_callable( $this->renderers[$templateName] )
+               if ( isset( $this->renderers[$templateKey] ) &&
+                       is_callable( $this->renderers[$templateKey] )
                ) {
-                       return $this->renderers[$templateName];
+                       return $this->renderers[$templateKey];
                }
 
                $filename = $this->getTemplateFilename( $templateName );
@@ -90,7 +111,7 @@ class TemplateParser {
                $fileContents = file_get_contents( $filename );
 
                // Generate a quick hash for cache invalidation
-               $fastHash = md5( $fileContents );
+               $fastHash = md5( $this->compileFlags . '|' . $fileContents );
 
                // Fetch a secret key for building a keyed hash of the PHP code
                $config = MediaWikiServices::getInstance()->getMainConfig();
@@ -127,7 +148,7 @@ class TemplateParser {
                if ( !is_callable( $renderer ) ) {
                        throw new RuntimeException( "Requested template, {$templateName}, is not callable" );
                }
-               $this->renderers[$templateName] = $renderer;
+               $this->renderers[$templateKey] = $renderer;
                return $renderer;
        }
 
@@ -168,9 +189,7 @@ class TemplateParser {
                return LightnCandy::compile(
                        $code,
                        [
-                               // Do not add more flags here without discussion.
-                               // If you do add more flags, be sure to update unit tests as well.
-                               'flags' => LightnCandy::FLAG_ERROR_EXCEPTION,
+                               'flags' => $this->compileFlags,
                                'basedir' => $this->templateDir,
                                'fileext' => '.mustache',
                        ]
index 0687a15..3da6ab9 100644 (file)
@@ -253,6 +253,9 @@ class Title implements LinkTarget {
         * Create a new Title from text, such as what one would find in a link. De-
         * codes any HTML entities in the text.
         *
+        * Title objects returned by this method are guaranteed to be valid, and
+        * thus return true from the isValid() method.
+        *
         * @param string|int|null $text The link text; spaces, prefixes, and an
         *   initial ':' indicating the main namespace are accepted.
         * @param int $defaultNamespace The namespace to use if none is specified
@@ -284,6 +287,9 @@ class Title implements LinkTarget {
         *
         * The exception subclasses encode detailed information about why the title is invalid.
         *
+        * Title objects returned by this method are guaranteed to be valid, and
+        * thus return true from the isValid() method.
+        *
         * @see Title::newFromText
         *
         * @since 1.25
@@ -500,10 +506,19 @@ class Title implements LinkTarget {
 
        /**
         * Create a new Title from a namespace index and a DB key.
-        * It's assumed that $ns and $title are *valid*, for instance when
-        * they came directly from the database or a special page name.
-        * For convenience, spaces are converted to underscores so that
-        * eg user_text fields can be used directly.
+        *
+        * It's assumed that $ns and $title are safe, for instance when
+        * they came directly from the database or a special page name,
+        * not from user input.
+        *
+        * No validation is applied. For convenience, spaces are normalized
+        * to underscores, so that e.g. user_text fields can be used directly.
+        *
+        * @note This method may return Title objects that are "invalid"
+        * according to the isValid() method. This is usually caused by
+        * configuration changes: e.g. a namespace that was once defined is
+        * no longer configured, or a character that was once allowed in
+        * titles is now forbidden.
         *
         * @param int $ns The namespace of the article
         * @param string $title The unprefixed database key form
@@ -529,6 +544,10 @@ class Title implements LinkTarget {
         * The parameters will be checked for validity, which is a bit slower
         * than makeTitle() but safer for user-provided data.
         *
+        * Title objects returned by makeTitleSafe() are guaranteed to be valid,
+        * that is, they return true from the isValid() method. If no valid Title
+        * can be constructed from the input, this method returns null.
+        *
         * @param int $ns The namespace of the article
         * @param string $title Database key form
         * @param string $fragment The link fragment (after the "#")
@@ -536,6 +555,9 @@ class Title implements LinkTarget {
         * @return Title|null The new object, or null on an error
         */
        public static function makeTitleSafe( $ns, $title, $fragment = '', $interwiki = '' ) {
+               // NOTE: ideally, this would just call makeTitle() and then isValid(),
+               // but presently, that means more overhead on a potential performance hotspot.
+
                if ( !MWNamespace::exists( $ns ) ) {
                        return null;
                }
@@ -777,6 +799,36 @@ class Title implements LinkTarget {
                }
        }
 
+       /**
+        * Returns true if the title is valid, false if it is invalid.
+        *
+        * Valid titles can be round-tripped via makeTitleSafe() and newFromText().
+        * Invalid titles may get returned from makeTitle(), and it may be useful to
+        * allow them to exist, e.g. in order to process log entries about pages in
+        * namespaces that belong to extensions that are no longer installed.
+        *
+        * @note This method is relatively expensive. When constructing Title
+        * objects that need to be valid, use an instantiator method that is guaranteed
+        * to return valid titles, such as makeTitleSafe() or newFromText().
+        *
+        * @return bool
+        */
+       public function isValid() {
+               $ns = $this->getNamespace();
+
+               if ( !MWNamespace::exists( $ns ) ) {
+                       return false;
+               }
+
+               try {
+                       $parser = MediaWikiServices::getInstance()->getTitleParser();
+                       $parser->parseTitle( $this->getDBkey(), $ns );
+                       return true;
+               } catch ( MalformedTitleException $ex ) {
+                       return false;
+               }
+       }
+
        /**
         * Determine whether the object refers to a page within
         * this project (either this wiki or a wiki with a local
@@ -1356,7 +1408,7 @@ class Title implements LinkTarget {
         * get the talk page, if it is a subject page get the talk page
         *
         * @since 1.25
-        * @throws MWException
+        * @throws MWException If the page doesn't have an other page
         * @return Title
         */
        public function getOtherPage() {
@@ -1366,6 +1418,9 @@ class Title implements LinkTarget {
                if ( $this->isTalkPage() ) {
                        return $this->getSubjectPage();
                } else {
+                       if ( !$this->canHaveTalkPage() ) {
+                               throw new MWException( "{$this->getPrefixedText()} does not have an other page" );
+                       }
                        return $this->getTalkPage();
                }
        }
@@ -1742,7 +1797,7 @@ class Title implements LinkTarget {
         * @see self::getLocalURL for the arguments.
         * @param array|string $query
         * @param string $proto Protocol type to use in URL
-        * @return String. A url suitable to use in an HTTP location header.
+        * @return string A url suitable to use in an HTTP location header.
         */
        public function getFullUrlForRedirect( $query = '', $proto = PROTO_CURRENT ) {
                $target = $this;
@@ -1920,6 +1975,8 @@ class Title implements LinkTarget {
         * NOTE: Unlike getInternalURL(), the canonical URL includes the fragment
         *
         * @see self::getLocalURL for the arguments.
+        * @param string $query
+        * @param string|bool $query2
         * @return string The URL
         * @since 1.18
         */
index 16a5a9d..0091513 100644 (file)
@@ -493,7 +493,8 @@ class Xml {
        }
 
        /**
-        * Build a drop-down box from a textual list.
+        * Build a drop-down box from a textual list. This is a wrapper
+        * for Xml::listDropDownOptions() plus the XmlSelect class.
         *
         * @param string $name Name and id for the drop-down
         * @param string $list Correctly formatted text (newline delimited) to be
@@ -507,60 +508,91 @@ class Xml {
        public static function listDropDown( $name = '', $list = '', $other = '',
                $selected = '', $class = '', $tabindex = null
        ) {
-               $optgroup = false;
+               $options = self::listDropDownOptions( $list, [ 'other' => $other ] );
+
+               $xmlSelect = new XmlSelect( $name, $name, $selected );
+               $xmlSelect->addOptions( $options );
+
+               if ( $class ) {
+                       $xmlSelect->setAttribute( 'class', $class );
+               }
+               if ( $tabindex ) {
+                       $xmlSelect->setAttribute( 'tabindex', $tabindex );
+               }
 
-               $options = self::option( $other, 'other', $selected === 'other' );
+               return $xmlSelect->getHTML();
+       }
 
+       /**
+        * Build options for a drop-down box from a textual list.
+        *
+        * The result of this function can be passed to XmlSelect::addOptions()
+        * (to render a plain `<select>` dropdown box) or to Xml::listDropDownOptionsOoui()
+        * and then OOUI\DropdownInputWidget() (to render a pretty one).
+        *
+        * @param string $list Correctly formatted text (newline delimited) to be
+        *   used to generate the options.
+        * @param array $params Extra parameters
+        * @param string $params['other'] If set, add an option with this as text and a value of 'other'
+        * @return array Array keys are textual labels, values are internal values
+        */
+       public static function listDropDownOptions( $list, $params = [] ) {
+               $options = [];
+
+               if ( isset( $params['other'] ) ) {
+                       $options[ $params['other'] ] = 'other';
+               }
+
+               $optgroup = false;
                foreach ( explode( "\n", $list ) as $option ) {
                        $value = trim( $option );
                        if ( $value == '' ) {
                                continue;
                        } elseif ( substr( $value, 0, 1 ) == '*' && substr( $value, 1, 1 ) != '*' ) {
-                               // A new group is starting ...
+                               # A new group is starting...
                                $value = trim( substr( $value, 1 ) );
-                               if ( $optgroup ) {
-                                       $options .= self::closeElement( 'optgroup' );
-                               }
-                               $options .= self::openElement( 'optgroup', [ 'label' => $value ] );
-                               $optgroup = true;
+                               $optgroup = $value;
                        } elseif ( substr( $value, 0, 2 ) == '**' ) {
-                               // groupmember
-                               $value = trim( substr( $value, 2 ) );
-                               $options .= self::option( $value, $value, $selected === $value );
-                       } else {
-                               // groupless reason list
-                               if ( $optgroup ) {
-                                       $options .= self::closeElement( 'optgroup' );
+                               # groupmember
+                               $opt = trim( substr( $value, 2 ) );
+                               if ( $optgroup === false ) {
+                                       $options[$opt] = $opt;
+                               } else {
+                                       $options[$optgroup][$opt] = $opt;
                                }
-                               $options .= self::option( $value, $value, $selected === $value );
+                       } else {
+                               # groupless reason list
                                $optgroup = false;
+                               $options[$option] = $option;
                        }
                }
 
-               if ( $optgroup ) {
-                       $options .= self::closeElement( 'optgroup' );
-               }
-
-               $attribs = [];
-
-               if ( $name ) {
-                       $attribs['id'] = $name;
-                       $attribs['name'] = $name;
-               }
+               return $options;
+       }
 
-               if ( $class ) {
-                       $attribs['class'] = $class;
-               }
+       /**
+        * Convert options for a drop-down box into a format accepted by OOUI\DropdownInputWidget etc.
+        *
+        * TODO Find a better home for this function.
+        *
+        * @param array $options Options, as returned e.g. by Xml::listDropDownOptions()
+        * @return array
+        */
+       public static function listDropDownOptionsOoui( $options ) {
+               $optionsOoui = [];
 
-               if ( $tabindex ) {
-                       $attribs['tabindex'] = $tabindex;
+               foreach ( $options as $text => $value ) {
+                       if ( is_array( $value ) ) {
+                               $optionsOoui[] = [ 'optgroup' => (string)$text ];
+                               foreach ( $value as $text2 => $value2 ) {
+                                       $optionsOoui[] = [ 'data' => (string)$value2, 'label' => (string)$text2 ];
+                               }
+                       } else {
+                               $optionsOoui[] = [ 'data' => (string)$value, 'label' => (string)$text ];
+                       }
                }
 
-               return self::openElement( 'select', $attribs )
-                       . "\n"
-                       . $options
-                       . "\n"
-                       . self::closeElement( 'select' );
+               return $optionsOoui;
        }
 
        /**
index 35a0607..1b90a1f 100644 (file)
@@ -26,7 +26,7 @@
  * @par Example:
  * @code
  *     Xml::encodeJsVar( new XmlJsCode( 'a + b' ) );
- * @encode
+ * @endcode
  *
  * This returns "a + b".
  *
index 7460340..fe84852 100644 (file)
@@ -192,27 +192,26 @@ class HistoryAction extends FormlessAction {
 
                // Add the general form
                $action = htmlspecialchars( wfScript() );
+               $content = Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n";
+               $content .= Html::hidden( 'action', 'history' ) . "\n";
+               $content .= Xml::dateMenu(
+                       ( $year == null ? MWTimestamp::getLocalInstance()->format( 'Y' ) : $year ),
+                       $month
+               ) . '&#160;';
+               $content .= $tagSelector ? ( implode( '&#160;', $tagSelector ) . '&#160;' ) : '';
+               $content .= $checkDeleted . Html::submitButton(
+                       $this->msg( 'historyaction-submit' )->text(),
+                       [],
+                       [ 'mw-ui-progressive' ]
+               );
                $out->addHTML(
                        "<form action=\"$action\" method=\"get\" id=\"mw-history-searchform\">" .
                        Xml::fieldset(
                                $this->msg( 'history-fieldset-title' )->text(),
-                               false,
+                               $content,
                                [ 'id' => 'mw-history-search' ]
                        ) .
-                       Html::hidden( 'title', $this->getTitle()->getPrefixedDBkey() ) . "\n" .
-                       Html::hidden( 'action', 'history' ) . "\n" .
-                       Xml::dateMenu(
-                               ( $year == null ? MWTimestamp::getLocalInstance()->format( 'Y' ) : $year ),
-                               $month
-                       ) . '&#160;' .
-                       ( $tagSelector ? ( implode( '&#160;', $tagSelector ) . '&#160;' ) : '' ) .
-                       $checkDeleted .
-                       Html::submitButton(
-                               $this->msg( 'historyaction-submit' )->text(),
-                               [],
-                               [ 'mw-ui-progressive' ]
-                       ) . "\n" .
-                       '</fieldset></form>'
+                       '</form>'
                );
 
                Hooks::run( 'PageHistoryBeforeList', [ &$this->page, $this->getContext() ] );
index d3ba0aa..c5cd89f 100644 (file)
@@ -153,6 +153,7 @@ class InfoAction extends FormlessAction {
         * Creates a header that can be added to the output.
         *
         * @param string $header The header text.
+        * @param string $canonicalId
         * @return string The HTML.
         */
        protected function makeHeader( $header, $canonicalId ) {
index 611e683..66bedb2 100644 (file)
@@ -85,6 +85,7 @@ class MarkpatrolledAction extends FormAction {
        }
 
        /**
+        * @param array $data
         * @return bool|array True for success, false for didn't-try, array of errors on failure
         */
        public function onSubmit( $data ) {
index a4631d6..0df0ca9 100644 (file)
@@ -216,6 +216,7 @@ class ApiCSPReport extends ApiBase {
 
        /**
         * Mark as internal. This isn't meant to be used by normal api users
+        * @return bool
         */
        public function isInternal() {
                return true;
@@ -223,6 +224,7 @@ class ApiCSPReport extends ApiBase {
 
        /**
         * Even if you don't have read rights, we still want your report.
+        * @return bool
         */
        public function isReadMode() {
                return false;
@@ -232,6 +234,7 @@ class ApiCSPReport extends ApiBase {
         * Doesn't touch db, so max lag should be rather irrelavent.
         *
         * Also, this makes sure that reports aren't lost during lag events.
+        * @return bool
         */
        public function shouldCheckMaxLag() {
                return false;
index 4b4b76b..edea266 100644 (file)
@@ -34,7 +34,7 @@ class ApiEmailUser extends ApiBase {
                $params = $this->extractRequestParams();
 
                // Validate target
-               $targetUser = SpecialEmailUser::getTarget( $params['target'] );
+               $targetUser = SpecialEmailUser::getTarget( $params['target'], $this->getUser() );
                if ( !( $targetUser instanceof User ) ) {
                        switch ( $targetUser ) {
                                case 'notarget':
index e15d7da..7c86e09 100644 (file)
@@ -41,6 +41,15 @@ class ApiExpandTemplates extends ApiBase {
                $params = $this->extractRequestParams();
                $this->requireMaxOneParameter( $params, 'prop', 'generatexml' );
 
+               $title = $params['title'];
+               if ( $title === null ) {
+                       $titleProvided = false;
+                       // A title is needed for parsing, so arbitrarily choose one
+                       $title = 'API';
+               } else {
+                       $titleProvided = true;
+               }
+
                if ( $params['prop'] === null ) {
                        $this->addDeprecation(
                                'apiwarn-deprecation-expandtemplates-prop', 'action=expandtemplates&!prop'
@@ -50,6 +59,11 @@ class ApiExpandTemplates extends ApiBase {
                        $prop = array_flip( $params['prop'] );
                }
 
+               $titleObj = Title::newFromText( $title );
+               if ( !$titleObj || $titleObj->isExternal() ) {
+                       $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+               }
+
                // Get title and revision ID for parser
                $revid = $params['revid'];
                if ( $revid !== null ) {
@@ -57,11 +71,17 @@ class ApiExpandTemplates extends ApiBase {
                        if ( !$rev ) {
                                $this->dieWithError( [ 'apierror-nosuchrevid', $revid ] );
                        }
-                       $title_obj = $rev->getTitle();
-               } else {
-                       $title_obj = Title::newFromText( $params['title'] );
-                       if ( !$title_obj || $title_obj->isExternal() ) {
-                               $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $params['title'] ) ] );
+                       $pTitleObj = $titleObj;
+                       $titleObj = $rev->getTitle();
+                       if ( $titleProvided ) {
+                               if ( !$titleObj->equals( $pTitleObj ) ) {
+                                       $this->addWarning( [ 'apierror-revwrongpage', $rev->getId(),
+                                               wfEscapeWikiText( $pTitleObj->getPrefixedText() ) ] );
+                               }
+                       } else {
+                               // Consider the title derived from the revid as having
+                               // been provided.
+                               $titleProvided = true;
                        }
                }
 
@@ -78,12 +98,12 @@ class ApiExpandTemplates extends ApiBase {
                $reset = null;
                $suppressCache = false;
                Hooks::run( 'ApiMakeParserOptions',
-                       [ $options, $title_obj, $params, $this, &$reset, &$suppressCache ] );
+                       [ $options, $titleObj, $params, $this, &$reset, &$suppressCache ] );
 
                $retval = [];
 
                if ( isset( $prop['parsetree'] ) || $params['generatexml'] ) {
-                       $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
+                       $wgParser->startExternalParse( $titleObj, $options, Parser::OT_PREPROCESS );
                        $dom = $wgParser->preprocessToDom( $params['text'] );
                        if ( is_callable( [ $dom, 'saveXML' ] ) ) {
                                $xml = $dom->saveXML();
@@ -103,9 +123,9 @@ class ApiExpandTemplates extends ApiBase {
                // if they didn't want any output except (probably) the parse tree,
                // then don't bother actually fully expanding it
                if ( $prop || $params['prop'] === null ) {
-                       $wgParser->startExternalParse( $title_obj, $options, Parser::OT_PREPROCESS );
+                       $wgParser->startExternalParse( $titleObj, $options, Parser::OT_PREPROCESS );
                        $frame = $wgParser->getPreprocessor()->newFrame();
-                       $wikitext = $wgParser->preprocess( $params['text'], $title_obj, $options, $revid, $frame );
+                       $wikitext = $wgParser->preprocess( $params['text'], $titleObj, $options, $revid, $frame );
                        if ( $params['prop'] === null ) {
                                // the old way
                                ApiResult::setContentValue( $retval, 'wikitext', $wikitext );
@@ -169,9 +189,7 @@ class ApiExpandTemplates extends ApiBase {
 
        public function getAllowedParams() {
                return [
-                       'title' => [
-                               ApiBase::PARAM_DFLT => 'API',
-                       ],
+                       'title' => null,
                        'text' => [
                                ApiBase::PARAM_TYPE => 'text',
                                ApiBase::PARAM_REQUIRED => true,
index b7c5ccc..e3a757f 100644 (file)
@@ -167,7 +167,7 @@ class ApiFeedWatchlist extends ApiBase {
                                        // Something is seriously wrong
                                        $errorCode = 'internal_api_error';
                                }
-                               $errorTitle = $this->msg( 'api-feed-error-title', $msg->getApiCode() );
+                               $errorTitle = $this->msg( 'api-feed-error-title', $errorCode );
                                $errorText = $e->getMessage();
                                $feedItems[] = new FeedItem( $errorTitle, $errorText, '', '', '' );
                        }
index 36247dd..06eaa19 100644 (file)
@@ -132,6 +132,7 @@ abstract class ApiFormatBase extends ApiBase {
 
        /**
         * Overridden to honor $this->forceDefaultParams(), if applicable
+        * @inheritDoc
         * @since 1.26
         */
        protected function getParameterFromSettings( $paramName, $paramSettings, $parseLimit ) {
index d2bfd48..3ab5ab9 100644 (file)
@@ -72,6 +72,7 @@ class ApiFormatFeedWrapper extends ApiFormatBase {
         * This class expects the result data to be in a custom format set by self::setResult()
         * $result['_feed'] - an instance of one of the $wgFeedClasses classes
         * $result['_feeditems'] - an array of FeedItem instances
+        * @param bool $unused
         */
        public function initPrinter( $unused = false ) {
                parent::initPrinter( $unused );
index e69300b..1415640 100644 (file)
@@ -1870,7 +1870,7 @@ class ApiMain extends ApiBase {
                ];
        }
 
-       /** @see ApiBase::getExamplesMessages() */
+       /** @inheritDoc */
        protected function getExamplesMessages() {
                return [
                        'action=help'
index 031fbf7..7cbd353 100644 (file)
@@ -48,10 +48,11 @@ class ApiParse extends ApiBase {
                // Get parameters
                $params = $this->extractRequestParams();
 
-               // No easy way to say that text & title are allowed together while the
-               // rest aren't, so just do it in two calls.
+               // No easy way to say that text and title or revid are allowed together
+               // while the rest aren't, so just do it in three calls.
                $this->requireMaxOneParameter( $params, 'page', 'pageid', 'oldid', 'text' );
                $this->requireMaxOneParameter( $params, 'page', 'pageid', 'oldid', 'title' );
+               $this->requireMaxOneParameter( $params, 'page', 'pageid', 'oldid', 'revid' );
 
                $text = $params['text'];
                $title = $params['title'];
@@ -169,6 +170,25 @@ class ApiParse extends ApiBase {
                        if ( !$titleObj || $titleObj->isExternal() ) {
                                $this->dieWithError( [ 'apierror-invalidtitle', wfEscapeWikiText( $title ) ] );
                        }
+                       $revid = $params['revid'];
+                       if ( $revid !== null ) {
+                               $rev = Revision::newFromId( $revid );
+                               if ( !$rev ) {
+                                       $this->dieWithError( [ 'apierror-nosuchrevid', $revid ] );
+                               }
+                               $pTitleObj = $titleObj;
+                               $titleObj = $rev->getTitle();
+                               if ( $titleProvided ) {
+                                       if ( !$titleObj->equals( $pTitleObj ) ) {
+                                               $this->addWarning( [ 'apierror-revwrongpage', $rev->getId(),
+                                                       wfEscapeWikiText( $pTitleObj->getPrefixedText() ) ] );
+                                       }
+                               } else {
+                                       // Consider the title derived from the revid as having
+                                       // been provided.
+                                       $titleProvided = true;
+                               }
+                       }
                        $wgTitle = $titleObj;
                        if ( $titleObj->canExist() ) {
                                $pageObj = WikiPage::factory( $titleObj );
@@ -183,7 +203,11 @@ class ApiParse extends ApiBase {
 
                        if ( !$textProvided ) {
                                if ( $titleProvided && ( $prop || $params['generatexml'] ) ) {
-                                       $this->addWarning( 'apiwarn-parse-titlewithouttext' );
+                                       if ( $revid !== null ) {
+                                               $this->addWarning( 'apiwarn-parse-revidwithouttext' );
+                                       } else {
+                                               $this->addWarning( 'apiwarn-parse-titlewithouttext' );
+                                       }
                                }
                                // Prevent warning from ContentHandler::makeContent()
                                $text = '';
@@ -247,9 +271,9 @@ class ApiParse extends ApiBase {
 
                        // Not cached (save or load)
                        if ( $params['pst'] ) {
-                               $p_result = $this->pstContent->getParserOutput( $titleObj, null, $popts );
+                               $p_result = $this->pstContent->getParserOutput( $titleObj, $revid, $popts );
                        } else {
-                               $p_result = $this->content->getParserOutput( $titleObj, null, $popts );
+                               $p_result = $this->content->getParserOutput( $titleObj, $revid, $popts );
                        }
                }
 
@@ -785,6 +809,9 @@ class ApiParse extends ApiBase {
                        'text' => [
                                ApiBase::PARAM_TYPE => 'text',
                        ],
+                       'revid' => [
+                               ApiBase::PARAM_TYPE => 'integer',
+                       ],
                        'summary' => null,
                        'page' => null,
                        'pageid' => [
index 83227a2..35f93e0 100644 (file)
@@ -25,6 +25,7 @@
  * @file
  */
 use MediaWiki\Logger\LoggerFactory;
+use MediaWiki\MediaWikiServices;
 
 /**
  * API interface for page purging
@@ -98,7 +99,7 @@ class ApiPurge extends ApiBase {
                                                $r['linkupdate'] = true;
 
                                                if ( $enableParserCache ) {
-                                                       $pcache = ParserCache::singleton();
+                                                       $pcache = MediaWikiServices::getInstance()->getParserCache();
                                                        $pcache->save( $p_result, $page, $popts );
                                                }
                                        }
index 987bb99..44a46b8 100644 (file)
@@ -169,7 +169,7 @@ class ApiQuery extends ApiBase {
         * as the first, regardless of the values of $db and $groups
         * @param string $name Name to assign to the database connection
         * @param int $db One of the DB_* constants
-        * @param array $groups Query groups
+        * @param string|string[] $groups Query groups
         * @return IDatabase
         */
        public function getNamedDB( $name, $db, $groups ) {
index fe16134..6987dfb 100644 (file)
@@ -97,9 +97,7 @@ abstract class ApiQueryBase extends ApiBase {
                return $this->mQueryModule;
        }
 
-       /**
-        * @see ApiBase::getParent()
-        */
+       /** @inheritDoc */
        public function getParent() {
                return $this->getQuery();
        }
@@ -121,7 +119,7 @@ abstract class ApiQueryBase extends ApiBase {
         * See ApiQuery::getNamedDB() for more information
         * @param string $name Name to assign to the database connection
         * @param int $db One of the DB_* constants
-        * @param array $groups Query groups
+        * @param string|string[] $groups Query groups
         * @return IDatabase
         */
        public function selectNamedDB( $name, $db, $groups ) {
index f7b94c7..5acd75f 100644 (file)
@@ -93,12 +93,9 @@ abstract class ApiQueryGeneratorBase extends ApiQueryBase {
                }
        }
 
-       /**
-        * @see ApiBase::getHelpFlags()
-        *
-        * Corresponding messages: api-help-flag-generator
-        */
+       /** @inheritDoc */
        protected function getHelpFlags() {
+               // Corresponding messages: api-help-flag-generator
                $flags = parent::getHelpFlags();
                $flags[] = 'generator';
                return $flags;
index d29a763..4b34091 100644 (file)
@@ -137,7 +137,6 @@ class ApiQueryLinks extends ApiQueryGeneratorBase {
 
                $order[] = $this->prefix . '_title' . $sort;
                $this->addOption( 'ORDER BY', $order );
-               $this->addOption( 'USE INDEX', [ $this->table => 'PRIMARY' ] );
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
 
                $res = $this->select( __METHOD__ );
index 9af4e3e..63e0748 100644 (file)
@@ -287,14 +287,6 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                        );
                        $showRedirects = $this->fld_redirect || isset( $show['redirect'] )
                                || isset( $show['!redirect'] );
-
-                       if ( $this->fld_comment || $this->fld_parsedcomment ) {
-                               $this->commentStore = new CommentStore( 'rc_comment' );
-                               $commentQuery = $this->commentStore->getJoin();
-                               $this->addTables( $commentQuery['tables'] );
-                               $this->addFields( $commentQuery['fields'] );
-                               $this->addJoinConds( $commentQuery['joins'] );
-                       }
                }
                $this->addFieldsIf( [ 'rc_this_oldid' ],
                        $resultPageSet && $params['generaterevisions'] );
@@ -360,6 +352,15 @@ class ApiQueryRecentChanges extends ApiQueryGeneratorBase {
                }
 
                $this->token = $params['token'];
+
+               if ( $this->fld_comment || $this->fld_parsedcomment || $this->token ) {
+                       $this->commentStore = new CommentStore( 'rc_comment' );
+                       $commentQuery = $this->commentStore->getJoin();
+                       $this->addTables( $commentQuery['tables'] );
+                       $this->addFields( $commentQuery['fields'] );
+                       $this->addJoinConds( $commentQuery['joins'] );
+               }
+
                $this->addOption( 'LIMIT', $params['limit'] + 1 );
 
                $hookData = [];
index 2ab8524..1e3b2c7 100644 (file)
@@ -34,6 +34,7 @@ use MediaWiki\MediaWikiServices;
  */
 class ApiQueryWatchlist extends ApiQueryGeneratorBase {
 
+       /** @var CommentStore */
        private $commentStore;
 
        public function __construct( ApiQuery $query, $moduleName ) {
@@ -260,10 +261,7 @@ class ApiQueryWatchlist extends ApiQueryGeneratorBase {
 
        private function extractOutputData( WatchedItem $watchedItem, array $recentChangeInfo ) {
                /* Determine the title of the page that has been changed. */
-               $title = Title::makeTitle(
-                       $watchedItem->getLinkTarget()->getNamespace(),
-                       $watchedItem->getLinkTarget()->getDBkey()
-               );
+               $title = Title::newFromLinkTarget( $watchedItem->getLinkTarget() );
                $user = $this->getUser();
 
                /* Our output data. */
index d03fca8..8a9de06 100644 (file)
@@ -74,6 +74,9 @@ class ApiStashEdit extends ApiBase {
                if ( strlen( $params['stashedtexthash'] ) ) {
                        // Load from cache since the client indicates the text is the same as last stash
                        $textHash = $params['stashedtexthash'];
+                       if ( !preg_match( '/^[0-9a-f]{40}$/', $textHash ) ) {
+                               $this->dieWithError( 'apierror-stashedit-missingtext', 'missingtext' );
+                       }
                        $textKey = $cache->makeKey( 'stashedit', 'text', $textHash );
                        $text = $cache->get( $textKey );
                        if ( !is_string( $text ) ) {
index 17655ec..47902a7 100644 (file)
@@ -152,7 +152,7 @@ class ApiUsageException extends UsageException implements ILocalizedException {
        }
 
        /**
-        * @returns ApiMessage
+        * @return ApiMessage
         */
        private function getApiMessage() {
                $errors = $this->status->getErrorsByType( 'error' );
index 6b2a2b7..6d7fea2 100644 (file)
        "apihelp-expandtemplates-summary": "يوسع كافة القوالب ضمن نصوص الويكي.",
        "apihelp-expandtemplates-param-title": "عنوان الصفحة.",
        "apihelp-expandtemplates-param-text": "نص ويكي للتحويل.",
-       "apihelp-expandtemplates-param-revid": "معرف المراجعة، ل<nowiki>{{REVISIONID}}</nowiki> والمتغيرات مماثلة.",
+       "apihelp-expandtemplates-param-revid": "معرف المراجعة، ل<code><nowiki>{{REVISIONID}}</nowiki></code> والمتغيرات مماثلة.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "نص الويكي الموسع",
        "apihelp-expandtemplates-paramvalue-prop-properties": "خصائص الصفحة التي تحددها الكلمات السحرية الموسعة في نص الويكي.",
        "apihelp-expandtemplates-paramvalue-prop-volatile": "إذا كان الإخراج سريع التأثر، ينبغي عدم استخدامه في أي مكان آخر داخل الصفحة.",
index a9e4ccd..da8535d 100644 (file)
        "apihelp-expandtemplates-summary": "wikitext ҡалыптарын аса.",
        "apihelp-expandtemplates-param-title": "Бит баш һүҙе",
        "apihelp-expandtemplates-param-text": "Конвертлау өсөн викитекст",
-       "apihelp-expandtemplates-param-revid": "<nowiki>{{REVISIONID}}</nowiki> һәм шуға оҡшаған  алмаштар өсөн ID-ны яңынан ҡарау",
+       "apihelp-expandtemplates-param-revid": "<code><nowiki>{{REVISIONID}}</nowiki></code> һәм шуға оҡшаған  алмаштар өсөн ID-ны яңынан ҡарау",
        "apihelp-expandtemplates-param-prop": "\nАлыу өсөн, мәғлүмәттең ҡайһы өлөшө\n\nИғтибар итегеҙ, әгәр бер ғәмәл дә һайланмаһа, ул саҡта һөҙөмтә  вики- текстан торасаҡ, тик сығыу элекке форматта.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Киңәйтелгән викитекст",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Бар категориялар ҙа вики текста  күрһәтелмәй индерелгән мәғлүмәттәрҙе күрһәтә",
index 1e11427..fcb4af4 100644 (file)
@@ -94,7 +94,7 @@
        "apihelp-expandtemplates-summary": "Rozbalí všechny šablony ve wikitextu.",
        "apihelp-expandtemplates-param-title": "Název stránky.",
        "apihelp-expandtemplates-param-text": "Wikitext k převedení.",
-       "apihelp-expandtemplates-param-revid": "ID revize, pro <nowiki>{{REVISIONID}}</nowiki> a podobné proměnné.",
+       "apihelp-expandtemplates-param-revid": "ID revize, pro <code><nowiki>{{REVISIONID}}</nowiki></code> a podobné proměnné.",
        "apihelp-feedcontributions-summary": "Vrátí kanál příspěvků uživatele.",
        "apihelp-feedcontributions-param-feedformat": "Formát kanálu.",
        "apihelp-feedcontributions-param-year": "Od roku (a dříve).",
index a473893..d3273db 100644 (file)
        "apihelp-expandtemplates-summary": "Alle Vorlagen innerhalb des Wikitextes expandieren.",
        "apihelp-expandtemplates-param-title": "Titel der Seite.",
        "apihelp-expandtemplates-param-text": "Zu konvertierender Wikitext.",
-       "apihelp-expandtemplates-param-revid": "Versionsnummer, die für die Anzeige von <nowiki>{{REVISIONID}}</nowiki> und ähnlichen Variablen verwendet wird.",
+       "apihelp-expandtemplates-param-revid": "Versionsnummer, die für die Anzeige von <code><nowiki>{{REVISIONID}}</nowiki></code> und ähnlichen Variablen verwendet wird.",
        "apihelp-expandtemplates-param-prop": "Welche Informationen abgerufen werden sollen.\n\nBeachte bitte, dass das Ergebnis Wikitext enthält, aber die Ausgabe in einem veralteten Format ist, falls keine Werte ausgewählt sind.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Der expandierte Wikitext.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Kategorien in der Eingabe vorhanden, die nicht in der Ausgabe des Wikitextes vertreten sind.",
        "apihelp-paraminfo-example-1": "Zeige Info für <kbd>[[Special:ApiHelp/parse|action=parse]]</kbd>, <kbd>[[Special:ApiHelp/jsonfm|format=jsonfm]]</kbd>, <kbd>[[Special:ApiHelp/query+allpages|action=query&list=allpages]]</kbd>, und <kbd>[[Special:ApiHelp/query+siteinfo|action=query&meta=siteinfo]]</kbd>.",
        "apihelp-parse-param-title": "Titel der Seite, zu der der Text gehört. Falls ausgelassen, muss <var>$1contentmodel</var> angegeben werden und [[API]] wird als Titel verwendet.",
        "apihelp-parse-param-text": "Zu parsender Text. <var>$1title</var> oder <var>$1contentmodel</var> verwenden, um das Inhaltsmodell zu steuern.",
+       "apihelp-parse-param-revid": "Versionskennung, für <code><nowiki>{{REVISIONID}}</nowiki></code> und ähnliche Variablen.",
        "apihelp-parse-param-summary": "Zu parsende Zusammenfassung.",
        "apihelp-parse-param-page": "Parst den Inhalt dieser Seite. Kann nicht zusammen mit <var>$1text</var> und <var>$1title</var> verwendet werden.",
        "apihelp-parse-param-pageid": "Parst den Inhalt dieser Seite. Überschreibt <var>$1page</var>.",
        "apiwarn-invalidcategory": "„$1“ ist keine Kategorie.",
        "apiwarn-invalidtitle": "„$1“ ist kein gültiger Titel.",
        "apiwarn-notfile": "„$1“ ist keine Datei.",
+       "apiwarn-parse-revidwithouttext": "<var>revid</var>, ohne <var>text</var> verwendet, und geparste Seiteneigenschaften wurden angefordert. Wolltest du <var>oldid</var> anstatt <var>revid</var> verwenden?",
        "apiwarn-toomanyvalues": "Es wurden zu viele Werte für den Parameter <var>$1</var> angegeben. Die Obergrenze liegt bei $2.",
        "apiwarn-validationfailed-badpref": "Keine gültige Einstellung.",
        "apiwarn-validationfailed-cannotset": "Kann nicht von diesem Modul festgelegt werden.",
index 9fbc012..dbd5451 100644 (file)
        "apihelp-expandtemplates-summary": "Expands all templates within wikitext.",
        "apihelp-expandtemplates-param-title": "Title of page.",
        "apihelp-expandtemplates-param-text": "Wikitext to convert.",
-       "apihelp-expandtemplates-param-revid": "Revision ID, for <nowiki>{{REVISIONID}}</nowiki> and similar variables.",
+       "apihelp-expandtemplates-param-revid": "Revision ID, for <code><nowiki>{{REVISIONID}}</nowiki></code> and similar variables.",
        "apihelp-expandtemplates-param-prop": "Which pieces of information to get.\n\nNote that if no values are selected, the result will contain the wikitext, but the output will be in a deprecated format.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "The expanded wikitext.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Any categories present in the input that are not represented in the wikitext output.",
        "apihelp-paraminfo-example-2": "Show info for all submodules of <kbd>[[Special:ApiHelp/query|action=query]]</kbd>.",
 
        "apihelp-parse-summary": "Parses content and returns parser output.",
-       "apihelp-parse-extended-description": "See the various prop-modules of <kbd>[[Special:ApiHelp/query|action=query]]</kbd> to get information from the current version of a page.\n\nThere are several ways to specify the text to parse:\n# Specify a page or revision, using <var>$1page</var>, <var>$1pageid</var>, or <var>$1oldid</var>.\n# Specify content explicitly, using <var>$1text</var>, <var>$1title</var>, and <var>$1contentmodel</var>.\n# Specify only a summary to parse. <var>$1prop</var> should be given an empty value.",
+       "apihelp-parse-extended-description": "See the various prop-modules of <kbd>[[Special:ApiHelp/query|action=query]]</kbd> to get information from the current version of a page.\n\nThere are several ways to specify the text to parse:\n# Specify a page or revision, using <var>$1page</var>, <var>$1pageid</var>, or <var>$1oldid</var>.\n# Specify content explicitly, using <var>$1text</var>, <var>$1title</var>, <var>$1revid</var>, and <var>$1contentmodel</var>.\n# Specify only a summary to parse. <var>$1prop</var> should be given an empty value.",
        "apihelp-parse-param-title": "Title of page the text belongs to. If omitted, <var>$1contentmodel</var> must be specified, and [[API]] will be used as the title.",
        "apihelp-parse-param-text": "Text to parse. Use <var>$1title</var> or <var>$1contentmodel</var> to control the content model.",
+       "apihelp-parse-param-revid": "Revision ID, for <code><nowiki>{{REVISIONID}}</nowiki></code> and similar variables.",
        "apihelp-parse-param-summary": "Summary to parse.",
        "apihelp-parse-param-page": "Parse the content of this page. Cannot be used together with <var>$1text</var> and <var>$1title</var>.",
        "apihelp-parse-param-pageid": "Parse the content of this page. Overrides <var>$1page</var>.",
        "apiwarn-notfile": "\"$1\" is not a file.",
        "apiwarn-nothumb-noimagehandler": "Could not create thumbnail because $1 does not have an associated image handler.",
        "apiwarn-parse-nocontentmodel": "No <var>title</var> or <var>contentmodel</var> was given, assuming $1.",
+       "apiwarn-parse-revidwithouttext": "<var>revid</var> used without <var>text</var>, and parsed page properties were requested. Did you mean to use <var>oldid</var> instead of <var>revid</var>?",
        "apiwarn-parse-titlewithouttext": "<var>title</var> used without <var>text</var>, and parsed page properties were requested. Did you mean to use <var>page</var> instead of <var>title</var>?",
        "apiwarn-redirectsandrevids": "Redirect resolution cannot be used together with the <var>revids</var> parameter. Any redirects the <var>revids</var> point to have not been resolved.",
        "apiwarn-tokennotallowed": "Action \"$1\" is not allowed for the current user.",
index 9b6b81d..af3097b 100644 (file)
        "apihelp-expandtemplates-summary": "Expande todas las plantillas en wikitexto.",
        "apihelp-expandtemplates-param-title": "Título de la página.",
        "apihelp-expandtemplates-param-text": "Sintaxis wiki que se convertirá.",
-       "apihelp-expandtemplates-param-revid": "Revisión de ID, para <nowiki>{{REVISIONID}}</nowiki> y variables similares.",
+       "apihelp-expandtemplates-param-revid": "Revisión de ID, para <code><nowiki>{{REVISIONID}}</nowiki></code> y variables similares.",
        "apihelp-expandtemplates-param-prop": "Qué elementos de información se utilizan para llegar.\n\nTenga en cuenta que si no se seleccionan los valores, el resultado contendrá el wikitexto, pero la salida será en un formato obsoleto.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "El wikitexto expandido.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Cualesquiera categorías presentes en la entrada que no están representadas en salida de wikitexto.",
index 9a16e81..32c5164 100644 (file)
@@ -73,7 +73,7 @@
        "apihelp-emailuser-example-email": "<kbd>WikiSysop</kbd> erabiltzaileari mezu elektronikoa bidali <kbd>Edukia</kbd> testuarekin.",
        "apihelp-expandtemplates-param-title": "Orrialdearen izenburua.",
        "apihelp-expandtemplates-param-text": "Bihurtzeko Wikitestua",
-       "apihelp-expandtemplates-param-revid": "Berrikusketa ID, <nowiki>{{BERRIKUSKETAID}}</nowiki> eta antzeko aldagaientzako.",
+       "apihelp-expandtemplates-param-revid": "Berrikusketa ID, <code><nowiki>{{REVISIONID}}</nowiki></code> eta antzeko aldagaientzako.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Wikitestu zabaldua.",
        "apihelp-expandtemplates-paramvalue-prop-ttl": "Emaitzen cache-ak baliogabetu baino lehen iraun dezaketen denbora.",
        "apihelp-feedcontributions-param-feedformat": "Produktuaren formatua.",
index 4c6da2f..bd9ebcf 100644 (file)
        "apihelp-expandtemplates-summary": "Développe tous les modèles avec du wikitexte.",
        "apihelp-expandtemplates-param-title": "Titre de la page.",
        "apihelp-expandtemplates-param-text": "Wikitexte à convertir.",
-       "apihelp-expandtemplates-param-revid": "ID de révision, pour <nowiki>{{REVISIONID}}</nowiki> et les variables semblables.",
+       "apihelp-expandtemplates-param-revid": "ID de révision, pour <code><nowiki>{{REVISIONID}}</nowiki></code> et les variables semblables.",
        "apihelp-expandtemplates-param-prop": "Quelles informations récupérer.\n\nNoter que si aucune valeur n’est sélectionnée, le résultat contiendra le wikitexte, mais la sortie sera dans un format désuet.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Le wikitexte développé",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Toutes les catégories présentes dans l’entrée qui ne sont pas représentées dans la sortie du wikitexte.",
index c873685..8e978b2 100644 (file)
        "apihelp-expandtemplates-summary": "Expandir tódolos modelos dentro do wikitexto.",
        "apihelp-expandtemplates-param-title": "Título da páxina.",
        "apihelp-expandtemplates-param-text": "Sintaxis wiki a converter.",
-       "apihelp-expandtemplates-param-revid": "ID de revisión, para <nowiki>{{REVISIONID}}</nowiki> e variables similares.",
+       "apihelp-expandtemplates-param-revid": "ID de revisión, para <code><nowiki>{{REVISIONID}}</nowiki></code> e variables similares.",
        "apihelp-expandtemplates-param-prop": "Pezas de información a retornar.\n\nTeña en conta que se non se selecciona ningún valor o resultado conterá o texto wiki, pero a saída estará nun formato obsoleto.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "O wikitexto expandido.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Calquera categoría presente na entrada que non estea representada na saída do texto wiki.",
index dcb4efb..f9016c8 100644 (file)
        "apihelp-expandtemplates-summary": "הרחבת כל התבניות בתוך קוד הוויקי.",
        "apihelp-expandtemplates-param-title": "כותרת הדף.",
        "apihelp-expandtemplates-param-text": "איזה קוד ויקי להמיר.",
-       "apihelp-expandtemplates-param-revid": "מזהה גרסה, עבור <nowiki>{{REVISIONID}}</nowiki> ומשתנים דומים.",
+       "apihelp-expandtemplates-param-revid": "מזהה גרסה, עבור <code><nowiki>{{REVISIONID}}</nowiki></code> ומשתנים דומים.",
        "apihelp-expandtemplates-param-prop": "אילו חלקי מידע לקבל.\n\nיש לשים לכך שאם לא נבחרו ערכים, התוצאה תכיל את קוד הוויקי, אבל הפלט יהיה בתסדיר מיושן.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "קוד הוויקי המורחב.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "קטגוריות כלשהן שקיימות בקלט ואינן מיוצגות בפלט הוויקיטקסט.",
index 813fb7c..9218258 100644 (file)
        "apihelp-expandtemplates-summary": "Minden sablon kibontása a wikiszövegben.",
        "apihelp-expandtemplates-param-title": "Lap címe.",
        "apihelp-expandtemplates-param-text": "Az átalakítandó wikiszöveg.",
-       "apihelp-expandtemplates-param-revid": "Változatazonosító a <nowiki>{{REVISIONID}}</nowiki> és hasonló változók kibontásához.",
+       "apihelp-expandtemplates-param-revid": "Változatazonosító a <code><nowiki>{{REVISIONID}}</nowiki></code> és hasonló változók kibontásához.",
        "apihelp-expandtemplates-param-prop": "A lekérendő információk.\n\nHa nincs megadva érték, a válasz tartalmazni fogja a wikiszöveget, de a kimenet elavult formátumú lesz.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "A kibontott wikiszöveg.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Bármilyen, a bemenetben szereplő kategória, ami nem jelenik meg a wikiszöveges kimenetben.",
index 1d248e2..5af7667 100644 (file)
        "apihelp-expandtemplates-summary": "Ги проширува сите шаблони во викитекст.",
        "apihelp-expandtemplates-param-title": "Наслов на страница.",
        "apihelp-expandtemplates-param-text": "Викитекст за претворање.",
-       "apihelp-expandtemplates-param-revid": "Назнака на преработката, за <nowiki>{{REVISIONID}}</nowiki> и слични променливи.",
+       "apihelp-expandtemplates-param-revid": "Назнака на преработката, за <code><nowiki>{{REVISIONID}}</nowiki></code> и слични променливи.",
        "apihelp-expandtemplates-param-prop": "Кои информации треба да ги добиете:\n\nИмајте на ум дека ако не изберете никаква вредност, исходот ќе го содржи викитекстот, но изводот ќе биде во застарен формат.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Проширениот викитекст.",
        "apihelp-expandtemplates-param-includecomments": "Дали во изводот да се вклучени HTML-коментари.",
index 9b509ee..ac134f0 100644 (file)
        "apihelp-expandtemplates-summary": "Rozwija wszystkie szablony zawarte w wikitekście.",
        "apihelp-expandtemplates-param-title": "Tytuł strony.",
        "apihelp-expandtemplates-param-text": "Wikitext do przekonwertowania.",
-       "apihelp-expandtemplates-param-revid": "ID wersji, dla <nowiki>{{REVISIONID}}</nowiki> i podobnych zmiennych.",
+       "apihelp-expandtemplates-param-revid": "ID wersji, dla <code><nowiki>{{REVISIONID}}</nowiki></code> i podobnych zmiennych.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Rozwinięty wikitekst.",
        "apihelp-feedcontributions-summary": "Zwraca kanał wkładu użytkownika.",
        "apihelp-feedcontributions-param-feedformat": "Format danych wyjściowych.",
index 0b9a57b..68d5197 100644 (file)
        "apihelp-expandtemplates-summary": "Expande todas a predefinições em texto wiki.",
        "apihelp-expandtemplates-param-title": "Título da página.",
        "apihelp-expandtemplates-param-text": "Texto wiki para converter.",
-       "apihelp-expandtemplates-param-revid": "ID da revisão, para <nowiki>{{REVISIONID}}</nowiki> e variáveis semelhantes.",
+       "apihelp-expandtemplates-param-revid": "ID da revisão, para <code><nowiki>{{REVISIONID}}</nowiki></code> e variáveis semelhantes.",
        "apihelp-expandtemplates-param-prop": "Quais peças de informação obter.\n\nNote que se nenhum valor for selecionado, o resultado conterá o texto wiki, mas o resultado será em um formato obsoleto.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "O texto wiki expandido.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Quaisquer categorias presentes na entrada que não estão representadas na saída wikitext.",
index 299cb5e..78ec0be 100644 (file)
        "apihelp-expandtemplates-summary": "Expande todas as predefinições incluídas num texto em notação wiki.",
        "apihelp-expandtemplates-param-title": "Título da página.",
        "apihelp-expandtemplates-param-text": "Texto em notação wiki a converter.",
-       "apihelp-expandtemplates-param-revid": "Identificador da revisão, para <nowiki>{{REVISIONID}}</nowiki> e variáveis semelhantes.",
+       "apihelp-expandtemplates-param-revid": "Identificador da revisão, para <code><nowiki>{{REVISIONID}}</nowiki></code> e variáveis semelhantes.",
        "apihelp-expandtemplates-param-prop": "As informações que devem ser obtidas:\n\nNote que se não for selecionado nenhum valor, o resultado irá conter texto em notação wiki mas a saída estará num formato obsoleto.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "O texto em notação wiki expandido.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Quaisquer categorias existentes na entrada que não estão representadas no texto em notação wiki de saída.",
index c878a53..6aaaac7 100644 (file)
        "apihelp-expandtemplates-summary": "{{doc-apihelp-summary|expandtemplates}}",
        "apihelp-expandtemplates-param-title": "{{doc-apihelp-param|expandtemplates|title}}",
        "apihelp-expandtemplates-param-text": "{{doc-apihelp-param|expandtemplates|text}}",
-       "apihelp-expandtemplates-param-revid": "{{doc-apihelp-param|expandtemplates|revid}}\n{{doc-important|Do not translate <code><<nowiki />nowiki>{{<nowiki />REVISIONID}}<<nowiki />/nowiki></code>}}",
+       "apihelp-expandtemplates-param-revid": "{{doc-apihelp-param|expandtemplates|revid}}",
        "apihelp-expandtemplates-param-prop": "{{doc-apihelp-param|expandtemplates|prop|paramvalues=1}}",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "{{doc-apihelp-paramvalue|expandtemplates|prop|wikitext}}",
        "apihelp-expandtemplates-paramvalue-prop-categories": "{{doc-apihelp-paramvalue|expandtemplates|prop|categories}}",
        "apihelp-parse-extended-description": "{{doc-apihelp-extended-description|parse}}",
        "apihelp-parse-param-title": "{{doc-apihelp-param|parse|title}}",
        "apihelp-parse-param-text": "{{doc-apihelp-param|parse|text}}",
+       "apihelp-parse-param-revid": "{{doc-apihelp-param|parse|revid}}",
        "apihelp-parse-param-summary": "{{doc-apihelp-param|parse|summary}}",
        "apihelp-parse-param-page": "{{doc-apihelp-param|parse|page}}",
        "apihelp-parse-param-pageid": "{{doc-apihelp-param|parse|pageid}}",
        "apiwarn-notfile": "{{doc-apierror}}\n\nParameters:\n* $1 - Supplied file name.",
        "apiwarn-nothumb-noimagehandler": "{{doc-apierror}}\n\nParameters:\n* $1 - File name.",
        "apiwarn-parse-nocontentmodel": "{{doc-apierror}}\n\nParameters:\n* $1 - Content model being assumed.",
+       "apiwarn-parse-revidwithouttext": "{{doc-apierror}}",
        "apiwarn-parse-titlewithouttext": "{{doc-apierror}}",
        "apiwarn-redirectsandrevids": "{{doc-apierror}}",
        "apiwarn-tokennotallowed": "{{doc-apierror}}\n\nParameters:\n* $1 - Token type being requested, typically named after the action requiring the token.",
index 795e81b..a264737 100644 (file)
        "apihelp-expandtemplates-summary": "Разворачивание всех шаблонов в вики-текст.",
        "apihelp-expandtemplates-param-title": "Заголовок страницы.",
        "apihelp-expandtemplates-param-text": "Конвертируемый вики-текст.",
-       "apihelp-expandtemplates-param-revid": "Номер версии, для <nowiki>{{REVISIONID}}</nowiki> и аналогичных переменных.",
+       "apihelp-expandtemplates-param-revid": "Номер версии, для <code><nowiki>{{REVISIONID}}</nowiki></code> и аналогичных переменных.",
        "apihelp-expandtemplates-param-prop": "Какую информацию включить.\n\nОбратите внимание, что если ни одно из значений не выбрано, результат будет содержать вики-текст, но вывод будет в устаревшем формате.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Расширенный вики-текст.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Любые категории, присутствующие во входных данных, но не попавшие в вики-текстовый результат.",
        "api-help-param-upload": "Должно быть отправлено как файл с использованием multipart/form-data.",
        "api-help-param-multi-separate": "Разделяйте значения с помощью <kbd>|</kbd> или [[Special:ApiHelp/main#main/datatypes|альтернативного разделителя]].",
        "api-help-param-multi-max": "Максимально разрешённое количество значений — {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} для ботов).",
+       "api-help-param-multi-max-simple": "Максимальное количество значений — {{PLURAL:$1|$1}}.",
        "api-help-param-multi-all": "Для указания всех значений, используйте <kbd>$1</kbd>.",
        "api-help-param-default": "По умолчанию: $1",
        "api-help-param-default-empty": "По умолчанию: <span class=\"apihelp-empty\">(пусто)</span>",
index 086a726..025254d 100644 (file)
        "apihelp-expandtemplates-summary": "Expanderar alla mallar inom wikitext.",
        "apihelp-expandtemplates-param-title": "Sidans rubrik.",
        "apihelp-expandtemplates-param-text": "Wikitext att konvertera.",
-       "apihelp-expandtemplates-param-revid": "Revision ID, för <nowiki>{{REVISIONID}}</nowiki> och liknande variabler.",
+       "apihelp-expandtemplates-param-revid": "Revision ID, för <code><nowiki>{{REVISIONID}}</nowiki></code> och liknande variabler.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Den expanderade wikitexten.",
        "apihelp-expandtemplates-param-includecomments": "Om HTML-kommentarer skall inkluderas i utdata.",
        "apihelp-expandtemplates-param-generatexml": "Generera ett XML tolknings träd (ersatt av $1prop=parsetree).",
index e9a7f9b..e43c383 100644 (file)
        "apihelp-expandtemplates-summary": "Розгортає усі шаблони в межах вікірозмітки.",
        "apihelp-expandtemplates-param-title": "Заголовок сторінки.",
        "apihelp-expandtemplates-param-text": "Вікітекст для перетворення.",
-       "apihelp-expandtemplates-param-revid": "ID версії, для <nowiki>{{REVISIONID}}</nowiki> і подібних змінних.",
+       "apihelp-expandtemplates-param-revid": "ID версії, для <code><nowiki>{{REVISIONID}}</nowiki></code> і подібних змінних.",
        "apihelp-expandtemplates-param-prop": "Яку інформацію отримувати.\n\nЗважте, що якщо не вибрано значень, результат міститиме вікітекст, але буде в застарілому форматі.",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "Розгорнений вікітекст.",
        "apihelp-expandtemplates-paramvalue-prop-categories": "Будь-які категорії, наявні у джерелі, але не виведені у вікітексті результату.",
        "apihelp-parse-paramvalue-prop-sections": "Дає розділи в аналізованому вікітексті.",
        "apihelp-parse-paramvalue-prop-revid": "Додає ідентифікатор версії аналізованої сторінки.",
        "apihelp-parse-paramvalue-prop-displaytitle": "Додає заголовок аналізованого вікітексту.",
-       "apihelp-parse-paramvalue-prop-headitems": "<span class=\"apihelp-deprecated\">Застаріло.</span> Дає елементи для вставки в <code>&lt;head&gt;</code> сторінки.",
+       "apihelp-parse-paramvalue-prop-headitems": "Дає елементи для вставки в <code>&lt;head&gt;</code> сторінки.",
        "apihelp-parse-paramvalue-prop-headhtml": "Дає проаналізований <code>&lt;head&gt;</code> сторінки.",
        "apihelp-parse-paramvalue-prop-modules": "Дає модулі ResourceLoader, використані на сторінці. Щоб завантажити, використовуйте <code>mw.loader.using()</code>. Чи <kbd>jsconfigvars</kbd>, чи <kbd>encodedjsconfigvars</kbd> має бути запитано разом з <kbd>modules</kbd>.",
        "apihelp-parse-paramvalue-prop-jsconfigvars": "Дає змінні конфігурації JavaScript, притаманні для сторінки. Щоб застосувати, використайте <code>mw.config.set()</code>.",
        "apihelp-query+search-paramvalue-prop-sectiontitle": "Додає заголовок відповідного розділу.",
        "apihelp-query+search-paramvalue-prop-categorysnippet": "Додає проаналізований уривок відповідної категорії.",
        "apihelp-query+search-paramvalue-prop-isfilematch": "Додає перемикач, який показує, є пошук знайшов вміст файлу.",
-       "apihelp-query+search-paramvalue-prop-score": "<span class=\"apihelp-deprecated\">Застаріло й інгорується.</span>",
-       "apihelp-query+search-paramvalue-prop-hasrelated": "<span class=\"apihelp-deprecated\">Застаріло й інгорується.</span>",
+       "apihelp-query+search-paramvalue-prop-score": "Інгорується.",
+       "apihelp-query+search-paramvalue-prop-hasrelated": "Ігнорується.",
        "apihelp-query+search-param-limit": "Скільки всього сторінок виводити.",
        "apihelp-query+search-param-interwiki": "Включати інтервікі в результатах пошуку, якщо доступно.",
        "apihelp-query+search-param-backend": "Який бекенд пошуку використовувати, якщо не за замовчуванням.",
        "apihelp-query+userinfo-paramvalue-prop-rights": "Перелічує усі права, які має поточний користувач.",
        "apihelp-query+userinfo-paramvalue-prop-changeablegroups": "Перелічує групи, у які користувач може додавати і з яких вилучати.",
        "apihelp-query+userinfo-paramvalue-prop-options": "Перелічує усі налаштування, які поточний користувач встановив.",
-       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "<span class=\"apihelp-deprecated\">Застаріле.</span> Отримати знак для зміни налаштувань поточного користувача.",
+       "apihelp-query+userinfo-paramvalue-prop-preferencestoken": "Отримати токен для зміни налаштувань поточного користувача.",
        "apihelp-query+userinfo-paramvalue-prop-editcount": "Додає кількість редагувань поточного користувача.",
        "apihelp-query+userinfo-paramvalue-prop-ratelimits": "Перелічує усі ліміти оцінок, застосовні до поточного користувача.",
        "apihelp-query+userinfo-paramvalue-prop-realname": "Додає справжнє ім'я користувача.",
        "api-format-prettyprint-header-only-html": "Це HTML-представлення призначене для налагодження, однак не придатне для прикладного використання.\n\nДив. [[mw:Special:MyLanguage/API|повну документацію]], або [[Special:ApiHelp/main|довідку з API]] для детальнішої інформації.",
        "api-format-prettyprint-header-hyperlinked": "Це — HTML-репрезентація формату $1. HTML добрий для виправлення помилок, але непридатний для використання додатків.\n\nВкажіть параметр <var>format</var>, щоб змінити формат виводу. Щоб побачити репрезентацію формату $1 не у формі HTML, вкажіть [$3 <kbd>format=$2</kbd>].\nДив. [[mw:API|повну документацію]], або [[Special:ApiHelp/main|довідку API]], щоб дізнатися більше.",
        "api-format-prettyprint-status": "Відповідь повернеться із HTTP-статусом $1 $2.",
+       "api-login-fail-aborted": "Автентифікація вимагає взаємодії з користувачем, яка не підтримується <kbd>action=login</kbd>. Щоб мати змогу увійти в систему за допомогою <kbd>action=login</kbd>, див. [[Special:BotPasswords]]. Щоб продовжити використовувати вхід у систему через основний обліковий запис, див.<kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+       "api-login-fail-aborted-nobotpw": "Автентифікація вимагає взаємодії з користувачем, яка не підтримується <kbd>action=login</kbd>. Щоб увійти в систему, див. <kbd>[[Special:ApiHelp/clientlogin|action=clientlogin]]</kbd>.",
+       "api-login-fail-badsessionprovider": "Неможливо увійти в систему при використанні $1.",
+       "api-login-fail-sameorigin": "Неможливо увійти в систему, коли не застосовується ''політика того ж походження''.",
        "api-pageset-param-titles": "Список назв над якими працювати.",
        "api-pageset-param-pageids": "Список ідентифікаторів сторінок над якими працювати.",
        "api-pageset-param-revids": "Список ідентифікаторів версій над якими працювати.",
        "api-help-title": "Довідка API MediaWiki",
        "api-help-lead": "Це автоматично генерована сторінка документації API MediaWiki.\n\nДокументація та приклади: https://www.mediawiki.org/wiki/API",
        "api-help-main-header": "Головний модуль",
+       "api-help-undocumented-module": "Для модуля $1 відсутня документація.",
        "api-help-flag-deprecated": "Цей модуль є застарілим.",
        "api-help-flag-internal": "<strong>Цей модуль є внутрішнім або нестабільним.</strong> Його робота може бути змінена без сповіщення.",
        "api-help-flag-readrights": "Цей модуль вимагає прав на читання.",
        "api-help-param-upload": "Повинно бути надіслано у формі надсилання файлу використовуючи multipart/form-data.",
        "api-help-param-multi-separate": "Розділіть значення з допомогою <kbd>|</kbd> або [[Special:ApiHelp/main#main/datatypes|альтернативу]].",
        "api-help-param-multi-max": "Максимальна кількість значень — {{PLURAL:$1|$1}} ({{PLURAL:$2|$2}} для ботів).",
+       "api-help-param-multi-max-simple": "Максимальна кількість значень становить {{PLURAL:$1|$1}}.",
        "api-help-param-multi-all": "Щоб зазначити всі значення, використовуйте <kbd>$1</kbd>.",
        "api-help-param-default": "За замовчуванням: $1",
        "api-help-param-default-empty": "За замовчуванням: <span class=\"apihelp-empty\">(пусто)</span>",
        "apierror-changeauth-norequest": "Не вдалося створити запит на зміну.",
        "apierror-chunk-too-small": "Мінімальний розмір шматка становить $1 {{PLURAL:$1|байт|байти|байтів}} для некінцевих шматків.",
        "apierror-cidrtoobroad": "$1 CIDR-діапазони, ширші ніж /$2, недозволені.",
+       "apierror-compare-no-title": "Неможливо попередньо зберегти трансформацію без назви. Спробуйте зазначити <var>fromtitle</var> або <var>totitle</var>.",
+       "apierror-compare-relative-to-nothing": "Відсутня версія 'from', якої б стосувалося <var>torelative</var>.",
        "apierror-contentserializationexception": "Невдача серіалізації вмісту: $1",
        "apierror-contenttoobig": "Наданий Вами вміст перевищує ліміт у $1 {{PLURAL:$1|кілобайт|кілобайти|кілобайтів}} розміру сторінки.",
        "apierror-copyuploadbaddomain": "Завантаження за URL-адресою недозволені з цього домену.",
        "apierror-maxlag": "Очікування на $2: затримка $1 {{PLURAL:$1|секунда|секунди|секунд}}.",
        "apierror-mimesearchdisabled": "MIME-пошук вимкнений у скупому режимі.",
        "apierror-missingcontent-pageid": "Відсутній вміст для сторінки з ідентифікатором $1.",
+       "apierror-missingcontent-revid": "Відсутній контент для ідентифікатора версії $1.",
        "apierror-missingparam-at-least-one-of": "{{PLURAL:$2|Параметр|Щонайменше один параметрів}} $1 є обов'язковим.",
        "apierror-missingparam-one-of": "{{PLURAL:$2|Параметр|Один з параметрів}} $1 є обов'язковим.",
        "apierror-missingparam": "Параметр <var>$1</var> має бути заповнений.",
        "apierror-missingrev-pageid": "Немає поточної версії сторінки з ідентифікатором $1.",
+       "apierror-missingrev-title": "Для назви $1 відсутня поточна версія.",
        "apierror-missingtitle-createonly": "Відсутні назви можна захистити тільки через <kbd>create</kbd>.",
        "apierror-missingtitle": "Вказана Вами сторінка не існує.",
        "apierror-missingtitle-byname": "Сторінка $1 не існує.",
        "apiwarn-badurlparam": "Не вдалося парсити <var>$1urlparam</var> для $2. Використовується лише ширина і висота.",
        "apiwarn-badutf8": "Значення, вказане для <var>$1</var>, містить недійсні або ненормалізовані дані. Текстові дані мають бути дійсними, NFC-нормалізований Unicode без контрольних символів C0, окрім HT (\\t), LF (\\n), і CR (\\r).",
        "apiwarn-checktoken-percentencoding": "Перевірте, чи символи, такі як «+» у токені, пройшли правильне процентне кодування в URL.",
+       "apiwarn-compare-nocontentmodel": "Не вдалося визначити контентну модель, припускаємо $1.",
        "apiwarn-deprecation-deletedrevs": "<kbd>list=deletedrevs</kbd> є застарілим. Будь ласка, використовуйте замість нього <kbd>prop=deletedrevisions</kbd> або <kbd>list=alldeletedrevisions</kbd>.",
        "apiwarn-deprecation-expandtemplates-prop": "Оскільки не задано жодних значень для параметра <var>prop</var>, як вихідні дані було використано старий формат. Цей формат є застарілим, і в майбутньому параметру <var>prop</var> буде задано стандартне значення, наслідком чого стане те, що завжди використовуватиметься новий формат.",
        "apiwarn-deprecation-httpsexpected": "Використано HTTP, тоді як очікувалося використання HTTPS.",
index dbd4d0e..ef6fa60 100644 (file)
        "apihelp-expandtemplates-summary": "展开wiki文本中的所有模板。",
        "apihelp-expandtemplates-param-title": "页面标题。",
        "apihelp-expandtemplates-param-text": "要转换的wiki文本。",
-       "apihelp-expandtemplates-param-revid": "修订版本ID,用于<nowiki>{{REVISIONID}}</nowiki>和类似变体。",
+       "apihelp-expandtemplates-param-revid": "修订版本ID,用于<code><nowiki>{{REVISIONID}}</nowiki></code>和类似变体。",
        "apihelp-expandtemplates-param-prop": "要获取的那条信息。\n\n注意如果没有选定值,结果将包含wiki文本,但将以弃用的格式显示。",
        "apihelp-expandtemplates-paramvalue-prop-wikitext": "展开后的wiki文本。",
        "apihelp-expandtemplates-paramvalue-prop-categories": "任何在输出中提供的,未在wiki文本输出中表现的分类。",
        "apihelp-feedcontributions-summary": "返回用户贡献纲要。",
        "apihelp-feedcontributions-param-feedformat": "纲要的格式。",
        "apihelp-feedcontributions-param-user": "获取哪些用户的贡献。",
-       "apihelp-feedcontributions-param-namespace": "è¿\87滤å\93ªäº\9bå\91½å\90\8d空间的贡献。",
+       "apihelp-feedcontributions-param-namespace": "è¿\87滤å\93ªäº\9bå\90\8då­\97空间的贡献。",
        "apihelp-feedcontributions-param-year": "起始年份(及更早)。",
        "apihelp-feedcontributions-param-month": "起始月份(及更早)。",
        "apihelp-feedcontributions-param-tagfilter": "过滤有这些标签的贡献者。",
        "apihelp-feedcontributions-example-simple": "返回用户<kbd>Example</kbd>的贡献。",
        "apihelp-feedrecentchanges-summary": "返回最近更改的摘要。",
        "apihelp-feedrecentchanges-param-feedformat": "纲要的格式。",
-       "apihelp-feedrecentchanges-param-namespace": "ç\94¨äº\8eé\99\90å\88¶ç»\93æ\9e\9cç\9a\84å\91½å\90\8d空间。",
-       "apihelp-feedrecentchanges-param-invert": "é\99¤æ\89\80é\80\89å®\9aè\80\85å¤\96ç\9a\84æ\89\80æ\9c\89å\91½å\90\8d空间。",
-       "apihelp-feedrecentchanges-param-associated": "å\8c\85æ\8b¬ç\9b¸å\85³ç\9a\84å\91½å\90\8d空间(讨论页或主要)。",
+       "apihelp-feedrecentchanges-param-namespace": "ç\94¨äº\8eé\99\90å\88¶ç»\93æ\9e\9cç\9a\84å\90\8då­\97空间。",
+       "apihelp-feedrecentchanges-param-invert": "é\99¤æ\89\80é\80\89å®\9aè\80\85å¤\96ç\9a\84æ\89\80æ\9c\89å\90\8då­\97空间。",
+       "apihelp-feedrecentchanges-param-associated": "å\8c\85æ\8b¬ç\9b¸å\85³ç\9a\84å\90\8då­\97空间(讨论页或主要)。",
        "apihelp-feedrecentchanges-param-days": "用于限制结果的天数。",
        "apihelp-feedrecentchanges-param-limit": "所要返回结果的最大数目。",
        "apihelp-feedrecentchanges-param-from": "显示自那时以来的更改。",
        "apihelp-query+protectedtitles-paramvalue-prop-expiry": "添加保护将被提升时的时间戳。",
        "apihelp-query+protectedtitles-paramvalue-prop-level": "添加保护级别。",
        "apihelp-query+protectedtitles-example-simple": "受保护标题列表。",
-       "apihelp-query+protectedtitles-example-generator": "æ\89¾å\88°ä¸»å\91½å\90\8d空间中已保护的标题的链接。",
+       "apihelp-query+protectedtitles-example-generator": "æ\89¾å\88°ä¸»å\90\8då­\97空间中已保护的标题的链接。",
        "apihelp-query+querypage-summary": "获取由基于QueryPage的特殊页面提供的列表。",
        "apihelp-query+querypage-param-page": "特殊页面的名称。注意其区分大小写。",
        "apihelp-query+querypage-param-limit": "返回的结果数。",
index cac4769..bc50096 100644 (file)
@@ -182,9 +182,9 @@ class ChangesList extends ContextSource {
                        $classes[] = self::CSS_CLASS_PREFIX . 'edit';
                        $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'ns' .
                                $rc->mAttribs['rc_namespace'] . '-' . $rc->mAttribs['rc_title'] );
-                       $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'ns-' .
-                               $rc->mAttribs['rc_namespace'] );
                }
+               $classes[] = Sanitizer::escapeClass( self::CSS_CLASS_PREFIX . 'ns-' .
+                       $rc->mAttribs['rc_namespace'] );
 
                // Indicate watched status on the line to allow for more
                // comprehensive styling.
index 913bd38..2a7ba88 100644 (file)
@@ -127,7 +127,7 @@ class ChangesListBooleanFilter extends ChangesListFilter {
                }
 
                if ( isset( $filterDefinition['default'] ) ) {
-                       $this->defaultValue = $filterDefinition['default'];
+                       $this->setDefault( $filterDefinition['default'] );
                } else {
                        throw new MWException( 'You must set a default' );
                }
@@ -156,12 +156,14 @@ class ChangesListBooleanFilter extends ChangesListFilter {
        }
 
        /**
-        * Sets default
+        * Sets default.  It must be a boolean.
+        *
+        * It will be coerced to boolean.
         *
         * @param bool $defaultValue
         */
        public function setDefault( $defaultValue ) {
-               $this->defaultValue = $defaultValue;
+               $this->defaultValue = (bool)$defaultValue;
        }
 
        /**
@@ -236,9 +238,12 @@ class ChangesListBooleanFilter extends ChangesListFilter {
         */
        public function isSelected( FormOptions $opts ) {
                return !$opts[ $this->getName() ] &&
-                       array_filter( $this->getSiblings(), function ( $sibling ) use ( $opts ) {
-                               return $opts[ $sibling->getName() ];
-                       } );
+                       array_filter(
+                               $this->getSiblings(),
+                               function ( ChangesListBooleanFilter $sibling ) use ( $opts ) {
+                                       return $opts[ $sibling->getName() ];
+                               }
+                       );
        }
 
        /**
index 0b34a5d..2fc1006 100644 (file)
@@ -309,6 +309,7 @@ abstract class ChangesListFilter {
         * structured UI.
         *
         * This can either be the exact filter, or a new filter that replaces it.
+        * @return bool
         */
        public function isFeatureAvailableOnStructuredUi() {
                return $this->displaysOnStructuredUi();
index 8e24efe..0df6828 100644 (file)
@@ -383,7 +383,7 @@ class EnhancedChangesList extends ChangesList {
                ) {
                        $classes[] = 'mw-enhanced-watched';
                }
-               $classes = array_merge( $classes, $this->getHTMLClassesForFilters( $rcObj ) );
+               $classes = array_merge( $classes, $this->getHTMLClasses( $rcObj, $rcObj->watched ) );
 
                $separator = ' <span class="mw-changeslist-separator">. .</span> ';
 
index 54b04ee..efda596 100644 (file)
@@ -474,6 +474,8 @@ class IcuCollation extends Collation {
        }
 
        /**
+        * @param string $index
+        * @return string
         * @since 1.16.3
         */
        public function getLetterByIndex( $index ) {
@@ -481,6 +483,8 @@ class IcuCollation extends Collation {
        }
 
        /**
+        * @param string $index
+        * @return string
         * @since 1.16.3
         */
        public function getSortKeyByLetterIndex( $index ) {
@@ -488,6 +492,8 @@ class IcuCollation extends Collation {
        }
 
        /**
+        * @param string $index
+        * @return string
         * @since 1.16.3
         */
        public function getFirstLetterCount() {
@@ -496,6 +502,8 @@ class IcuCollation extends Collation {
 
        /**
         * Test if a code point is a CJK (Chinese, Japanese, Korean) character
+        * @param int $codepoint
+        * @return bool
         * @since 1.16.3
         */
        public static function isCjk( $codepoint ) {
index 8791e4c..d60c8e3 100644 (file)
@@ -90,7 +90,7 @@ function utf8ToCodepoint( $char ) {
  * Escape a string for inclusion in a PHP single-quoted string literal.
  *
  * @param string $string string to be escaped.
- * @return String: escaped string.
+ * @return string escaped string.
  * @public
  * @deprecated since 1.25, use UtfNormal\Utils directly
  */
index 589f7d3..6295371 100644 (file)
@@ -46,7 +46,7 @@ class GlobalVarConfig implements Config {
        }
 
        /**
-        * @see Config::get
+        * @inheritDoc
         */
        public function get( $name ) {
                if ( !$this->has( $name ) ) {
@@ -56,7 +56,7 @@ class GlobalVarConfig implements Config {
        }
 
        /**
-        * @see Config::has
+        * @inheritDoc
         */
        public function has( $name ) {
                return $this->hasWithPrefix( $this->prefix, $name );
index 4d6c68c..d020d20 100644 (file)
@@ -49,7 +49,7 @@ class HashConfig implements Config, MutableConfig {
        }
 
        /**
-        * @see Config::get
+        * @inheritDoc
         */
        public function get( $name ) {
                if ( !$this->has( $name ) ) {
@@ -60,7 +60,8 @@ class HashConfig implements Config, MutableConfig {
        }
 
        /**
-        * @see Config::has
+        * @inheritDoc
+        * @since 1.24
         */
        public function has( $name ) {
                return array_key_exists( $name, $this->settings );
@@ -68,6 +69,8 @@ class HashConfig implements Config, MutableConfig {
 
        /**
         * @see MutableConfig::set
+        * @param string $name
+        * @param mixed $value
         */
        public function set( $name, $value ) {
                $this->settings[$name] = $value;
index cbb65aa..2bbc84c 100644 (file)
@@ -45,7 +45,7 @@ class MultiConfig implements Config {
        }
 
        /**
-        * @see Config::get
+        * @inheritDoc
         */
        public function get( $name ) {
                foreach ( $this->configs as $config ) {
@@ -58,7 +58,7 @@ class MultiConfig implements Config {
        }
 
        /**
-        * @see Config::has
+        * @inheritDoc
         */
        public function has( $name ) {
                foreach ( $this->configs as $config ) {
index 1d472e0..c12d28d 100644 (file)
@@ -55,6 +55,7 @@ abstract class AbstractContent implements Content {
         * @since 1.21
         *
         * @see Content::getModel
+        * @return string
         */
        public function getModel() {
                return $this->model_id;
@@ -82,6 +83,7 @@ abstract class AbstractContent implements Content {
         * @since 1.21
         *
         * @see Content::getContentHandler
+        * @return ContentHandler
         */
        public function getContentHandler() {
                return ContentHandler::getForContent( $this );
@@ -91,6 +93,7 @@ abstract class AbstractContent implements Content {
         * @since 1.21
         *
         * @see Content::getDefaultFormat
+        * @return string
         */
        public function getDefaultFormat() {
                return $this->getContentHandler()->getDefaultFormat();
@@ -100,6 +103,7 @@ abstract class AbstractContent implements Content {
         * @since 1.21
         *
         * @see Content::getSupportedFormats
+        * @return string[]
         */
        public function getSupportedFormats() {
                return $this->getContentHandler()->getSupportedFormats();
@@ -334,6 +338,7 @@ abstract class AbstractContent implements Content {
        /**
         * @since 1.21
         *
+        * @param string|int $sectionId
         * @return null
         *
         * @see Content::getSection
@@ -345,6 +350,9 @@ abstract class AbstractContent implements Content {
        /**
         * @since 1.21
         *
+        * @param string|int|null|bool $sectionId
+        * @param Content $with
+        * @param string $sectionTitle
         * @return null
         *
         * @see Content::replaceSection
@@ -356,6 +364,9 @@ abstract class AbstractContent implements Content {
        /**
         * @since 1.21
         *
+        * @param Title $title
+        * @param User $user
+        * @param ParserOptions $popts
         * @return Content $this
         *
         * @see Content::preSaveTransform
@@ -367,6 +378,7 @@ abstract class AbstractContent implements Content {
        /**
         * @since 1.21
         *
+        * @param string $header
         * @return Content $this
         *
         * @see Content::addSectionHeader
@@ -378,6 +390,9 @@ abstract class AbstractContent implements Content {
        /**
         * @since 1.21
         *
+        * @param Title $title
+        * @param ParserOptions $popts
+        * @param array $params
         * @return Content $this
         *
         * @see Content::preloadTransform
@@ -389,6 +404,10 @@ abstract class AbstractContent implements Content {
        /**
         * @since 1.21
         *
+        * @param WikiPage $page
+        * @param int $flags
+        * @param int $parentRevId
+        * @param User $user
         * @return Status
         *
         * @see Content::prepareSave
@@ -405,7 +424,7 @@ abstract class AbstractContent implements Content {
         * @since 1.21
         *
         * @param WikiPage $page
-        * @param ParserOutput $parserOutput
+        * @param ParserOutput|null $parserOutput
         *
         * @return LinksDeletionUpdate[]
         *
index 2a50566..a395e0d 100644 (file)
@@ -61,7 +61,7 @@ class AvroFormatter implements FormatterInterface {
        protected $writer;
 
        /**
-        * @var array $schemas Map from Monolog channel to Avro schema.
+        * @param array $schemas Map from Monolog channel to Avro schema.
         *  Each schema can be either the JSON string or decoded into PHP
         *  arrays.
         */
@@ -120,7 +120,7 @@ class AvroFormatter implements FormatterInterface {
        /**
         * Get the writer for the named channel
         *
-        * @var string $channel Name of the schema to fetch
+        * @param string $channel Name of the schema to fetch
         * @return \AvroSchema|null
         */
        protected function getSchema( $channel ) {
@@ -147,7 +147,7 @@ class AvroFormatter implements FormatterInterface {
        /**
         * Get the writer for the named channel
         *
-        * @var string $channel Name of the schema
+        * @param string $channel Name of the schema
         * @return int|null
         */
        public function getSchemaRevisionId( $channel ) {
index cbeb1fc..2e5298c 100644 (file)
@@ -98,7 +98,7 @@ class WANCacheReapUpdate implements DeferrableUpdate {
         * @see WANObjectCacheRepear
         * @param WANObjectCache $cache
         * @param TitleValue $t
-        * @returns string[]
+        * @return string[]
         */
        public function getEventAffectedKeys( WANObjectCache $cache, TitleValue $t ) {
                /** @var WikiPage[]|LocalFile[]|User[] $entities */
index 34f2852..ed8cbb4 100644 (file)
@@ -181,7 +181,8 @@ class DifferenceEngine extends ContextSource {
        public function deletedLink( $id ) {
                if ( $this->getUser()->isAllowed( 'deletedhistory' ) ) {
                        $dbr = wfGetDB( DB_REPLICA );
-                       $row = $dbr->selectRow( 'archive', '*',
+                       $row = $dbr->selectRow( 'archive',
+                               Revision::selectArchiveFields(),
                                [ 'ar_rev_id' => $id ],
                                __METHOD__ );
                        if ( $row ) {
index bf232e9..a2ec391 100644 (file)
@@ -441,6 +441,24 @@ TXT;
                return "[$id] $url   $type from line $line of $file: $message";
        }
 
+       /**
+        * Get a normalised message for formatting with PSR-3 log event context.
+        *
+        * Must be used together with `getLogContext()` to be useful.
+        *
+        * @since 1.30
+        * @param Exception|Throwable $e
+        * @return string
+        */
+       public static function getLogNormalMessage( $e ) {
+               $type = get_class( $e );
+               $file = $e->getFile();
+               $line = $e->getLine();
+               $message = $e->getMessage();
+
+               return "[{exception_id}] {exception_url}   $type from line $line of $file: $message";
+       }
+
        /**
         * @param Exception|Throwable $e
         * @return string
@@ -468,6 +486,7 @@ TXT;
                return [
                        'exception' => $e,
                        'exception_id' => WebRequest::getRequestId(),
+                       'exception_url' => self::getURL() ?: '[no req]',
                        'caught_by' => $catcher
                ];
        }
@@ -595,7 +614,7 @@ TXT;
                if ( !( $e instanceof MWException ) || $e->isLoggable() ) {
                        $logger = LoggerFactory::getInstance( 'exception' );
                        $logger->error(
-                               self::getLogMessage( $e ),
+                               self::getLogNormalMessage( $e ),
                                self::getLogContext( $e, $catcher )
                        );
 
@@ -629,7 +648,7 @@ TXT;
                        $logger = LoggerFactory::getInstance( $channel );
                        $logger->log(
                                $level,
-                               self::getLogMessage( $e ),
+                               self::getLogNormalMessage( $e ),
                                self::getLogContext( $e, $catcher )
                        );
                }
diff --git a/includes/exception/ProcOpenError.php b/includes/exception/ProcOpenError.php
new file mode 100644 (file)
index 0000000..f00bcd4
--- /dev/null
@@ -0,0 +1,29 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki;
+
+use Exception;
+
+class ProcOpenError extends Exception {
+       public function __construct() {
+               parent::__construct( 'proc_open() returned error!' );
+       }
+}
diff --git a/includes/exception/ShellDisabledError.php b/includes/exception/ShellDisabledError.php
new file mode 100644 (file)
index 0000000..203b58d
--- /dev/null
@@ -0,0 +1,32 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki;
+
+use Exception;
+
+/**
+ * @since 1.30
+ */
+class ShellDisabledError extends Exception {
+       public function __construct() {
+               parent::__construct( 'Unable to run external programs, proc_open() is disabled' );
+       }
+}
index 990f16d..c46eb61 100644 (file)
@@ -403,7 +403,7 @@ class XmlDumpWriter {
                if ( $file->isDeleted( File::DELETED_COMMENT ) ) {
                        $comment = Xml::element( 'comment', [ 'deleted' => 'deleted' ] );
                } else {
-                       $comment = Xml::elementClean( 'comment', null, $file->getDescription() );
+                       $comment = Xml::elementClean( 'comment', null, strval( $file->getDescription() ) );
                }
                return "    <upload>\n" .
                        $this->writeTimestamp( $file->getTimestamp() ) .
index c1f0651..8e1e49f 100644 (file)
@@ -29,6 +29,9 @@
 class ExternalStoreHttp extends ExternalStoreMedium {
        /**
         * @see ExternalStoreMedium::fetchFromURL()
+        * @param string $url
+        * @return string|bool
+        * @throws MWException
         */
        public function fetchFromURL( $url ) {
                return Http::get( $url, [], __METHOD__ );
@@ -36,6 +39,10 @@ class ExternalStoreHttp extends ExternalStoreMedium {
 
        /**
         * @see ExternalStoreMedium::store()
+        * @param string $cluster
+        * @param string $data
+        * @return string|bool
+        * @throws MWException
         */
        public function store( $cluster, $data ) {
                throw new MWException( "ExternalStoreHttp is read-only and does not support store()." );
index b05843c..5395f56 100644 (file)
@@ -35,6 +35,8 @@ class ExternalStoreMwstore extends ExternalStoreMedium {
         * The URL returned is of the form of the form mwstore://backend/container/wiki/id
         *
         * @see ExternalStoreMedium::fetchFromURL()
+        * @param string $url
+        * @return bool
         */
        public function fetchFromURL( $url ) {
                $be = FileBackendGroup::singleton()->backendFromPath( $url );
@@ -73,6 +75,10 @@ class ExternalStoreMwstore extends ExternalStoreMedium {
 
        /**
         * @see ExternalStoreMedium::store()
+        * @param string $backend
+        * @param string $data
+        * @return string|bool
+        * @throws MWException
         */
        public function store( $backend, $data ) {
                $be = FileBackendGroup::singleton()->get( $backend );
index 0d5a15d..21b7ac2 100644 (file)
@@ -298,6 +298,7 @@ class FileBackendDBRepoWrapper extends FileBackend {
         *
         * @param string $function
         * @param array $params
+        * @return mixed
         */
        protected function translateSrcParams( $function, array $params ) {
                $latest = !empty( $params['latest'] );
index 55a19e8..45a5c82 100644 (file)
@@ -257,7 +257,7 @@ class ForeignAPIRepo extends FileRepo {
         * @param string $name
         * @param int $width
         * @param int $height
-        * @param array $result Out parameter that will be changed by the function.
+        * @param array &$result
         * @param string $otherParams
         *
         * @return bool
index 810f788..fd0f3f3 100644 (file)
@@ -347,18 +347,18 @@ class LocalFile extends File {
        function getCacheFields( $prefix = 'img_' ) {
                static $fields = [ 'size', 'width', 'height', 'bits', 'media_type',
                        'major_mime', 'minor_mime', 'metadata', 'timestamp', 'sha1', 'user',
-                       'user_text', 'description' ];
+                       'user_text' ];
                static $results = [];
 
                if ( $prefix == '' ) {
-                       return $fields;
+                       return array_merge( $fields, [ 'description' ] );
                }
-
                if ( !isset( $results[$prefix] ) ) {
                        $prefixedFields = [];
                        foreach ( $fields as $field ) {
                                $prefixedFields[] = $prefix . $field;
                        }
+                       $prefixedFields += CommentStore::newKey( "{$prefix}description" )->getFields();
                        $results[$prefix] = $prefixedFields;
                }
 
@@ -536,6 +536,10 @@ class LocalFile extends File {
                $this->dataLoaded = true;
                $this->extraDataLoaded = true;
 
+               $this->description = CommentStore::newKey( "{$prefix}description" )
+                       // $row is probably using getFields() from self::getCacheFields()
+                       ->getCommentLegacy( wfGetDB( DB_REPLICA ), $row )->text;
+
                $array = $this->decodeRow( $row, $prefix );
 
                foreach ( $array as $name => $value ) {
@@ -1124,11 +1128,9 @@ class LocalFile extends File {
 
                if ( $this->historyLine == 0 ) { // called for the first time, return line from cur
                        $this->historyRes = $dbr->select( 'image',
-                               [
-                                       '*',
-                                       "'' AS oi_archive_name",
-                                       '0 as oi_deleted',
-                                       'img_sha1'
+                               self::selectFields() + [
+                                       'oi_archive_name' => $dbr->addQuotes( '' ),
+                                       'oi_deleted' => 0,
                                ],
                                [ 'img_name' => $this->title->getDBkey() ],
                                $fname
@@ -1140,7 +1142,9 @@ class LocalFile extends File {
                                return false;
                        }
                } elseif ( $this->historyLine == 1 ) {
-                       $this->historyRes = $dbr->select( 'oldimage', '*',
+                       $this->historyRes = $dbr->select(
+                               'oldimage',
+                               OldLocalFile::selectFields(),
                                [ 'oi_name' => $this->title->getDBkey() ],
                                $fname,
                                [ 'ORDER BY' => 'oi_timestamp DESC' ]
@@ -2303,7 +2307,6 @@ class LocalFileDeleteBatch {
 
                $encTimestamp = $dbw->addQuotes( $dbw->timestamp( $now ) );
                $encUserId = $dbw->addQuotes( $this->user->getId() );
-               $encReason = $dbw->addQuotes( $this->reason );
                $encGroup = $dbw->addQuotes( 'deleted' );
                $ext = $this->file->getExtension();
                $dotExt = $ext === '' ? '' : ".$ext";
@@ -2346,7 +2349,10 @@ class LocalFileDeleteBatch {
                        ];
                        $joins = [];
 
-                       $fields += $commentStoreFaReason->insert( $dbw, $encReason );
+                       $fields += array_map(
+                               [ $dbw, 'addQuotes' ],
+                               $commentStoreFaReason->insert( $dbw, $this->reason )
+                       );
 
                        if ( $wgCommentTableSchemaMigrationStage <= MIGRATION_WRITE_BOTH ) {
                                $fields['fa_description'] = 'img_description';
index b46e1e4..ee172e1 100644 (file)
@@ -396,6 +396,7 @@ class OldLocalFile extends LocalFile {
         *
         * This is the case for a couple files on Wikimedia servers where
         * the old version is "lost".
+        * @return bool
         */
        public function exists() {
                $archiveName = $this->getArchiveName();
index 3f1c590..e642c2c 100644 (file)
@@ -660,6 +660,8 @@ abstract class HTMLFormField {
 
        /**
         * Get a FieldLayout (or subclass thereof) to wrap this field in when using OOUI output.
+        * @param string $inputField
+        * @param array $config
         * @return OOUI\FieldLayout|OOUI\ActionFieldLayout
         */
        protected function getFieldLayoutOOUI( $inputField, $config ) {
@@ -1074,33 +1076,8 @@ abstract class HTMLFormField {
                                $this->mOptionsLabelsNotFromMessage = true;
                                $this->mOptions = self::forceToStringRecursive( $this->mParams['options'] );
                        } elseif ( array_key_exists( 'options-message', $this->mParams ) ) {
-                               /** @todo This is copied from Xml::listDropDown(), deprecate/avoid duplication? */
                                $message = $this->getMessage( $this->mParams['options-message'] )->inContentLanguage()->plain();
-
-                               $optgroup = false;
-                               $this->mOptions = [];
-                               foreach ( explode( "\n", $message ) as $option ) {
-                                       $value = trim( $option );
-                                       if ( $value == '' ) {
-                                               continue;
-                                       } elseif ( substr( $value, 0, 1 ) == '*' && substr( $value, 1, 1 ) != '*' ) {
-                                               # A new group is starting...
-                                               $value = trim( substr( $value, 1 ) );
-                                               $optgroup = $value;
-                                       } elseif ( substr( $value, 0, 2 ) == '**' ) {
-                                               # groupmember
-                                               $opt = trim( substr( $value, 2 ) );
-                                               if ( $optgroup === false ) {
-                                                       $this->mOptions[$opt] = $opt;
-                                               } else {
-                                                       $this->mOptions[$optgroup][$opt] = $opt;
-                                               }
-                                       } else {
-                                               # groupless reason list
-                                               $optgroup = false;
-                                               $this->mOptions[$option] = $option;
-                                       }
-                               }
+                               $this->mOptions = Xml::listDropDownOptions( $message );
                        } else {
                                $this->mOptions = null;
                        }
@@ -1120,16 +1097,7 @@ abstract class HTMLFormField {
                        return null;
                }
 
-               $options = [];
-
-               foreach ( $oldoptions as $text => $data ) {
-                       $options[] = [
-                               'data' => (string)$data,
-                               'label' => (string)$text,
-                       ];
-               }
-
-               return $options;
+               return Xml::listDropDownOptionsOoui( $oldoptions );
        }
 
        /**
index f58acbe..38f9a0a 100644 (file)
@@ -23,6 +23,15 @@ class HTMLTagFilter extends HTMLFormField {
                return '';
        }
 
+       public function getOOUI( $value ) {
+               $this->tagFilter = ChangeTags::buildTagFilterSelector(
+                       $value, true, $this->mParent->getContext() );
+               if ( $this->tagFilter ) {
+                       return parent::getOOUI( $value );
+               }
+               return new OOUI\FieldLayout( new OOUI\Widget() );
+       }
+
        public function getInputHTML( $value ) {
                if ( $this->tagFilter ) {
                        // we only need the select field, HTMLForm should handle the label
@@ -30,4 +39,12 @@ class HTMLTagFilter extends HTMLFormField {
                }
                return '';
        }
+
+       public function getInputOOUI( $value ) {
+               if ( $this->tagFilter ) {
+                       // we only need the select field, HTMLForm should handle the label
+                       return $this->tagFilter[1];
+               }
+               return '';
+       }
 }
index c10b312..6eff6c9 100644 (file)
@@ -168,6 +168,7 @@ class Http {
        /**
         * Get a configured MultiHttpClient
         * @param array $options
+        * @return MultiHttpClient
         */
        public static function createMultiClient( $options = [] ) {
                global $wgHTTPConnectTimeout, $wgHTTPTimeout, $wgHTTPProxy;
index 3f3803b..0c5d162 100644 (file)
@@ -88,6 +88,8 @@ class PhpHttpRequest extends MWHttpRequest {
         * so normal methods of handling errors programmatically
         * like get_last_error() don't work.
         * @internal
+        * @param int $errno
+        * @param string $errstr
         */
        public function errorHandler( $errno, $errstr ) {
                $n = count( $this->fopenErrors ) + 1;
index bfb1a69..568ef51 100644 (file)
@@ -30,6 +30,8 @@ use MediaWiki\Session\SessionInfo;
 class InstallerSessionProvider extends SessionProvider {
        /**
         * Pretend there is a session, to avoid MWCryptRand overhead
+        * @param WebRequest $request
+        * @return SessionInfo
         */
        public function provideSessionInfo( WebRequest $request ) {
                return new SessionInfo( 1, [
@@ -40,6 +42,7 @@ class InstallerSessionProvider extends SessionProvider {
 
        /**
         * Yes we will treat your data with great care!
+        * @return bool
         */
        public function persistsSessionId() {
                return true;
@@ -47,6 +50,7 @@ class InstallerSessionProvider extends SessionProvider {
 
        /**
         * Sure, you can be whoever you want, as long as you have ID 0
+        * @return bool
         */
        public function canChangeUser() {
                return true;
index b4de44d..a2aa8c0 100644 (file)
@@ -125,6 +125,7 @@ class MssqlUpdater extends DatabaseUpdater {
         * @param string $updatekey
         * @param string $patch
         * @param bool $fullpath
+        * @return bool
         */
        protected function updateSchema( $table, $updatekey, $patch, $fullpath = false ) {
                if ( !$this->db->tableExists( $table, __METHOD__ ) ) {
index dc63899..c5dd4dc 100644 (file)
@@ -223,6 +223,7 @@ class MysqlInstaller extends DatabaseInstaller {
 
        /**
         * @param string $s
+        * @param string $escapeChar
         * @return string
         */
        protected function escapeLikeInternal( $s, $escapeChar = '`' ) {
@@ -342,6 +343,8 @@ class MysqlInstaller extends DatabaseInstaller {
        /**
         * Convert a wildcard (as used in LIKE) to a regex
         * Slashes are escaped, slash terminators included
+        * @param string $wildcard
+        * @return string
         */
        protected function likeToRegex( $wildcard ) {
                $r = preg_quote( $wildcard, '/' );
index 2abc6b6..556d0d5 100644 (file)
@@ -267,7 +267,7 @@ class MysqlUpdater extends DatabaseUpdater {
 
                        // 1.25
                        // note this patch covers other _comment and _description fields too
-                       [ 'modifyField', 'recentchanges', 'rc_comment', 'patch-editsummary-length.sql' ],
+                       [ 'doExtendCommentLengths' ],
 
                        // 1.26
                        [ 'dropTable', 'hitcounter' ],
@@ -390,7 +390,7 @@ class MysqlUpdater extends DatabaseUpdater {
                global $IP;
 
                if ( !$this->doTable( 'interwiki' ) ) {
-                       return true;
+                       return;
                }
 
                if ( $this->db->tableExists( "interwiki", __METHOD__ ) ) {
@@ -1181,6 +1181,22 @@ class MysqlUpdater extends DatabaseUpdater {
                );
        }
 
+       protected function doExtendCommentLengths() {
+               $table = $this->db->tableName( 'revision' );
+               $res = $this->db->query( "SHOW COLUMNS FROM $table LIKE 'rev_comment'" );
+               $row = $this->db->fetchObject( $res );
+
+               if ( $row && ( $row->Type !== "varbinary(767)" || $row->Default !== "" ) ) {
+                       $this->applyPatch(
+                               'patch-editsummary-length.sql',
+                               false,
+                               'Extending edit summary lengths (and setting defaults)'
+                       );
+               } else {
+                       $this->output( '...comment fields are up to date' );
+               }
+       }
+
        public function getSchemaVars() {
                global $wgDBTableOptions;
 
index e5a5c94..07aeb13 100644 (file)
@@ -783,7 +783,8 @@ END;
                $info = $this->db->fieldInfo( $table, $field );
                if ( $info->defaultValue() !== $default ) {
                        $this->output( "Changing '$table.$field' default value\n" );
-                       $this->db->query( "ALTER TABLE $table ALTER $field SET DEFAULT " . $default );
+                       $this->db->query( "ALTER TABLE $table ALTER $field SET DEFAULT "
+                               . $this->db->addQuotes( $default ) );
                }
        }
 
index 27300f3..e0e54c8 100644 (file)
@@ -1005,6 +1005,7 @@ class WebInstaller extends Installer {
         *
         * @see getRadioSet
         *
+        * @param mixed[] $params
         * @return array
         */
        public function getRadioElements( $params ) {
index 8dd6193..2156820 100644 (file)
@@ -88,7 +88,7 @@ class Interwiki {
         * @since 1.26
         */
        public static function invalidateCache( $prefix ) {
-               return MediaWikiServices::getInstance()->getInterwikiLookup()->invalidateCache( $prefix );
+               MediaWikiServices::getInstance()->getInterwikiLookup()->invalidateCache( $prefix );
        }
 
        /**
index 649e2af..f9e2c3d 100644 (file)
@@ -177,7 +177,7 @@ class JobQueueMemory extends JobQueue {
                return new MappedIterator(
                        $unclaimed,
                        function ( $value ) {
-                               $this->jobFromSpecInternal( $value );
+                               return $this->jobFromSpecInternal( $value );
                        }
                );
        }
@@ -196,7 +196,7 @@ class JobQueueMemory extends JobQueue {
                return new MappedIterator(
                        $claimed,
                        function ( $value ) {
-                               $this->jobFromSpecInternal( $value );
+                               return $this->jobFromSpecInternal( $value );
                        }
                );
        }
index a1935df..4e3409a 100644 (file)
@@ -138,6 +138,7 @@ class JobQueueSecondTestQueue extends JobQueue {
        /**
         * @see JobQueue::ack()
         * @param Job $job
+        * @return Job|bool
         */
        protected function doAck( Job $job ) {
                return $this->mainQueue->doAck( $job );
@@ -172,6 +173,7 @@ class JobQueueSecondTestQueue extends JobQueue {
 
        /**
         * @see JobQueue::delete()
+        * @return bool
         * @throws MWException
         */
        protected function doDelete() {
index 7ce2c74..f26beee 100644 (file)
@@ -79,6 +79,9 @@ abstract class JobQueueAggregator {
 
        /**
         * @see JobQueueAggregator::notifyQueueEmpty()
+        * @param string $wiki
+        * @param string $type
+        * @return bool
         */
        abstract protected function doNotifyQueueEmpty( $wiki, $type );
 
@@ -97,6 +100,9 @@ abstract class JobQueueAggregator {
 
        /**
         * @see JobQueueAggregator::notifyQueueNonEmpty()
+        * @param string $wiki
+        * @param string $type
+        * @return bool
         */
        abstract protected function doNotifyQueueNonEmpty( $wiki, $type );
 
index 4c16d7f..0aa33ca 100644 (file)
@@ -38,8 +38,15 @@ use MediaWiki\MediaWikiServices;
 class HTMLCacheUpdateJob extends Job {
        function __construct( Title $title, array $params ) {
                parent::__construct( 'htmlCacheUpdate', $title, $params );
-               // Base backlink purge jobs can be de-duplicated
-               $this->removeDuplicates = ( !isset( $params['range'] ) && !isset( $params['pages'] ) );
+               // Avoid the overhead of de-duplication when it would be pointless.
+               // Note that these jobs always set page_touched to the current time,
+               // so letting the older existing job "win" is still correct.
+               $this->removeDuplicates = (
+                       // Ranges rarely will line up
+                       !isset( $params['range'] ) &&
+                       // Multiple pages per job make matches unlikely
+                       !( isset( $params['pages'] ) && count( $params['pages'] ) != 1 )
+               );
        }
 
        /**
index 9f3550f..424fcec 100644 (file)
@@ -207,7 +207,7 @@ class RefreshLinksJob extends Job {
                        if ( $page->getTouched() >= $this->params['rootJobTimestamp'] || $opportunistic ) {
                                // Cache is suspected to be up-to-date. As long as the cache rev ID matches
                                // and it reflects the job's triggering change, then it is usable.
-                               $parserOutput = ParserCache::singleton()->getDirty( $page, $parserOptions );
+                               $parserOutput = $services->getParserCache()->getDirty( $page, $parserOptions );
                                if ( !$parserOutput
                                        || $parserOutput->getCacheRevisionId() != $revision->getId()
                                        || $parserOutput->getCacheTime() < $skewedTimestamp
@@ -234,7 +234,7 @@ class RefreshLinksJob extends Job {
                                && $parserOutput->isCacheable()
                        ) {
                                $ctime = wfTimestamp( TS_MW, (int)$start ); // cache time
-                               ParserCache::singleton()->save(
+                               $services->getParserCache()->save(
                                        $parserOutput, $page, $parserOptions, $ctime, $revision->getId()
                                );
                        }
index cd80066..ee88d0d 100644 (file)
@@ -142,7 +142,15 @@ class CSSMin {
                if ( preg_match( '/^[\r\n\t\x20-\x7e]+$/', $contents ) ) {
                        // Do not base64-encode non-binary files (sane SVGs).
                        // (This often produces longer URLs, but they compress better, yielding a net smaller size.)
-                       $uri = 'data:' . $type . ',' . rawurlencode( $contents );
+                       $encoded = rawurlencode( $contents );
+                       // Unencode some things that don't need to be encoded, to make the encoding smaller
+                       $encoded = strtr( $encoded, [
+                               '%20' => ' ', // Unencode spaces
+                               '%2F' => '/', // Unencode slashes
+                               '%3A' => ':', // Unencode colons
+                               '%3D' => '=', // Unencode equals signs
+                       ] );
+                       $uri = 'data:' . $type . ',' . $encoded;
                        if ( !$ie8Compat || strlen( $uri ) < self::DATA_URI_SIZE_LIMIT ) {
                                return $uri;
                        }
index 27f8728..7e65216 100644 (file)
@@ -98,7 +98,7 @@ class HttpStatus {
                $message = self::getMessage( $code );
                if ( $message === null ) {
                        trigger_error( "Unknown HTTP status code $code", E_USER_WARNING );
-                       return false;
+                       return;
                }
 
                MediaWiki\HeaderCallback::warnIfHeadersSent();
index 3bfb531..1c48f49 100644 (file)
@@ -510,7 +510,7 @@ class IP {
         *     2001:0db8:85a3::7344 - 2001:0db8:85a3::7344   Explicit range
         *     2001:0db8:85a3::7344                          Single IP
         * @param string $range IP range
-        * @return array(string, string)
+        * @return array [ string, string ]
         */
        public static function parseRange( $range ) {
                // CIDR notation
index 90c7a64..14462f1 100644 (file)
@@ -75,6 +75,7 @@ class MemoizedCallable {
         *
         * @param string $key
         * @param bool &$success
+        * @return bool
         */
        protected function fetchResult( $key, &$success ) {
                $success = false;
@@ -148,6 +149,7 @@ class MemoizedCallable {
         * @param callable $callable
         * @param array $args
         * @param int $ttl
+        * @return mixed
         */
        public static function call( $callable, array $args = [], $ttl = 3600 ) {
                $instance = new self( $callable, $ttl );
index 016c9b1..e58d98f 100644 (file)
@@ -37,6 +37,7 @@ class Xhprof {
 
        /**
         * Start xhprof profiler
+        * @return bool
         */
        public static function isEnabled() {
                return self::$enabled;
@@ -44,6 +45,9 @@ class Xhprof {
 
        /**
         * Start xhprof profiler
+        * @param int $flags
+        * @param array $options
+        * @throws Exception
         */
        public static function enable( $flags = 0, $options = [] ) {
                if ( self::isEnabled() ) {
index 2383d2a..0be4ff6 100644 (file)
@@ -107,6 +107,7 @@ class XhprofData {
         * The resulting array is left padded with nulls, so a key
         * with no parent (eg 'main()') will return [null, 'function'].
         *
+        * @param string $key
         * @return array
         */
        public static function splitKey( $key ) {
index 77473d1..b8eec3f 100644 (file)
@@ -1714,7 +1714,7 @@ abstract class FileBackendStore extends FileBackend {
                        return; // invalid storage path
                }
                $mtime = ConvertibleTimestamp::convert( TS_UNIX, $val['mtime'] );
-               $ttl = $this->memCache->adaptiveTTL( $mtime, 7 * 86400, 300, .1 );
+               $ttl = $this->memCache->adaptiveTTL( $mtime, 7 * 86400, 300, 0.1 );
                $key = $this->fileCacheKey( $path );
                // Set the cache unless it is currently salted.
                $this->memCache->set( $key, $val, $ttl );
index dfc7c4b..e9fb11f 100644 (file)
@@ -333,7 +333,7 @@ class IEContentAnalyzer {
         * @param string $chunk the first 256 bytes of the file
         * @param string $proposed the MIME type proposed by the server
         *
-        * @return Array: map of IE version to detected MIME type
+        * @return array map of IE version to detected MIME type
         */
        public function getRealMimesFromData( $fileName, $chunk, $proposed ) {
                $types = $this->getMimesFromData( $fileName, $chunk, $proposed );
@@ -371,7 +371,7 @@ class IEContentAnalyzer {
         * @param string $chunk the first 256 bytes of the file
         * @param string $proposed the MIME type proposed by the server
         *
-        * @return Array: map of IE version to detected MIME type
+        * @return array map of IE version to detected MIME type
         */
        public function getMimesFromData( $fileName, $chunk, $proposed ) {
                $types = [];
index f834ccf..8a23db5 100644 (file)
@@ -476,7 +476,7 @@ abstract class BagOStuff implements IExpiringStore, LoggerAwareInterface {
                $lSince = microtime( true ); // lock timestamp
 
                return new ScopedCallback( function () use ( $key, $lSince, $expiry ) {
-                       $latency = .050; // latency skew (err towards keeping lock present)
+                       $latency = 0.050; // latency skew (err towards keeping lock present)
                        $age = ( microtime( true ) - $lSince + $latency );
                        if ( ( $age + $latency ) >= $expiry ) {
                                $this->logger->warning( "Lock for $key held too long ($age sec)." );
index 5128d82..0188991 100644 (file)
@@ -45,7 +45,7 @@ class MemcachedBagOStuff extends BagOStuff {
        protected function applyDefaultParams( $params ) {
                return $params + [
                        'compress_threshold' => 1500,
-                       'connect_timeout' => .5,
+                       'connect_timeout' => 0.5,
                        'debug' => false
                ];
        }
index c1c9cc1..1f757a4 100644 (file)
@@ -1424,7 +1424,7 @@ class WANObjectCache implements IExpiringStore, LoggerAwareInterface {
         * @return int Adaptive TTL
         * @since 1.28
         */
-       public function adaptiveTTL( $mtime, $maxTTL, $minTTL = 30, $factor = .2 ) {
+       public function adaptiveTTL( $mtime, $maxTTL, $minTTL = 30, $factor = 0.2 ) {
                if ( is_float( $mtime ) || ctype_digit( $mtime ) ) {
                        $mtime = (int)$mtime; // handle fractional seconds and string integers
                }
index af431a6..57a12a4 100644 (file)
@@ -39,7 +39,7 @@ class TransactionProfiler implements LoggerAwareInterface {
        /** @var float Seconds */
        protected $dbLockThreshold = 3.0;
        /** @var float Seconds */
-       protected $eventThreshold = .25;
+       protected $eventThreshold = 0.25;
        /** @var bool */
        protected $silenced = false;
 
index 64fbea3..c904092 100644 (file)
@@ -54,8 +54,8 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
        const PING_TTL = 1.0;
        const PING_QUERY = 'SELECT 1 AS ping';
 
-       const TINY_WRITE_SEC = .010;
-       const SLOW_WRITE_SEC = .500;
+       const TINY_WRITE_SEC = 0.010;
+       const SLOW_WRITE_SEC = 0.500;
        const SMALL_WRITE_ROWS = 100;
 
        /** @var string SQL query */
@@ -2106,6 +2106,7 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
 
        /**
         * @param string $s
+        * @param string $escapeChar
         * @return string
         */
        protected function escapeLikeInternal( $s, $escapeChar = '`' ) {
@@ -2416,6 +2417,15 @@ abstract class Database implements IDatabase, IMaintainableDatabase, LoggerAware
         * we don't want to select everything into memory
         *
         * @see IDatabase::insertSelect()
+        * @param string $destTable
+        * @param string|array $srcTable
+        * @param array $varMap
+        * @param array $conds
+        * @param string $fname
+        * @param array $insertOptions
+        * @param array $selectOptions
+        * @param array $selectJoinConds
+        * @return bool
         */
        protected function nativeInsertSelect( $destTable, $srcTable, $varMap, $conds,
                $fname = __METHOD__,
index 8f3cab8..4ebc623 100644 (file)
@@ -1110,6 +1110,7 @@ class DatabaseMssql extends Database {
         * MS SQL supports more pattern operators than other databases (ex: [,],^)
         *
         * @param string $s
+        * @param string $escapeChar
         * @return string
         */
        protected function escapeLikeInternal( $s, $escapeChar = '`' ) {
index ac59bd6..672b345 100644 (file)
@@ -1158,8 +1158,8 @@ SQL;
        }
 
        /**
-        * @var string $table
-        * @var string $field
+        * @param string $table
+        * @param string $field
         * @return PostgresField|null
         */
        public function fieldInfo( $table, $field ) {
index 0283c4b..78889e5 100644 (file)
@@ -206,6 +206,7 @@ interface IDatabase {
         * Returns true if this database does an implicit sort when doing GROUP BY
         *
         * @return bool
+        * @deprecated Since 1.30; only use grouped or aggregated fields in the SELECT
         */
        public function implicitGroupby();
 
index fdc5ac8..8292c03 100644 (file)
@@ -157,7 +157,7 @@ class LoadMonitor implements ILoadMonitor {
                        $newWeight = $movAveRatio * $coefficient + ( 1 - $movAveRatio ) * $lastWeight;
 
                        // Scale from 10% to 100% of nominal weight
-                       $weightScales[$i] = max( $newWeight, .10 );
+                       $weightScales[$i] = max( $newWeight, 0.10 );
 
                        if ( !$conn ) {
                                $lagTimes[$i] = false;
index 7369751..d346f65 100644 (file)
@@ -40,8 +40,8 @@ class NullStatsdDataFactory implements IBufferingStatsdDataFactory {
         * and logged in users by sending the current userId of a user
         * with each request with a key of "uniques" (or similar).
         *
-        * @param  string|array $key The metric(s) to set.
-        * @param  float $value The value for the stats.
+        * @param string|array $key The metric(s) to set.
+        * @param float $value The value for the stats.
         *
         * @return array
         */
index a148a39..37a967f 100644 (file)
@@ -58,15 +58,14 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
                        'url' => 'http://localhost:8000/',
                        'prefix' => 'localhost',
                        'domain' => 'localhost',
+                       'timeout' => null,
                        'forwardCookies' => false,
                        'HTTPProxy' => null,
                ], $params );
                // Ensure that the url parameter has a trailing slash.
-               $mparams['url'] = preg_replace(
-                       '#/?$#',
-                       '/',
-                       $mparams['url']
-               );
+               if ( substr( $mparams['url'], -1 ) !== '/' ) {
+                       $mparams['url'] .= '/';
+               }
                // Ensure the correct domain format: strip protocol, port,
                // and trailing slash if present.  This lets us use
                // $wgCanonicalServer as a default value, which is very convenient.
@@ -147,6 +146,10 @@ class ParsoidVirtualRESTService extends VirtualRESTService {
         * Visual Editor "pretends" the V1 API is like.  A previous version of
         * ParsoidVirtualRESTService translated these to the "real" Parsoid v1
         * API.  We now translate these to the "real" Parsoid v3 API.
+        * @param array $req
+        * @param Closure $idGeneratorFunc
+        * @return array
+        * @throws Exception
         */
        public function onParsoid1Request( array $req, Closure $idGeneratorFunc ) {
                $parts = explode( '/', $req['url'] );
index 90865ff..192b4bd 100644 (file)
@@ -112,6 +112,10 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
 
        /**
         * Remaps Parsoid v1/v3 requests to RESTBase v1 requests.
+        * @param array $reqs
+        * @param Closure $idGeneratorFunc
+        * @return array
+        * @throws Exception
         */
        public function onParsoidRequests( array $reqs, Closure $idGeneratorFunc ) {
                $result = [];
@@ -145,6 +149,10 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
         * NOTE: the POST APIs aren't "real" Parsoid v1 APIs, they are just what
         * Visual Editor "pretends" the V1 API is like.  (See
         * ParsoidVirtualRESTService.)
+        * @param array $req
+        * @param Closure $idGeneratorFunc
+        * @return array
+        * @throws Exception
         */
        public function onParsoid1Request( array $req, Closure $idGeneratorFunc ) {
                $parts = explode( '/', $req['url'] );
@@ -233,6 +241,10 @@ class RestbaseVirtualRESTService extends VirtualRESTService {
         *   * body: array( 'wikitext' => ... ) or array( 'wikitext' => ..., 'body_only' => true/false )
         *   * $title is optional
         *   * $revision is optional
+        * @param array $req
+        * @param Closure $idGeneratorFunc
+        * @return array
+        * @throws Exception
         */
        public function onParsoid3Request( array $req, Closure $idGeneratorFunc ) {
                $parts = explode( '/', $req['url'] );
index e12766a..c46acc6 100644 (file)
@@ -131,6 +131,7 @@ class XMPReader implements LoggerAwareInterface {
 
        /**
         * Primary job is to initialize the XMLParser
+        * @param LoggerInterface|null $logger
         */
        function __construct( LoggerInterface $logger = null ) {
                if ( !function_exists( 'xml_parser_create_ns' ) ) {
@@ -189,6 +190,7 @@ class XMPReader implements LoggerAwareInterface {
 
        /**
         * Check if this instance supports using this class
+        * @return bool
         */
        public static function isSupported() {
                return function_exists( 'xml_parser_create_ns' ) && class_exists( 'XMLReader' );
index 3e4731a..e23989d 100644 (file)
@@ -299,6 +299,8 @@ class WebPHandler extends BitmapHandler {
        /**
         * Must use "im" for XCF
         *
+        * @param string $dstPath
+        * @param bool $checkDstPath
         * @return string
         */
        protected function getScalerType( $dstPath, $checkDstPath = true ) {
index f52cd8d..b91bd9a 100644 (file)
@@ -466,7 +466,7 @@ class Article implements Page {
                # Allow frames by default
                $outputPage->allowClickjacking();
 
-               $parserCache = ParserCache::singleton();
+               $parserCache = MediaWikiServices::getInstance()->getParserCache();
 
                $parserOptions = $this->getParserOptions();
                # Render printable version, use printable version cache
@@ -1695,24 +1695,11 @@ class Article implements Page {
 
                $outputPage->enableOOUI();
 
-               $options = [];
-               $options[] = [
-                       'data' => 'other',
-                       'label' => $ctx->msg( 'deletereasonotherlist' )->inContentLanguage()->text(),
-               ];
-               $list = $ctx->msg( 'deletereason-dropdown' )->inContentLanguage()->text();
-               foreach ( explode( "\n", $list ) as $option ) {
-                       $value = trim( $option );
-                       if ( $value == '' ) {
-                               continue;
-                       } elseif ( substr( $value, 0, 1 ) == '*' && substr( $value, 1, 1 ) != '*' ) {
-                               $options[] = [ 'optgroup' => trim( substr( $value, 1 ) ) ];
-                       } elseif ( substr( $value, 0, 2 ) == '**' ) {
-                               $options[] = [ 'data' => trim( substr( $value, 2 ) ) ];
-                       } else {
-                               $options[] = [ 'data' => trim( $value ) ];
-                       }
-               }
+               $options = Xml::listDropDownOptions(
+                       $ctx->msg( 'deletereason-dropdown' )->inContentLanguage()->text(),
+                       [ 'other' => $ctx->msg( 'deletereasonotherlist' )->inContentLanguage()->text() ]
+               );
+               $options = Xml::listDropDownOptionsOoui( $options );
 
                $fields[] = new OOUI\FieldLayout(
                        new OOUI\DropdownInputWidget( [
index 4785ef1..20bc614 100644 (file)
@@ -55,8 +55,7 @@ class ImageHistoryPseudoPager extends ReverseChronologicalPager {
        public function __construct( $imagePage ) {
                parent::__construct( $imagePage->getContext() );
                $this->mImagePage = $imagePage;
-               $this->mTitle = clone $imagePage->getTitle();
-               $this->mTitle->setFragment( '#filehistory' );
+               $this->mTitle = $imagePage->getTitle()->createFragmentTarget( 'filehistory' );
                $this->mImg = null;
                $this->mHist = [];
                $this->mRange = [ 0, 0 ]; // display range
index bf8a597..c04eb0a 100644 (file)
@@ -213,6 +213,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @todo Move this UI stuff somewhere else
         *
         * @see ContentHandler::getActionOverrides
+        * @return array
         */
        public function getActionOverrides() {
                return $this->getContentHandler()->getActionOverrides();
@@ -982,18 +983,12 @@ class WikiPage implements Page, IDBAccessObject {
 
                $dbr = wfGetDB( DB_REPLICA );
 
-               if ( $dbr->implicitGroupby() ) {
-                       $realNameField = 'user_real_name';
-               } else {
-                       $realNameField = 'MIN(user_real_name) AS user_real_name';
-               }
-
                $tables = [ 'revision', 'user' ];
 
                $fields = [
                        'user_id' => 'rev_user',
                        'user_name' => 'rev_user_text',
-                       $realNameField,
+                       'user_real_name' => 'MIN(user_real_name)',
                        'timestamp' => 'MAX(rev_timestamp)',
                ];
 
@@ -1070,7 +1065,8 @@ class WikiPage implements Page, IDBAccessObject {
                }
 
                if ( $useParserCache ) {
-                       $parserOutput = ParserCache::singleton()->get( $this, $parserOptions );
+                       $parserOutput = MediaWikiServices::getInstance()->getParserCache()
+                               ->get( $this, $parserOptions );
                        if ( $parserOutput !== false ) {
                                return $parserOutput;
                        }
@@ -1919,10 +1915,10 @@ class WikiPage implements Page, IDBAccessObject {
                                        $wikiPage = $this;
                                        // Trigger post-create hook
                                        $params = [ &$wikiPage, &$user, $content, $summary,
-                                               $flags & EDIT_MINOR, null, null, &$flags, $revision ];
+                                                               $flags & EDIT_MINOR, null, null, &$flags, $revision ];
                                        Hooks::run( 'PageContentInsertComplete', $params );
                                        // Trigger post-save hook
-                                       $params = array_merge( $params, [ &$status, $meta['baseRevId'] ] );
+                                       $params = array_merge( $params, [ &$status, $meta['baseRevId'], 0 ] );
                                        Hooks::run( 'PageContentSaveComplete', $params );
                                }
                        ),
@@ -2162,7 +2158,7 @@ class WikiPage implements Page, IDBAccessObject {
 
                // Save it to the parser cache.
                // Make sure the cache time matches page_touched to avoid double parsing.
-               ParserCache::singleton()->save(
+               MediaWikiServices::getInstance()->getParserCache()->save(
                        $editInfo->output, $this, $editInfo->popts,
                        $revision->getTimestamp(), $editInfo->revid
                );
@@ -2732,6 +2728,7 @@ class WikiPage implements Page, IDBAccessObject {
         * @param array|string &$error Array of errors to append to
         * @param User $user The deleting user
         * @param array $tags Tags to apply to the deletion action
+        * @param string $logsubtype
         * @return Status Status object; if successful, $status->value is the log_id of the
         *   deletion log entry. If the page couldn't be deleted because it wasn't
         *   found, $status is a non-fatal 'cannotdelete' error
index 599fbf6..fab9ab7 100644 (file)
@@ -257,12 +257,17 @@ class BlockLevelPass {
                                        $output .= $this->nextItem( $prefix[$commonPrefixLength - 1] );
                                }
 
+                               # Close an open <dt> if we have a <dd> (":") starting on this line
+                               if ( $this->DTopen && $commonPrefixLength > 0 && $prefix[$commonPrefixLength - 1] === ':' ) {
+                                       $output .= $this->nextItem( ':' );
+                               }
+
                                # Open prefixes where appropriate.
                                if ( $lastPrefix && $prefixLength > $commonPrefixLength ) {
                                        $output .= "\n";
                                }
                                while ( $prefixLength > $commonPrefixLength ) {
-                                       $char = substr( $prefix, $commonPrefixLength, 1 );
+                                       $char = $prefix[$commonPrefixLength];
                                        $output .= $this->openList( $char );
 
                                        if ( ';' === $char ) {
index 0d11d5a..d00b333 100644 (file)
@@ -3237,6 +3237,8 @@ class Parser {
                                        . wfMessage( 'parser-template-loop-warning', $titleText )->inContentLanguage()->text()
                                        . '</span>';
                                $this->addTrackingCategory( 'template-loop-category' );
+                               $this->mOutput->addWarning( wfMessage( 'template-loop-warning',
+                                       wfEscapeWikiText( $titleText ) )->text() );
                                wfDebug( __METHOD__ . ": template loop broken at '$titleText'\n" );
                        }
                }
@@ -4208,6 +4210,8 @@ class Parser {
                        # Save headline for section edit hint before it's escaped
                        $headlineHint = $safeHeadline;
 
+                       # Decode HTML entities
+                       $safeHeadline = Sanitizer::decodeCharReferences( $safeHeadline );
                        $fallbackHeadline = Sanitizer::escapeIdForAttribute( $safeHeadline, Sanitizer::ID_FALLBACK );
                        $linkAnchor = Sanitizer::escapeIdForLink( $safeHeadline );
                        $safeHeadline = Sanitizer::escapeIdForAttribute( $safeHeadline, Sanitizer::ID_PRIMARY );
@@ -5768,6 +5772,7 @@ class Parser {
                # Strip out wikitext links(they break the anchor)
                $text = $this->stripSectionName( $text );
                $text = Sanitizer::normalizeSectionNameWhitespace( $text );
+               $text = Sanitizer::decodeCharReferences( $text );
                return '#' . Sanitizer::escapeIdForLink( $text );
        }
 
@@ -5786,6 +5791,7 @@ class Parser {
                # Strip out wikitext links(they break the anchor)
                $text = $this->stripSectionName( $text );
                $text = Sanitizer::normalizeSectionNameWhitespace( $text );
+               $text = Sanitizer::decodeCharReferences( $text );
 
                if ( isset( $wgFragmentMode[1] ) && $wgFragmentMode[1] === 'legacy' ) {
                        // ForAttribute() and ForLink() are the same for legacy encoding
index 2dd4085..3480a51 100644 (file)
@@ -223,7 +223,7 @@ class ParserOutput extends CacheTime {
        // finalizeAdaptiveCacheExpiry() uses TTL = MAX( m * PARSE_TIME + b, MIN_AR_TTL)
        // Current values imply that m=3933.333333 and b=-333.333333
        // See https://www.nngroup.com/articles/website-response-times/
-       const PARSE_FAST_SEC = .100; // perceived "fast" page parse
+       const PARSE_FAST_SEC = 0.100; // perceived "fast" page parse
        const PARSE_SLOW_SEC = 1.0; // perceived "slow" page parse
        const FAST_AR_TTL = 60; // adaptive TTL for "fast" pages
        const SLOW_AR_TTL = 3600; // adaptive TTL for "slow" pages
@@ -243,6 +243,7 @@ class ParserOutput extends CacheTime {
         * return value is suitable for writing back via setText() but is not valid
         * for display to the user.
         *
+        * @return string
         * @since 1.27
         */
        public function getRawText() {
@@ -258,7 +259,7 @@ class ParserOutput extends CacheTime {
                                        global $wgOut, $wgLang;
                                        $editsectionPage = Title::newFromText( htmlspecialchars_decode( $m[1] ) );
                                        $editsectionSection = htmlspecialchars_decode( $m[2] );
-                                       $editsectionContent = isset( $m[4] ) ? $m[3] : null;
+                                       $editsectionContent = isset( $m[4] ) ? Sanitizer::decodeCharReferences( $m[3] ) : null;
 
                                        if ( !is_object( $editsectionPage ) ) {
                                                throw new MWException( "Bad parser output text." );
@@ -298,7 +299,10 @@ class ParserOutput extends CacheTime {
                $this->mSpeculativeRevId = $id;
        }
 
-       /** @since 1.28 */
+       /**
+        * @return int|null
+        * @since 1.28
+        */
        public function getSpeculativeRevIdUsed() {
                return $this->mSpeculativeRevId;
        }
@@ -320,6 +324,7 @@ class ParserOutput extends CacheTime {
        }
 
        /**
+        * @return array
         * @since 1.25
         */
        public function getIndicators() {
@@ -382,7 +387,10 @@ class ParserOutput extends CacheTime {
                return $this->mModuleStyles;
        }
 
-       /** @since 1.23 */
+       /**
+        * @return array
+        * @since 1.23
+        */
        public function getJsConfigVars() {
                return $this->mJsConfigVars;
        }
@@ -471,6 +479,8 @@ class ParserOutput extends CacheTime {
        }
 
        /**
+        * @param string $id
+        * @param string $content
         * @since 1.25
         */
        public function setIndicator( $id, $content ) {
@@ -836,6 +846,8 @@ class ParserOutput extends CacheTime {
         * @code
         *    $parser->getOutput()->my_ext_foo = '...';
         * @endcode
+        * @param string $name
+        * @param mixed $value
         */
        public function setProperty( $name, $value ) {
                $this->mProperties[$name] = $value;
index 24474d5..49e961a 100644 (file)
@@ -62,6 +62,7 @@ abstract class Preprocessor {
         *
         * @param string $text
         * @param int $flags
+        * @param string $tree
         */
        protected function cacheSetTree( $text, $flags, $tree ) {
                $config = RequestContext::getMain()->getConfig();
@@ -69,7 +70,7 @@ abstract class Preprocessor {
                $length = strlen( $text );
                $threshold = $config->get( 'PreprocessorCacheThreshold' );
                if ( $threshold === false || $length < $threshold || $length > 1e6 ) {
-                       return false;
+                       return;
                }
 
                $cache = ObjectCache::getLocalClusterInstance();
index 8e84cb2..332f8e9 100644 (file)
@@ -1869,6 +1869,8 @@ class PPNode_Hash_Tree implements PPNode {
 
        /**
         * Like splitArg() but for a raw child array. For internal use only.
+        * @param array $children
+        * @return array
         */
        public static function splitRawArg( array $children ) {
                $bits = [];
@@ -1910,6 +1912,8 @@ class PPNode_Hash_Tree implements PPNode {
 
        /**
         * Like splitExt() but for a raw child array. For internal use only.
+        * @param array $children
+        * @return array
         */
        public static function splitRawExt( array $children ) {
                $bits = [];
@@ -1953,6 +1957,8 @@ class PPNode_Hash_Tree implements PPNode {
 
        /**
         * Like splitHeading() but for a raw child array. For internal use only.
+        * @param array $children
+        * @return array
         */
        public static function splitRawHeading( array $children ) {
                $bits = [];
@@ -1984,6 +1990,8 @@ class PPNode_Hash_Tree implements PPNode {
 
        /**
         * Like splitTemplate() but for a raw child array. For internal use only.
+        * @param array $children
+        * @return array
         */
        public static function splitRawTemplate( array $children ) {
                $parts = [];
index 1f1add7..17b62d7 100644 (file)
@@ -17,6 +17,7 @@
  *
  * @file
  */
+use MediaWiki\MediaWikiServices;
 
 class PoolWorkArticleView extends PoolCounterWork {
        /** @var WikiPage */
@@ -28,6 +29,9 @@ class PoolWorkArticleView extends PoolCounterWork {
        /** @var int */
        private $revid;
 
+       /** @var ParserCache */
+       private $parserCache;
+
        /** @var ParserOptions */
        private $parserOptions;
 
@@ -66,7 +70,8 @@ class PoolWorkArticleView extends PoolCounterWork {
                $this->cacheable = $useParserCache;
                $this->parserOptions = $parserOptions;
                $this->content = $content;
-               $this->cacheKey = ParserCache::singleton()->getKey( $page, $parserOptions );
+               $this->parserCache = MediaWikiServices::getInstance()->getParserCache();
+               $this->cacheKey = $this->parserCache->getKey( $page, $parserOptions );
                $keyPrefix = $this->cacheKey ?: wfMemcKey( 'articleview', 'missingcachekey' );
                parent::__construct( 'ArticleView', $keyPrefix . ':revid:' . $revid );
        }
@@ -153,7 +158,7 @@ class PoolWorkArticleView extends PoolCounterWork {
                }
 
                if ( $this->cacheable && $this->parserOutput->isCacheable() && $isCurrent ) {
-                       ParserCache::singleton()->save(
+                       $this->parserCache->save(
                                $this->parserOutput, $this->page, $this->parserOptions, $cacheTime, $this->revid );
                }
 
@@ -175,7 +180,7 @@ class PoolWorkArticleView extends PoolCounterWork {
         * @return bool
         */
        public function getCachedWork() {
-               $this->parserOutput = ParserCache::singleton()->get( $this->page, $this->parserOptions );
+               $this->parserOutput = $this->parserCache->get( $this->page, $this->parserOptions );
 
                if ( $this->parserOutput === false ) {
                        wfDebug( __METHOD__ . ": parser cache miss\n" );
@@ -190,7 +195,7 @@ class PoolWorkArticleView extends PoolCounterWork {
         * @return bool
         */
        public function fallback() {
-               $this->parserOutput = ParserCache::singleton()->getDirty( $this->page, $this->parserOptions );
+               $this->parserOutput = $this->parserCache->getDirty( $this->page, $this->parserOptions );
 
                if ( $this->parserOutput === false ) {
                        wfDebugLog( 'dirty', 'dirty missing' );
index 10ba83f..531a3eb 100644 (file)
 class IRCColourfulRCFeedFormatter implements RCFeedFormatter {
        /**
         * @see RCFeedFormatter::getLine
+        * @param array $feed
+        * @param RecentChange $rc
+        * @param string|null $actionComment
+        * @return string|null
         */
        public function getLine( array $feed, RecentChange $rc, $actionComment ) {
                global $wgUseRCPatrol, $wgUseNPPatrol, $wgLocalInterwikis,
index 20f88bd..a90d648 100644 (file)
@@ -36,6 +36,10 @@ abstract class MachineReadableRCFeedFormatter implements RCFeedFormatter {
        /**
         * Generates a notification that can be easily interpreted by a machine.
         * @see RCFeedFormatter::getLine
+        * @param array $feed
+        * @param RecentChange $rc
+        * @param string|null $actionComment
+        * @return string|null
         */
        public function getLine( array $feed, RecentChange $rc, $actionComment ) {
                global $wgCanonicalServer, $wgServerName, $wgScriptPath;
index f0fcd7d..8a3aa0c 100644 (file)
@@ -33,7 +33,7 @@
  *      'formatter' => 'JSONRCFeedFormatter',
  *      'uri'       => "redis://127.0.0.1:6379/rc.$wgDBname",
  * );
- * @encode
+ * @endcode
  *
  * @since 1.22
  */
@@ -41,6 +41,9 @@ class RedisPubSubFeedEngine extends RCFeedEngine {
 
        /**
         * @see FormattedRCFeed::send
+        * @param array $feed
+        * @param string $line
+        * @return bool
         */
        public function send( array $feed, $line ) {
                $parsed = wfParseUrl( $feed['uri'] );
index 61ced5f..f76d771 100644 (file)
@@ -25,6 +25,9 @@
 class UDPRCFeedEngine extends RCFeedEngine {
        /**
         * @see RCFeedEngine::send
+        * @param array $feed
+        * @param string $line
+        * @return bool
         */
        public function send( array $feed, $line ) {
                $transport = UDPTransport::newFromString( $feed['uri'] );
index eac04a9..bf33c6c 100644 (file)
@@ -332,6 +332,12 @@ class ExtensionRegistry {
                }
 
                foreach ( $info['callbacks'] as $name => $cb ) {
+                       if ( !is_callable( $cb ) ) {
+                               if ( is_array( $cb ) ) {
+                                       $cb = '[ ' . implode( ', ', $cb ) . ' ]';
+                               }
+                               throw new UnexpectedValueException( "callback '$cb' is not callable" );
+                       }
                        call_user_func( $cb, $info['credits'][$name] );
                }
        }
index d26c961..8b54959 100644 (file)
@@ -381,11 +381,13 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
         * @return string[] CSS declarations to use given URIs as background-image
         */
        protected function getCssDeclarations( $primary, $fallback ) {
+               $primaryUrl = CSSMin::buildUrlValue( $primary );
+               $fallbackUrl = CSSMin::buildUrlValue( $fallback );
                return [
-                       "background-image: url($fallback);",
-                       "background-image: linear-gradient(transparent, transparent), url($primary);",
+                       "background-image: $fallbackUrl;",
+                       "background-image: linear-gradient(transparent, transparent), $primaryUrl;",
                        // Do not serve SVG to Opera 12, bad rendering with border-radius or background-size (T87504)
-                       "background-image: -o-linear-gradient(transparent, transparent), url($fallback);",
+                       "background-image: -o-linear-gradient(transparent, transparent), $fallbackUrl;",
                ];
        }
 
@@ -427,6 +429,8 @@ class ResourceLoaderImageModule extends ResourceLoaderModule {
 
        /**
         * Helper method for getDefinitionSummary.
+        * @param ResourceLoaderContext $context
+        * @return array
         */
        protected function getFileHashes( ResourceLoaderContext $context ) {
                $this->loadFromDefinition();
index 08641b0..236112e 100644 (file)
@@ -43,6 +43,7 @@ class ResourceLoaderSiteModule extends ResourceLoaderWikiModule {
        }
 
        /**
+        * @param ResourceLoaderContext|null $context
         * @return array
         */
        public function getDependencies( ResourceLoaderContext $context = null ) {
index d535ffc..8b9feeb 100644 (file)
@@ -297,6 +297,7 @@ class ResourceLoaderStartUpModule extends ResourceLoaderModule {
        }
 
        /**
+        * @param ResourceLoaderContext $context
         * @return array
         */
        public function getPreloadLinks( ResourceLoaderContext $context ) {
index 9377ed6..1a390cf 100644 (file)
@@ -30,6 +30,7 @@ class ResourceLoaderUploadDialogModule extends ResourceLoaderModule {
        protected $targets = [ 'desktop', 'mobile' ];
 
        /**
+        * @param ResourceLoaderContext $context
         * @return string JavaScript code
         */
        public function getScript( ResourceLoaderContext $context ) {
index 8f58040..8e21381 100644 (file)
@@ -78,6 +78,7 @@ class ResourceLoaderUserModule extends ResourceLoaderWikiModule {
        }
 
        /**
+        * @param ResourceLoaderContext|null $context
         * @return array
         */
        public function getDependencies( ResourceLoaderContext $context = null ) {
index ceb97e4..728deb8 100644 (file)
@@ -63,7 +63,7 @@ class RevDelLogList extends RevDelList {
        public function doQuery( $db ) {
                $ids = array_map( 'intval', $this->ids );
 
-               $commentQuery = CommentStore::getKey( 'log_comment' )->getJoin();
+               $commentQuery = CommentStore::newKey( 'log_comment' )->getJoin();
 
                return $db->select(
                        [ 'logging' ] + $commentQuery['tables'],
index df653f1..4b60a0c 100644 (file)
@@ -31,6 +31,7 @@ class ParserOutputSearchDataExtractor {
        /**
         * Get a list of categories, as an array with title text strings.
         *
+        * @param ParserOutput $parserOutput
         * @return string[]
         */
        public function getCategories( ParserOutput $parserOutput ) {
@@ -46,6 +47,7 @@ class ParserOutputSearchDataExtractor {
        /**
         * Get a list of external links from ParserOutput, as an array of strings.
         *
+        * @param ParserOutput $parserOutput
         * @return string[]
         */
        public function getExternalLinks( ParserOutput $parserOutput ) {
@@ -56,6 +58,7 @@ class ParserOutputSearchDataExtractor {
         * Get a list of outgoing wiki links (including interwiki links), as
         * an array of prefixed title strings.
         *
+        * @param ParserOutput $parserOutput
         * @return string[]
         */
        public function getOutgoingLinks( ParserOutput $parserOutput ) {
@@ -74,6 +77,7 @@ class ParserOutputSearchDataExtractor {
        /**
         * Get a list of templates used in the ParserOutput content, as prefixed title strings
         *
+        * @param ParserOutput $parserOutput
         * @return string[]
         */
        public function getTemplates( ParserOutput $parserOutput ) {
index 7c2f0f2..3c8fe60 100644 (file)
@@ -269,7 +269,7 @@ abstract class SearchEngine {
         * might support more. The default in all implementations should be 'relevance.'
         *
         * @since 1.25
-        * @return array(string) the valid sort directions for setSort
+        * @return string[] the valid sort directions for setSort
         */
        public function getValidSorts() {
                return [ 'relevance' ];
index 8e86865..27046f3 100644 (file)
@@ -6,8 +6,7 @@
  */
 class SearchNearMatcher {
        /**
-        * Configuration object.
-        * @param Config $config
+        * @var Config
         */
        protected $config;
 
index 89d2299..f25c728 100644 (file)
@@ -152,6 +152,7 @@ class SearchResultSet {
        /**
         * Return a result set of hits on other (multiple) wikis associated with this one
         *
+        * @param int $type
         * @return SearchResultSet[]
         */
        function getInterwikiResults( $type = self::SECONDARY_RESULTS ) {
@@ -161,6 +162,7 @@ class SearchResultSet {
        /**
         * Check if there are results on other wikis
         *
+        * @param int $type
         * @return bool
         */
        function hasInterwikiResults( $type = self::SECONDARY_RESULTS ) {
index 6d54dad..aced5e1 100644 (file)
@@ -106,6 +106,7 @@ class SearchSuggestionSet {
 
        /**
         * Move the suggestion at index $key to the first position
+        * @param string $key
         */
        public function rescore( $key ) {
                $removed = array_splice( $this->suggestions, $key, 1 );
index 5831b09..a588aee 100644 (file)
@@ -167,6 +167,7 @@ class BotPasswordSessionProvider extends ImmutableSessionProviderWithCookie {
 
        /**
         * @codeCoverageIgnore
+        * @inheritDoc
         */
        public function preventSessionsForUser( $username ) {
                BotPassword::removeAllPasswordsForUser( $username );
index 12f16b6..23d9ab3 100644 (file)
@@ -654,6 +654,7 @@ final class Session implements \Countable, \Iterator, \ArrayAccess {
        /**
         * @note Despite the name, this seems to be intended to implement isset()
         *  rather than array_key_exists(). So do that.
+        * @inheritDoc
         */
        public function offsetExists( $offset ) {
                $data = &$this->backend->getData();
@@ -666,6 +667,7 @@ final class Session implements \Countable, \Iterator, \ArrayAccess {
         *  data to detect such changes.
         * @note Accessing a nonexistent key via this mechanism causes that key to
         *  be created with a null value, and does not raise a PHP warning.
+        * @inheritDoc
         */
        public function &offsetGet( $offset ) {
                $data = &$this->backend->getData();
diff --git a/includes/shell/Command.php b/includes/shell/Command.php
new file mode 100644 (file)
index 0000000..864e69a
--- /dev/null
@@ -0,0 +1,377 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Shell;
+
+use Exception;
+use MediaWiki\ProcOpenError;
+use MediaWiki\ShellDisabledError;
+use Profiler;
+
+/**
+ * Class used for executing shell commands
+ *
+ * @since 1.30
+ */
+class Command {
+       /** @var string */
+       private $command = '';
+
+       /** @var array */
+       private $limits = [];
+
+       /** @var string[] */
+       private $env = [];
+
+       /** @var string */
+       private $method;
+
+       /** @var bool */
+       private $useStderr = false;
+
+       /** @var bool */
+       private $everExecuted = false;
+
+       /**
+        * Constructor. Don't call directly, instead use Shell::command()
+        */
+       public function __construct() {
+               if ( Shell::isDisabled() ) {
+                       throw new ShellDisabledError();
+               }
+       }
+
+       /**
+        * Destructor. Makes sure programmer didn't forget to execute the command after all
+        */
+       public function __destruct() {
+               if ( !$this->everExecuted ) {
+                       $message = __CLASS__ . " was instantiated, but execute() was never called.";
+                       if ( $this->method ) {
+                               $message .= " Calling method: {$this->method}.";
+                       }
+                       $message .= " Command: {$this->command}";
+                       trigger_error( $message, E_USER_NOTICE );
+               }
+       }
+
+       /**
+        * Adds parameters to the command. All parameters are sanitized via Shell::escape().
+        *
+        * @param string|string[] $args,...
+        * @return $this
+        */
+       public function params( /* ... */ ) {
+               $args = func_get_args();
+               if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
+                       // If only one argument has been passed, and that argument is an array,
+                       // treat it as a list of arguments
+                       $args = reset( $args );
+               }
+               $this->command .= ' ' . Shell::escape( $args );
+
+               return $this;
+       }
+
+       /**
+        * Adds unsafe parameters to the command. These parameters are NOT sanitized in any way.
+        *
+        * @param string|string[] $args,...
+        * @return $this
+        */
+       public function unsafeParams( /* ... */ ) {
+               $args = func_get_args();
+               if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
+                       // If only one argument has been passed, and that argument is an array,
+                       // treat it as a list of arguments
+                       $args = reset( $args );
+               }
+               $this->command .= implode( ' ', $args );
+
+               return $this;
+       }
+
+       /**
+        * Sets execution limits
+        *
+        * @param array $limits Optional array with limits(filesize, memory, time, walltime).
+        *   This overrides the global wgMaxShell* limits.
+        * @return $this
+        */
+       public function limits( array $limits ) {
+               $this->limits = $limits;
+
+               return $this;
+       }
+
+       /**
+        * Sets environment variables which should be added to the executed command environment
+        *
+        * @param string[] $env array of variable name => value
+        * @return $this
+        */
+       public function environment( array $env ) {
+               $this->env = $env;
+
+               return $this;
+       }
+
+       /**
+        * Sets calling function for profiler. By default, the caller for execute() will be used.
+        *
+        * @param string $method
+        * @return $this
+        */
+       public function profileMethod( $method ) {
+               $this->method = $method;
+
+               return $this;
+       }
+
+       /**
+        * Controls whether stderr should be included in stdout, including errors from limit.sh.
+        * Default: don't include.
+        *
+        * @param bool $yesno
+        * @return $this
+        */
+       public function includeStderr( $yesno = true ) {
+               $this->useStderr = $yesno;
+
+               return $this;
+       }
+
+       /**
+        * Executes command. Afterwards, getExitCode() and getOutput() can be used to access execution
+        * results.
+        *
+        * @return Result
+        * @throws Exception
+        * @throws ProcOpenError
+        * @throws ShellDisabledError
+        */
+       public function execute() {
+               global $IP, $wgMaxShellMemory, $wgMaxShellFileSize, $wgMaxShellTime,
+                          $wgMaxShellWallClockTime, $wgShellCgroup;
+
+               $this->everExecuted = true;
+
+               $profileMethod = $this->method ?: wfGetCaller();
+
+               $envcmd = '';
+               foreach ( $this->env as $k => $v ) {
+                       if ( wfIsWindows() ) {
+                               /* Surrounding a set in quotes (method used by wfEscapeShellArg) makes the quotes themselves
+                                * appear in the environment variable, so we must use carat escaping as documented in
+                                * https://technet.microsoft.com/en-us/library/cc723564.aspx
+                                * Note however that the quote isn't listed there, but is needed, and the parentheses
+                                * are listed there but doesn't appear to need it.
+                                */
+                               $envcmd .= "set $k=" . preg_replace( '/([&|()<>^"])/', '^\\1', $v ) . '&& ';
+                       } else {
+                               /* Assume this is a POSIX shell, thus required to accept variable assignments before the command
+                                * http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_09_01
+                                */
+                               $envcmd .= "$k=" . escapeshellarg( $v ) . ' ';
+                       }
+               }
+
+               $cmd = $envcmd . trim( $this->command );
+
+               $useLogPipe = false;
+               if ( is_executable( '/bin/bash' ) ) {
+                       $time = intval( isset( $this->limits['time'] ) ? $this->limits['time'] : $wgMaxShellTime );
+                       if ( isset( $this->limits['walltime'] ) ) {
+                               $wallTime = intval( $this->limits['walltime'] );
+                       } elseif ( isset( $this->limits['time'] ) ) {
+                               $wallTime = $time;
+                       } else {
+                               $wallTime = intval( $wgMaxShellWallClockTime );
+                       }
+                       $mem = intval( isset( $this->limits['memory'] ) ? $this->limits['memory'] : $wgMaxShellMemory );
+                       $filesize = intval( isset( $this->limits['filesize'] )
+                               ? $this->limits['filesize']
+                               : $wgMaxShellFileSize );
+
+                       if ( $time > 0 || $mem > 0 || $filesize > 0 || $wallTime > 0 ) {
+                               $cmd = '/bin/bash ' . escapeshellarg( "$IP/includes/limit.sh" ) . ' ' .
+                                          escapeshellarg( $cmd ) . ' ' .
+                                          escapeshellarg(
+                                                  "MW_INCLUDE_STDERR=" . ( $this->useStderr ? '1' : '' ) . ';' .
+                                                  "MW_CPU_LIMIT=$time; " .
+                                                  'MW_CGROUP=' . escapeshellarg( $wgShellCgroup ) . '; ' .
+                                                  "MW_MEM_LIMIT=$mem; " .
+                                                  "MW_FILE_SIZE_LIMIT=$filesize; " .
+                                                  "MW_WALL_CLOCK_LIMIT=$wallTime; " .
+                                                  "MW_USE_LOG_PIPE=yes"
+                                          );
+                               $useLogPipe = true;
+                       } elseif ( $this->useStderr ) {
+                               $cmd .= ' 2>&1';
+                       }
+               } elseif ( $this->useStderr ) {
+                       $cmd .= ' 2>&1';
+               }
+               wfDebug( __METHOD__ . ": $cmd\n" );
+
+               // Don't try to execute commands that exceed Linux's MAX_ARG_STRLEN.
+               // Other platforms may be more accomodating, but we don't want to be
+               // accomodating, because very long commands probably include user
+               // input. See T129506.
+               if ( strlen( $cmd ) > SHELL_MAX_ARG_STRLEN ) {
+                       throw new Exception( __METHOD__ .
+                                                                '(): total length of $cmd must not exceed SHELL_MAX_ARG_STRLEN' );
+               }
+
+               $desc = [
+                       0 => [ 'file', 'php://stdin', 'r' ],
+                       1 => [ 'pipe', 'w' ],
+                       2 => [ 'file', 'php://stderr', 'w' ],
+               ];
+               if ( $useLogPipe ) {
+                       $desc[3] = [ 'pipe', 'w' ];
+               }
+               $pipes = null;
+               $scoped = Profiler::instance()->scopedProfileIn( __FUNCTION__ . '-' . $profileMethod );
+               $proc = proc_open( $cmd, $desc, $pipes );
+               if ( !$proc ) {
+                       wfDebugLog( 'exec', "proc_open() failed: $cmd" );
+                       throw new ProcOpenError();
+               }
+               $outBuffer = $logBuffer = '';
+               $emptyArray = [];
+               $status = false;
+               $logMsg = false;
+
+               /* According to the documentation, it is possible for stream_select()
+                * to fail due to EINTR. I haven't managed to induce this in testing
+                * despite sending various signals. If it did happen, the error
+                * message would take the form:
+                *
+                * stream_select(): unable to select [4]: Interrupted system call (max_fd=5)
+                *
+                * where [4] is the value of the macro EINTR and "Interrupted system
+                * call" is string which according to the Linux manual is "possibly"
+                * localised according to LC_MESSAGES.
+                */
+               $eintr = defined( 'SOCKET_EINTR' ) ? SOCKET_EINTR : 4;
+               $eintrMessage = "stream_select(): unable to select [$eintr]";
+
+               $running = true;
+               $timeout = null;
+               $numReadyPipes = 0;
+
+               while ( $running === true || $numReadyPipes !== 0 ) {
+                       if ( $running ) {
+                               $status = proc_get_status( $proc );
+                               // If the process has terminated, switch to nonblocking selects
+                               // for getting any data still waiting to be read.
+                               if ( !$status['running'] ) {
+                                       $running = false;
+                                       $timeout = 0;
+                               }
+                       }
+
+                       $readyPipes = $pipes;
+
+                       // Clear last error
+                       // @codingStandardsIgnoreStart Generic.PHP.NoSilencedErrors.Discouraged
+                       @trigger_error( '' );
+                       $numReadyPipes = @stream_select( $readyPipes, $emptyArray, $emptyArray, $timeout );
+                       if ( $numReadyPipes === false ) {
+                               // @codingStandardsIgnoreEnd
+                               $error = error_get_last();
+                               if ( strncmp( $error['message'], $eintrMessage, strlen( $eintrMessage ) ) == 0 ) {
+                                       continue;
+                               } else {
+                                       trigger_error( $error['message'], E_USER_WARNING );
+                                       $logMsg = $error['message'];
+                                       break;
+                               }
+                       }
+                       foreach ( $readyPipes as $fd => $pipe ) {
+                               $block = fread( $pipe, 65536 );
+                               if ( $block === '' ) {
+                                       // End of file
+                                       fclose( $pipes[$fd] );
+                                       unset( $pipes[$fd] );
+                                       if ( !$pipes ) {
+                                               break 2;
+                                       }
+                               } elseif ( $block === false ) {
+                                       // Read error
+                                       $logMsg = "Error reading from pipe";
+                                       break 2;
+                               } elseif ( $fd == 1 ) {
+                                       // From stdout
+                                       $outBuffer .= $block;
+                               } elseif ( $fd == 3 ) {
+                                       // From log FD
+                                       $logBuffer .= $block;
+                                       if ( strpos( $block, "\n" ) !== false ) {
+                                               $lines = explode( "\n", $logBuffer );
+                                               $logBuffer = array_pop( $lines );
+                                               foreach ( $lines as $line ) {
+                                                       wfDebugLog( 'exec', $line );
+                                               }
+                                       }
+                               }
+                       }
+               }
+
+               foreach ( $pipes as $pipe ) {
+                       fclose( $pipe );
+               }
+
+               // Use the status previously collected if possible, since proc_get_status()
+               // just calls waitpid() which will not return anything useful the second time.
+               if ( $running ) {
+                       $status = proc_get_status( $proc );
+               }
+
+               if ( $logMsg !== false ) {
+                       // Read/select error
+                       $retval = -1;
+                       proc_close( $proc );
+               } elseif ( $status['signaled'] ) {
+                       $logMsg = "Exited with signal {$status['termsig']}";
+                       $retval = 128 + $status['termsig'];
+                       proc_close( $proc );
+               } else {
+                       if ( $status['running'] ) {
+                               $retval = proc_close( $proc );
+                       } else {
+                               $retval = $status['exitcode'];
+                               proc_close( $proc );
+                       }
+                       if ( $retval == 127 ) {
+                               $logMsg = "Possibly missing executable file";
+                       } elseif ( $retval >= 129 && $retval <= 192 ) {
+                               $logMsg = "Probably exited with signal " . ( $retval - 128 );
+                       }
+               }
+
+               if ( $logMsg !== false ) {
+                       wfDebugLog( 'exec', "$logMsg: $cmd" );
+               }
+
+               return new Result( $retval, $outBuffer );
+       }
+}
diff --git a/includes/shell/Result.php b/includes/shell/Result.php
new file mode 100644 (file)
index 0000000..c1429df
--- /dev/null
@@ -0,0 +1,61 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+namespace MediaWiki\Shell;
+
+/**
+ * Returned by MediaWiki\Shell\Command::execute()
+ *
+ * @since 1.30
+ */
+class Result {
+       /** @var int */
+       private $exitCode;
+
+       /** @var string */
+       private $stdout;
+
+       /**
+        * @param int $exitCode
+        * @param string $stdout
+        */
+       public function __construct( $exitCode, $stdout ) {
+               $this->exitCode = $exitCode;
+               $this->stdout = $stdout;
+       }
+
+       /**
+        * Returns exit code of the process
+        *
+        * @return int
+        */
+       public function getExitCode() {
+               return $this->exitCode;
+       }
+
+       /**
+        * Returns stdout of the process
+        *
+        * @return string
+        */
+       public function getStdout() {
+               return $this->stdout;
+       }
+}
diff --git a/includes/shell/Shell.php b/includes/shell/Shell.php
new file mode 100644 (file)
index 0000000..c293ff2
--- /dev/null
@@ -0,0 +1,149 @@
+<?php
+/**
+ * Class used for executing shell commands
+ *
+ * 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
+ */
+
+namespace MediaWiki\Shell;
+
+/**
+ * Executes shell commands
+ *
+ * @since 1.30
+ *
+ * Use call chaining with this class for expressiveness:
+ *  $result = Shell::command( 'some command' )
+ *       ->environment( [ 'ENVIRONMENT_VARIABLE' => 'VALUE' ] )
+ *       ->limits( [ 'time' => 300 ] )
+ *       ->execute();
+ *
+ *  ... = $result->getExitCode();
+ *  ... = $result->getStdout();
+ */
+class Shell {
+
+       /**
+        * Returns a new instance of this class
+        *
+        * @param string|string[] $command If string, a properly shell-escaped command line,
+        *   or an array of unescaped arguments, in which case each value will be escaped
+        *   Example:   [ 'convert', '-font', 'font name' ] would produce "'convert' '-font' 'font name'"
+        * @return Command
+        */
+       public static function command( $command ) {
+               $args = func_get_args();
+               if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
+                       // If only one argument has been passed, and that argument is an array,
+                       // treat it as a list of arguments
+                       $args = reset( $args );
+               }
+               $command = new Command();
+               return $command->params( $args );
+       }
+
+       /**
+        * Check if this class is effectively disabled via php.ini config
+        *
+        * @return bool
+        */
+       public static function isDisabled() {
+               static $disabled = null;
+
+               if ( is_null( $disabled ) ) {
+                       if ( !function_exists( 'proc_open' ) ) {
+                               wfDebug( "proc_open() is disabled\n" );
+                               $disabled = true;
+                       } else {
+                               $disabled = false;
+                       }
+               }
+
+               return $disabled;
+       }
+
+       /**
+        * Version of escapeshellarg() that works better on Windows.
+        *
+        * Originally, this fixed the incorrect use of single quotes on Windows
+        * (https://bugs.php.net/bug.php?id=26285) and the locale problems on Linux in
+        * PHP 5.2.6+ (bug backported to earlier distro releases of PHP).
+        *
+        * @param string $args,... strings to escape and glue together, or a single array of
+        *     strings parameter
+        * @return string
+        */
+       public static function escape( /* ... */ ) {
+               $args = func_get_args();
+               if ( count( $args ) === 1 && is_array( reset( $args ) ) ) {
+                       // If only one argument has been passed, and that argument is an array,
+                       // treat it as a list of arguments
+                       $args = reset( $args );
+               }
+
+               $first = true;
+               $retVal = '';
+               foreach ( $args as $arg ) {
+                       if ( !$first ) {
+                               $retVal .= ' ';
+                       } else {
+                               $first = false;
+                       }
+
+                       if ( wfIsWindows() ) {
+                               // Escaping for an MSVC-style command line parser and CMD.EXE
+                               // @codingStandardsIgnoreStart For long URLs
+                               // Refs:
+                               //  * https://web.archive.org/web/20020708081031/http://mailman.lyra.org/pipermail/scite-interest/2002-March/000436.html
+                               //  * https://technet.microsoft.com/en-us/library/cc723564.aspx
+                               //  * T15518
+                               //  * CR r63214
+                               // Double the backslashes before any double quotes. Escape the double quotes.
+                               // @codingStandardsIgnoreEnd
+                               $tokens = preg_split( '/(\\\\*")/', $arg, -1, PREG_SPLIT_DELIM_CAPTURE );
+                               $arg = '';
+                               $iteration = 0;
+                               foreach ( $tokens as $token ) {
+                                       if ( $iteration % 2 == 1 ) {
+                                               // Delimiter, a double quote preceded by zero or more slashes
+                                               $arg .= str_replace( '\\', '\\\\', substr( $token, 0, -1 ) ) . '\\"';
+                                       } elseif ( $iteration % 4 == 2 ) {
+                                               // ^ in $token will be outside quotes, need to be escaped
+                                               $arg .= str_replace( '^', '^^', $token );
+                                       } else { // $iteration % 4 == 0
+                                               // ^ in $token will appear inside double quotes, so leave as is
+                                               $arg .= $token;
+                                       }
+                                       $iteration++;
+                               }
+                               // Double the backslashes before the end of the string, because
+                               // we will soon add a quote
+                               $m = [];
+                               if ( preg_match( '/^(.*?)(\\\\+)$/', $arg, $m ) ) {
+                                       $arg = $m[1] . str_replace( '\\', '\\\\', $m[2] );
+                               }
+
+                               // Add surrounding quotes
+                               $retVal .= '"' . $arg . '"';
+                       } else {
+                               $retVal .= escapeshellarg( $arg );
+                       }
+               }
+               return $retVal;
+       }
+}
index 2c7965c..6d98e72 100644 (file)
@@ -113,6 +113,7 @@ class HashSiteStore implements SiteStore {
        /**
         * Deletes all sites from the database. After calling clear(), getSites() will return an empty
         * list and getSite() will return null until saveSite() or saveSites() is called.
+        * @return bool
         */
        public function clear() {
                $this->sites = [];
index df7a9ed..8fb0d1c 100644 (file)
@@ -1057,10 +1057,10 @@ abstract class Skin extends ContextSource {
                        $targetUser = User::newFromId( $id );
                }
 
-               # The sending user must have a confirmed email address and the target
-               # user must have a confirmed email address and allow emails from users.
-               return $this->getUser()->canSendEmail() &&
-                       $targetUser->canReceiveEmail();
+               # The sending user must have a confirmed email address and the receiving
+               # user must accept emails from the sender.
+               return $this->getUser()->canSendEmail()
+                       && SpecialEmailUser::validateTarget( $targetUser, $this->getUser() ) === '';
        }
 
        /**
@@ -1578,8 +1578,6 @@ abstract class Skin extends ContextSource {
 
                $attribs = [];
                if ( !is_null( $tooltip ) ) {
-                       # T27462: undo double-escaping.
-                       $tooltip = Sanitizer::decodeCharReferences( $tooltip );
                        $attribs['title'] = wfMessage( 'editsectionhint' )->rawParams( $tooltip )
                                ->inLanguage( $lang )->text();
                }
@@ -1611,7 +1609,7 @@ abstract class Skin extends ContextSource {
 
                $result .= implode(
                        '<span class="mw-editsection-divider">'
-                               . wfMessage( 'pipe-separator' )->inLanguage( $lang )->text()
+                               . wfMessage( 'pipe-separator' )->inLanguage( $lang )->escaped()
                                . '</span>',
                        $linksHtml
                );
index 180a6df..4fcc865 100644 (file)
@@ -811,6 +811,9 @@ class SkinTemplate extends Skin {
 
        /**
         * @todo is this even used?
+        * @param string $name
+        * @param string $urlaction
+        * @return array
         */
        function makeArticleUrlDetails( $name, $urlaction = '' ) {
                $title = Title::newFromText( $name );
index 04d03f5..98b7aa1 100644 (file)
@@ -533,7 +533,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                // Used by "live update" and "view newest" to check
                // if there's new changes with minimal data transfer
                if ( $this->getRequest()->getBool( 'peek' ) ) {
-                       $code = $rows->numRows() > 0 ? 200 : 304;
+                       $code = $rows->numRows() > 0 ? 200 : 204;
                        $this->getOutput()->setStatusCode( $code );
                        return;
                }
@@ -573,10 +573,12 @@ abstract class ChangesListSpecialPage extends SpecialPage {
        /**
         * Include the modules and configuration for the RCFilters app.
         * Conditional on the user having the feature enabled.
+        *
+        * If it is disabled, add a <body> class marking that
         */
        protected function includeRcFiltersApp() {
+               $out = $this->getOutput();
                if ( $this->isStructuredFilterUiEnabled() ) {
-                       $out = $this->getOutput();
                        $jsData = $this->getStructuredFilterJsData();
 
                        $messages = [];
@@ -584,6 +586,8 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                $messages[$key] = $this->msg( $key )->plain();
                        }
 
+                       $out->addBodyClasses( 'mw-rcfilters-enabled' );
+
                        $out->addHTML(
                                ResourceLoader::makeInlineScript(
                                        ResourceLoader::makeMessageSetScript( $messages )
@@ -598,10 +602,6 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                'wgStructuredChangeFiltersEnableExperimentalViews',
                                $experimentalStructuredChangeFilters
                        );
-                       $out->addJsConfigVars(
-                               'wgStructuredChangeFiltersEnableLiveUpdate',
-                               $this->getConfig()->get( 'StructuredChangeFiltersEnableLiveUpdate' )
-                       );
                        $out->addJsConfigVars(
                                'wgRCFiltersChangeTags',
                                $this->buildChangeTagList()
@@ -616,6 +616,8 @@ abstract class ChangesListSpecialPage extends SpecialPage {
                                        'daysDefault' => $this->getDefaultDays(),
                                ]
                        );
+               } else {
+                       $out->addBodyClasses( 'mw-rcfilters-disabled' );
                }
        }
 
@@ -808,6 +810,7 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         * ChangesListFilterGroup constructors.
         *
         * There is light processing to simplify core maintenance.
+        * @param array $definition
         */
        protected function registerFiltersFromDefinitions( array $definition ) {
                $autoFillPriority = -1;
@@ -1550,10 +1553,39 @@ abstract class ChangesListSpecialPage extends SpecialPage {
         * @return bool
         */
        public function isStructuredFilterUiEnabled() {
-               return $this->getUser()->getOption( 'rcenhancedfilters' );
+               if ( $this->getRequest()->getBool( 'rcfilters' ) ) {
+                       return true;
+               }
+
+               if ( $this->getConfig()->get( 'StructuredChangeFiltersShowPreference' ) ) {
+                       return !$this->getUser()->getOption( 'rcenhancedfilters-disable' );
+               } else {
+                       return $this->getUser()->getOption( 'rcenhancedfilters' );
+               }
+       }
+
+       /**
+        * Check whether the structured filter UI is enabled by default (regardless of
+        * this particular user's setting)
+        *
+        * @return bool
+        */
+       public function isStructuredFilterUiEnabledByDefault() {
+               if ( $this->getConfig()->get( 'StructuredChangeFiltersShowPreference' ) ) {
+                       return !$this->getUser()->getDefaultOption( 'rcenhancedfilters-disable' );
+               } else {
+                       return $this->getUser()->getDefaultOption( 'rcenhancedfilters' );
+               }
        }
 
        abstract function getDefaultLimit();
 
+       /**
+        * Get the default value of the number of days to display when loading
+        * the result set.
+        * Supports fractional values, and should be cast to a float.
+        *
+        * @return float
+        */
        abstract function getDefaultDays();
 }
index d3e22a0..8d39c99 100644 (file)
@@ -35,6 +35,7 @@ abstract class RedirectSpecialPage extends UnlistedSpecialPage {
 
        /**
         * @param string|null $subpage
+        * @return Title|bool
         */
        public function execute( $subpage ) {
                $redirect = $this->getRedirect( $subpage );
index 5318895..8b60387 100644 (file)
@@ -102,6 +102,7 @@ abstract class WantedQueryPage extends QueryPage {
         * @note This will only be run if the page is cached (ie $wgMiserMode = true)
         *   unless forceExistenceCheck() is true.
         * @since 1.24
+        * @param Title $title
         * @return bool
         */
        protected function existenceCheck( Title $title ) {
index 4d84e31..f9c917d 100644 (file)
@@ -341,7 +341,7 @@ class SpecialAllPages extends IncludableSpecialPage {
        /**
         * @param int $ns The namespace of the article
         * @param string $text The name of the article
-        * @return array( int namespace, string dbkey, string pagename ) or null on error
+        * @return array|null [ int namespace, string dbkey, string pagename ] or null on error
         */
        protected function getNamespaceKeyAndText( $ns, $text ) {
                if ( $text == '' ) {
index 252dc68..cd3c028 100644 (file)
@@ -484,7 +484,7 @@ class SpecialBlock extends FormSpecialPage {
         * @param string $par Subpage parameter passed to setup, or data value from
         *     the HTMLForm
         * @param WebRequest $request Optionally try and get data from a request too
-        * @return array( User|string|null, Block::TYPE_ constant|null )
+        * @return array [ User|string|null, Block::TYPE_ constant|null ]
         */
        public static function getTargetAndType( $par, WebRequest $request = null ) {
                $i = 0;
index e1ecfe8..d2940e4 100644 (file)
@@ -770,38 +770,3 @@ class SpecialEditWatchlist extends UnlistedSpecialPage {
                );
        }
 }
-
-/**
- * Extend HTMLForm purely so we can have a more sane way of getting the section headers
- */
-class EditWatchlistNormalHTMLForm extends HTMLForm {
-       public function getLegend( $namespace ) {
-               $namespace = substr( $namespace, 2 );
-
-               return $namespace == NS_MAIN
-                       ? $this->msg( 'blanknamespace' )->escaped()
-                       : htmlspecialchars( $this->getContext()->getLanguage()->getFormattedNsText( $namespace ) );
-       }
-
-       public function getBody() {
-               return $this->displaySection( $this->mFieldTree, '', 'editwatchlist-' );
-       }
-}
-
-class EditWatchlistCheckboxSeriesField extends HTMLMultiSelectField {
-       /**
-        * HTMLMultiSelectField throws validation errors if we get input data
-        * that doesn't match the data set in the form setup. This causes
-        * problems if something gets removed from the watchlist while the
-        * form is open (T34126), but we know that invalid items will
-        * be harmless so we can override it here.
-        *
-        * @param string $value The value the field was submitted with
-        * @param array $alldata The data collected from the form
-        * @return bool|string Bool true on success, or String error to display.
-        */
-       function validate( $value, $alldata ) {
-               // Need to call into grandparent to be a good citizen. :)
-               return HTMLFormField::validate( $value, $alldata );
-       }
-}
index 830b438..249be7f 100644 (file)
@@ -44,7 +44,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
        }
 
        public function getDescription() {
-               $target = self::getTarget( $this->mTarget );
+               $target = self::getTarget( $this->mTarget, $this->getUser() );
                if ( !$target instanceof User ) {
                        return $this->msg( 'emailuser-title-notarget' )->text();
                }
@@ -142,7 +142,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                                throw new ErrorPageError( $title, $msg, $params );
                }
                // Got a valid target user name? Else ask for one.
-               $ret = self::getTarget( $this->mTarget );
+               $ret = self::getTarget( $this->mTarget, $this->getUser() );
                if ( !$ret instanceof User ) {
                        if ( $this->mTarget != '' ) {
                                // Messages used here: notargettext, noemailtext, nowikiemailtext
@@ -187,9 +187,14 @@ class SpecialEmailUser extends UnlistedSpecialPage {
         * Validate target User
         *
         * @param string $target Target user name
-        * @return User User object on success or a string on error
+        * @param User|null $sender User sending the email
+        * @return User|string User object on success or a string on error
         */
-       public static function getTarget( $target ) {
+       public static function getTarget( $target, User $sender = null ) {
+               if ( $sender === null ) {
+                       wfDeprecated( __METHOD__ . ' without specifying the sending user', '1.30' );
+               }
+
                if ( $target == '' ) {
                        wfDebug( "Target is empty.\n" );
 
@@ -197,21 +202,50 @@ class SpecialEmailUser extends UnlistedSpecialPage {
                }
 
                $nu = User::newFromName( $target );
-               if ( !$nu instanceof User || !$nu->getId() ) {
+               $error = self::validateTarget( $nu, $sender );
+
+               return $error ? $error : $nu;
+       }
+
+       /**
+        * Validate target User
+        *
+        * @param User $target Target user
+        * @param User|null $sender User sending the email
+        * @return string Error message or empty string if valid.
+        * @since 1.30
+        */
+       public static function validateTarget( $target, User $sender = null ) {
+               if ( $sender === null ) {
+                       wfDeprecated( __METHOD__ . ' without specifying the sending user', '1.30' );
+               }
+
+               if ( !$target instanceof User || !$target->getId() ) {
                        wfDebug( "Target is invalid user.\n" );
 
                        return 'notarget';
-               } elseif ( !$nu->isEmailConfirmed() ) {
+               } elseif ( !$target->isEmailConfirmed() ) {
                        wfDebug( "User has no valid email.\n" );
 
                        return 'noemail';
-               } elseif ( !$nu->canReceiveEmail() ) {
+               } elseif ( !$target->canReceiveEmail() ) {
                        wfDebug( "User does not allow user emails.\n" );
 
                        return 'nowikiemail';
+               } elseif ( $sender !== null ) {
+                       $blacklist = $target->getOption( 'email-blacklist', [] );
+                       if ( $blacklist ) {
+                               $lookup = CentralIdLookup::factory();
+                               $senderId = $lookup->centralIdFromLocalUser( $sender );
+                               if ( $senderId !== 0 && in_array( $senderId, $blacklist ) ) {
+                                       wfDebug( "User does not allow user emails from this user.\n" );
+
+                                       return 'nowikiemail';
+                               }
+                       }
                }
 
-               return $nu;
+               return '';
        }
 
        /**
@@ -326,7 +360,7 @@ class SpecialEmailUser extends UnlistedSpecialPage {
        public static function submit( array $data, IContextSource $context ) {
                $config = $context->getConfig();
 
-               $target = self::getTarget( $data['Target'] );
+               $target = self::getTarget( $data['Target'], $context->getUser() );
                if ( !$target instanceof User ) {
                        // Messages used here: notargettext, noemailtext, nowikiemailtext
                        return Status::newFatal( $target . 'text' );
index beb454d..9ce52ef 100644 (file)
@@ -24,8 +24,6 @@
  * @ingroup SpecialPage
  */
 
-use MediaWiki\MediaWikiServices;
-
 /**
  * MediaWiki page data importer
  *
@@ -524,172 +522,3 @@ class SpecialImport extends SpecialPage {
                return 'pagetools';
        }
 }
-
-/**
- * Reporting callback
- * @ingroup SpecialPage
- */
-class ImportReporter extends ContextSource {
-       private $reason = false;
-       private $logTags = [];
-       private $mOriginalLogCallback = null;
-       private $mOriginalPageOutCallback = null;
-       private $mLogItemCount = 0;
-
-       /**
-        * @param WikiImporter $importer
-        * @param bool $upload
-        * @param string $interwiki
-        * @param string|bool $reason
-        */
-       function __construct( $importer, $upload, $interwiki, $reason = false ) {
-               $this->mOriginalPageOutCallback =
-                       $importer->setPageOutCallback( [ $this, 'reportPage' ] );
-               $this->mOriginalLogCallback =
-                       $importer->setLogItemCallback( [ $this, 'reportLogItem' ] );
-               $importer->setNoticeCallback( [ $this, 'reportNotice' ] );
-               $this->mPageCount = 0;
-               $this->mIsUpload = $upload;
-               $this->mInterwiki = $interwiki;
-               $this->reason = $reason;
-       }
-
-       /**
-        * Sets change tags to apply to the import log entry and null revision.
-        *
-        * @param array $tags
-        * @since 1.29
-        */
-       public function setChangeTags( array $tags ) {
-               $this->logTags = $tags;
-       }
-
-       function open() {
-               $this->getOutput()->addHTML( "<ul>\n" );
-       }
-
-       function reportNotice( $msg, array $params ) {
-               $this->getOutput()->addHTML(
-                       Html::element( 'li', [], $this->msg( $msg, $params )->text() )
-               );
-       }
-
-       function reportLogItem( /* ... */ ) {
-               $this->mLogItemCount++;
-               if ( is_callable( $this->mOriginalLogCallback ) ) {
-                       call_user_func_array( $this->mOriginalLogCallback, func_get_args() );
-               }
-       }
-
-       /**
-        * @param Title $title
-        * @param ForeignTitle $foreignTitle
-        * @param int $revisionCount
-        * @param int $successCount
-        * @param array $pageInfo
-        * @return void
-        */
-       public function reportPage( $title, $foreignTitle, $revisionCount,
-                       $successCount, $pageInfo ) {
-               $args = func_get_args();
-               call_user_func_array( $this->mOriginalPageOutCallback, $args );
-
-               if ( $title === null ) {
-                       # Invalid or non-importable title; a notice is already displayed
-                       return;
-               }
-
-               $this->mPageCount++;
-               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
-               if ( $successCount > 0 ) {
-                       // <bdi> prevents jumbling of the versions count
-                       // in RTL wikis in case the page title is LTR
-                       $this->getOutput()->addHTML(
-                               "<li>" . $linkRenderer->makeLink( $title ) . " " .
-                                       "<bdi>" .
-                                       $this->msg( 'import-revision-count' )->numParams( $successCount )->escaped() .
-                                       "</bdi>" .
-                                       "</li>\n"
-                       );
-
-                       $logParams = [ '4:number:count' => $successCount ];
-                       if ( $this->mIsUpload ) {
-                               $detail = $this->msg( 'import-logentry-upload-detail' )->numParams(
-                                       $successCount )->inContentLanguage()->text();
-                               $action = 'upload';
-                       } else {
-                               $pageTitle = $foreignTitle->getFullText();
-                               $fullInterwikiPrefix = $this->mInterwiki;
-                               Hooks::run( 'ImportLogInterwikiLink', [ &$fullInterwikiPrefix, &$pageTitle ] );
-
-                               $interwikiTitleStr = $fullInterwikiPrefix . ':' . $pageTitle;
-                               $interwiki = '[[:' . $interwikiTitleStr . ']]';
-                               $detail = $this->msg( 'import-logentry-interwiki-detail' )->numParams(
-                                       $successCount )->params( $interwiki )->inContentLanguage()->text();
-                               $action = 'interwiki';
-                               $logParams['5:title-link:interwiki'] = $interwikiTitleStr;
-                       }
-                       if ( $this->reason ) {
-                               $detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text()
-                                       . $this->reason;
-                       }
-
-                       $comment = $detail; // quick
-                       $dbw = wfGetDB( DB_MASTER );
-                       $latest = $title->getLatestRevID();
-                       $nullRevision = Revision::newNullRevision(
-                               $dbw,
-                               $title->getArticleID(),
-                               $comment,
-                               true,
-                               $this->getUser()
-                       );
-
-                       $nullRevId = null;
-                       if ( !is_null( $nullRevision ) ) {
-                               $nullRevId = $nullRevision->insertOn( $dbw );
-                               $page = WikiPage::factory( $title );
-                               # Update page record
-                               $page->updateRevisionOn( $dbw, $nullRevision );
-                               Hooks::run(
-                                       'NewRevisionFromEditComplete',
-                                       [ $page, $nullRevision, $latest, $this->getUser() ]
-                               );
-                       }
-
-                       // Create the import log entry
-                       $logEntry = new ManualLogEntry( 'import', $action );
-                       $logEntry->setTarget( $title );
-                       $logEntry->setComment( $this->reason );
-                       $logEntry->setPerformer( $this->getUser() );
-                       $logEntry->setParameters( $logParams );
-                       $logid = $logEntry->insert();
-                       if ( count( $this->logTags ) ) {
-                               $logEntry->setTags( $this->logTags );
-                       }
-                       // Make sure the null revision will be tagged as well
-                       $logEntry->setAssociatedRevId( $nullRevId );
-
-                       $logEntry->publish( $logid );
-
-               } else {
-                       $this->getOutput()->addHTML( "<li>" . $linkRenderer->makeKnownLink( $title ) . " " .
-                               $this->msg( 'import-nonewrevisions' )->escaped() . "</li>\n" );
-               }
-       }
-
-       function close() {
-               $out = $this->getOutput();
-               if ( $this->mLogItemCount > 0 ) {
-                       $msg = $this->msg( 'imported-log-entries' )->numParams( $this->mLogItemCount )->parse();
-                       $out->addHTML( Xml::tags( 'li', null, $msg ) );
-               } elseif ( $this->mPageCount == 0 && $this->mLogItemCount == 0 ) {
-                       $out->addHTML( "</ul>\n" );
-
-                       return Status::newFatal( 'importnopages' );
-               }
-               $out->addHTML( "</ul>\n" );
-
-               return Status::newGood( $this->mPageCount );
-       }
-}
index dae6074..cda0854 100644 (file)
@@ -266,6 +266,7 @@ class LinkSearchPage extends QueryPage {
         *
         * @see T130058
         * @todo FIXME This special page should not use LIMIT for paging
+        * @return int
         */
        protected function getMaxResults() {
                return max( parent::getMaxResults(), 60000 );
index 61590d7..671ab6f 100644 (file)
@@ -278,23 +278,18 @@ class SpecialNewpages extends IncludableSpecialPage {
                        }
                );
                $htmlForm->setMethod( 'get' );
-
-               $out->addHTML( Xml::fieldset( $this->msg( 'newpages' )->text() ) );
-
+               $htmlForm->setWrapperLegend( true );
+               $htmlForm->setWrapperLegendMsg( 'newpages' );
+               $htmlForm->addFooterText( Html::rawElement(
+                       'div',
+                       null,
+                       $this->filterLinks()
+               ) );
                $htmlForm->show();
-
-               $out->addHTML(
-                       Html::rawElement(
-                               'div',
-                               null,
-                               $this->filterLinks()
-                       ) .
-                       Xml::closeElement( 'fieldset' )
-               );
        }
 
        /**
-        * @param stdClass $row Result row from recent changes
+        * @param stdClass $result Result row from recent changes
         * @return Revision|bool
         */
        protected function revisionFromRcResult( stdClass $result ) {
index 547a1b0..15c05ee 100644 (file)
@@ -233,10 +233,9 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
         */
        public function getDefaultOptions() {
                $opts = parent::getDefaultOptions();
-               $user = $this->getUser();
 
-               $opts->add( 'days', $user->getIntOption( 'rcdays' ), FormOptions::FLOAT );
-               $opts->add( 'limit', $user->getIntOption( 'rclimit' ) );
+               $opts->add( 'days', $this->getDefaultDays(), FormOptions::FLOAT );
+               $opts->add( 'limit', $this->getDefaultLimit() );
                $opts->add( 'from', '' );
 
                $opts->add( 'categories', '' );
@@ -1010,6 +1009,6 @@ class SpecialRecentChanges extends ChangesListSpecialPage {
        }
 
        function getDefaultDays() {
-               return $this->getUser()->getIntOption( 'rcdays' );
+               return floatval( $this->getUser()->getOption( 'rcdays' ) );
        }
 }
index 86bc7ed..b159fff 100644 (file)
@@ -21,6 +21,7 @@ class SpecialUnlinkAccounts extends AuthManagerSpecialPage {
 
        /**
         * Under which header this special page is listed in Special:SpecialPages.
+        * @return string
         */
        protected function getGroupName() {
                return 'users';
index d0eb8e3..024034a 100644 (file)
@@ -22,7 +22,6 @@
  * @ingroup Upload
  */
 
-use MediaWiki\Linker\LinkRenderer;
 use MediaWiki\MediaWikiServices;
 
 /**
@@ -345,15 +344,16 @@ class SpecialUpload extends SpecialPage {
                $stashStatus = $this->mUpload->tryStashFile( $this->getUser() );
                if ( $stashStatus->isGood() ) {
                        $sessionKey = $stashStatus->getValue()->getFileKey();
+                       $uploadWarning = 'upload-tryagain';
                } else {
                        $sessionKey = null;
-                       // TODO Add a warning message about the failure to stash here?
+                       $uploadWarning = 'upload-tryagain-nostash';
                }
                $message = '<h2>' . $this->msg( 'uploaderror' )->escaped() . "</h2>\n" .
                        '<div class="error">' . $message . "</div>\n";
 
                $form = $this->getUploadForm( $message, $sessionKey );
-               $form->setSubmitText( $this->msg( 'upload-tryagain' )->escaped() );
+               $form->setSubmitText( $this->msg( $uploadWarning )->escaped() );
                $this->showUploadForm( $form );
        }
 
@@ -380,9 +380,10 @@ class SpecialUpload extends SpecialPage {
                $stashStatus = $this->mUpload->tryStashFile( $this->getUser() );
                if ( $stashStatus->isGood() ) {
                        $sessionKey = $stashStatus->getValue()->getFileKey();
+                       $uploadWarning = 'uploadwarning-text';
                } else {
                        $sessionKey = null;
-                       // TODO Add a warning message about the failure to stash here?
+                       $uploadWarning = 'uploadwarning-text-nostash';
                }
 
                // Add styles for the warning, reused from the live preview
@@ -444,7 +445,7 @@ class SpecialUpload extends SpecialPage {
                        $warningHtml .= $msg;
                }
                $warningHtml .= "</ul></div>\n";
-               $warningHtml .= $this->msg( 'uploadwarning-text' )->parseAsBlock();
+               $warningHtml .= $this->msg( $uploadWarning )->parseAsBlock();
 
                $form = $this->getUploadForm( $warningHtml, $sessionKey, /* $hideIgnoreWarning */ true );
                $form->setSubmitText( $this->msg( 'upload-tryagain' )->text() );
@@ -839,482 +840,10 @@ class SpecialUpload extends SpecialPage {
         * This controls js: mw.config.get( 'wgFileCanRotate' )
         *
         * @todo What about non-BitmapHandler handled files?
+        * @return bool
         */
        public static function rotationEnabled() {
                $bitmapHandler = new BitmapHandler();
                return $bitmapHandler->autoRotateEnabled();
        }
 }
-
-/**
- * Sub class of HTMLForm that provides the form section of SpecialUpload
- */
-class UploadForm extends HTMLForm {
-       protected $mWatch;
-       protected $mForReUpload;
-       protected $mSessionKey;
-       protected $mHideIgnoreWarning;
-       protected $mDestWarningAck;
-       protected $mDestFile;
-
-       protected $mComment;
-       protected $mTextTop;
-       protected $mTextAfterSummary;
-
-       protected $mSourceIds;
-
-       protected $mMaxFileSize = [];
-
-       protected $mMaxUploadSize = [];
-
-       public function __construct( array $options = [], IContextSource $context = null,
-               LinkRenderer $linkRenderer = null
-       ) {
-               if ( $context instanceof IContextSource ) {
-                       $this->setContext( $context );
-               }
-
-               if ( !$linkRenderer ) {
-                       $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
-               }
-
-               $this->mWatch = !empty( $options['watch'] );
-               $this->mForReUpload = !empty( $options['forreupload'] );
-               $this->mSessionKey = isset( $options['sessionkey'] ) ? $options['sessionkey'] : '';
-               $this->mHideIgnoreWarning = !empty( $options['hideignorewarning'] );
-               $this->mDestWarningAck = !empty( $options['destwarningack'] );
-               $this->mDestFile = isset( $options['destfile'] ) ? $options['destfile'] : '';
-
-               $this->mComment = isset( $options['description'] ) ?
-                       $options['description'] : '';
-
-               $this->mTextTop = isset( $options['texttop'] )
-                       ? $options['texttop'] : '';
-
-               $this->mTextAfterSummary = isset( $options['textaftersummary'] )
-                       ? $options['textaftersummary'] : '';
-
-               $sourceDescriptor = $this->getSourceSection();
-               $descriptor = $sourceDescriptor
-                       + $this->getDescriptionSection()
-                       + $this->getOptionsSection();
-
-               Hooks::run( 'UploadFormInitDescriptor', [ &$descriptor ] );
-               parent::__construct( $descriptor, $context, 'upload' );
-
-               # Add a link to edit MediaWiki:Licenses
-               if ( $this->getUser()->isAllowed( 'editinterface' ) ) {
-                       $this->getOutput()->addModuleStyles( 'mediawiki.special.upload.styles' );
-                       $licensesLink = $linkRenderer->makeKnownLink(
-                               $this->msg( 'licenses' )->inContentLanguage()->getTitle(),
-                               $this->msg( 'licenses-edit' )->text(),
-                               [],
-                               [ 'action' => 'edit' ]
-                       );
-                       $editLicenses = '<p class="mw-upload-editlicenses">' . $licensesLink . '</p>';
-                       $this->addFooterText( $editLicenses, 'description' );
-               }
-
-               # Set some form properties
-               $this->setSubmitText( $this->msg( 'uploadbtn' )->text() );
-               $this->setSubmitName( 'wpUpload' );
-               # Used message keys: 'accesskey-upload', 'tooltip-upload'
-               $this->setSubmitTooltip( 'upload' );
-               $this->setId( 'mw-upload-form' );
-
-               # Build a list of IDs for javascript insertion
-               $this->mSourceIds = [];
-               foreach ( $sourceDescriptor as $field ) {
-                       if ( !empty( $field['id'] ) ) {
-                               $this->mSourceIds[] = $field['id'];
-                       }
-               }
-       }
-
-       /**
-        * Get the descriptor of the fieldset that contains the file source
-        * selection. The section is 'source'
-        *
-        * @return array Descriptor array
-        */
-       protected function getSourceSection() {
-               if ( $this->mSessionKey ) {
-                       return [
-                               'SessionKey' => [
-                                       'type' => 'hidden',
-                                       'default' => $this->mSessionKey,
-                               ],
-                               'SourceType' => [
-                                       'type' => 'hidden',
-                                       'default' => 'Stash',
-                               ],
-                       ];
-               }
-
-               $canUploadByUrl = UploadFromUrl::isEnabled()
-                       && ( UploadFromUrl::isAllowed( $this->getUser() ) === true )
-                       && $this->getConfig()->get( 'CopyUploadsFromSpecialUpload' );
-               $radio = $canUploadByUrl;
-               $selectedSourceType = strtolower( $this->getRequest()->getText( 'wpSourceType', 'File' ) );
-
-               $descriptor = [];
-               if ( $this->mTextTop ) {
-                       $descriptor['UploadFormTextTop'] = [
-                               'type' => 'info',
-                               'section' => 'source',
-                               'default' => $this->mTextTop,
-                               'raw' => true,
-                       ];
-               }
-
-               $this->mMaxUploadSize['file'] = min(
-                       UploadBase::getMaxUploadSize( 'file' ),
-                       UploadBase::getMaxPhpUploadSize()
-               );
-
-               $help = $this->msg( 'upload-maxfilesize',
-                               $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
-                       )->parse();
-
-               // If the user can also upload by URL, there are 2 different file size limits.
-               // This extra message helps stress which limit corresponds to what.
-               if ( $canUploadByUrl ) {
-                       $help .= $this->msg( 'word-separator' )->escaped();
-                       $help .= $this->msg( 'upload_source_file' )->parse();
-               }
-
-               $descriptor['UploadFile'] = [
-                       'class' => 'UploadSourceField',
-                       'section' => 'source',
-                       'type' => 'file',
-                       'id' => 'wpUploadFile',
-                       'radio-id' => 'wpSourceTypeFile',
-                       'label-message' => 'sourcefilename',
-                       'upload-type' => 'File',
-                       'radio' => &$radio,
-                       'help' => $help,
-                       'checked' => $selectedSourceType == 'file',
-               ];
-
-               if ( $canUploadByUrl ) {
-                       $this->mMaxUploadSize['url'] = UploadBase::getMaxUploadSize( 'url' );
-                       $descriptor['UploadFileURL'] = [
-                               'class' => 'UploadSourceField',
-                               'section' => 'source',
-                               'id' => 'wpUploadFileURL',
-                               'radio-id' => 'wpSourceTypeurl',
-                               'label-message' => 'sourceurl',
-                               'upload-type' => 'url',
-                               'radio' => &$radio,
-                               'help' => $this->msg( 'upload-maxfilesize',
-                                       $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] )
-                               )->parse() .
-                                       $this->msg( 'word-separator' )->escaped() .
-                                       $this->msg( 'upload_source_url' )->parse(),
-                               'checked' => $selectedSourceType == 'url',
-                       ];
-               }
-               Hooks::run( 'UploadFormSourceDescriptors', [ &$descriptor, &$radio, $selectedSourceType ] );
-
-               $descriptor['Extensions'] = [
-                       'type' => 'info',
-                       'section' => 'source',
-                       'default' => $this->getExtensionsMessage(),
-                       'raw' => true,
-               ];
-
-               return $descriptor;
-       }
-
-       /**
-        * Get the messages indicating which extensions are preferred and prohibitted.
-        *
-        * @return string HTML string containing the message
-        */
-       protected function getExtensionsMessage() {
-               # Print a list of allowed file extensions, if so configured.  We ignore
-               # MIME type here, it's incomprehensible to most people and too long.
-               $config = $this->getConfig();
-
-               if ( $config->get( 'CheckFileExtensions' ) ) {
-                       $fileExtensions = array_unique( $config->get( 'FileExtensions' ) );
-                       if ( $config->get( 'StrictFileExtensions' ) ) {
-                               # Everything not permitted is banned
-                               $extensionsList =
-                                       '<div id="mw-upload-permitted">' .
-                                       $this->msg( 'upload-permitted' )
-                                               ->params( $this->getLanguage()->commaList( $fileExtensions ) )
-                                               ->numParams( count( $fileExtensions ) )
-                                               ->parseAsBlock() .
-                                       "</div>\n";
-                       } else {
-                               # We have to list both preferred and prohibited
-                               $fileBlacklist = array_unique( $config->get( 'FileBlacklist' ) );
-                               $extensionsList =
-                                       '<div id="mw-upload-preferred">' .
-                                               $this->msg( 'upload-preferred' )
-                                                       ->params( $this->getLanguage()->commaList( $fileExtensions ) )
-                                                       ->numParams( count( $fileExtensions ) )
-                                                       ->parseAsBlock() .
-                                       "</div>\n" .
-                                       '<div id="mw-upload-prohibited">' .
-                                               $this->msg( 'upload-prohibited' )
-                                                       ->params( $this->getLanguage()->commaList( $fileBlacklist ) )
-                                                       ->numParams( count( $fileBlacklist ) )
-                                                       ->parseAsBlock() .
-                                       "</div>\n";
-                       }
-               } else {
-                       # Everything is permitted.
-                       $extensionsList = '';
-               }
-
-               return $extensionsList;
-       }
-
-       /**
-        * Get the descriptor of the fieldset that contains the file description
-        * input. The section is 'description'
-        *
-        * @return array Descriptor array
-        */
-       protected function getDescriptionSection() {
-               $config = $this->getConfig();
-               if ( $this->mSessionKey ) {
-                       $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
-                       try {
-                               $file = $stash->getFile( $this->mSessionKey );
-                       } catch ( Exception $e ) {
-                               $file = null;
-                       }
-                       if ( $file ) {
-                               global $wgContLang;
-
-                               $mto = $file->transform( [ 'width' => 120 ] );
-                               if ( $mto ) {
-                                       $this->addHeaderText(
-                                               '<div class="thumb t' . $wgContLang->alignEnd() . '">' .
-                                               Html::element( 'img', [
-                                                       'src' => $mto->getUrl(),
-                                                       'class' => 'thumbimage',
-                                               ] ) . '</div>', 'description' );
-                               }
-                       }
-               }
-
-               $descriptor = [
-                       'DestFile' => [
-                               'type' => 'text',
-                               'section' => 'description',
-                               'id' => 'wpDestFile',
-                               'label-message' => 'destfilename',
-                               'size' => 60,
-                               'default' => $this->mDestFile,
-                               # @todo FIXME: Hack to work around poor handling of the 'default' option in HTMLForm
-                               'nodata' => strval( $this->mDestFile ) !== '',
-                       ],
-                       'UploadDescription' => [
-                               'type' => 'textarea',
-                               'section' => 'description',
-                               'id' => 'wpUploadDescription',
-                               'label-message' => $this->mForReUpload
-                                       ? 'filereuploadsummary'
-                                       : 'fileuploadsummary',
-                               'default' => $this->mComment,
-                               'cols' => 80,
-                               'rows' => 8,
-                       ]
-               ];
-               if ( $this->mTextAfterSummary ) {
-                       $descriptor['UploadFormTextAfterSummary'] = [
-                               'type' => 'info',
-                               'section' => 'description',
-                               'default' => $this->mTextAfterSummary,
-                               'raw' => true,
-                       ];
-               }
-
-               $descriptor += [
-                       'EditTools' => [
-                               'type' => 'edittools',
-                               'section' => 'description',
-                               'message' => 'edittools-upload',
-                       ]
-               ];
-
-               if ( $this->mForReUpload ) {
-                       $descriptor['DestFile']['readonly'] = true;
-               } else {
-                       $descriptor['License'] = [
-                               'type' => 'select',
-                               'class' => 'Licenses',
-                               'section' => 'description',
-                               'id' => 'wpLicense',
-                               'label-message' => 'license',
-                       ];
-               }
-
-               if ( $config->get( 'UseCopyrightUpload' ) ) {
-                       $descriptor['UploadCopyStatus'] = [
-                               'type' => 'text',
-                               'section' => 'description',
-                               'id' => 'wpUploadCopyStatus',
-                               'label-message' => 'filestatus',
-                       ];
-                       $descriptor['UploadSource'] = [
-                               'type' => 'text',
-                               'section' => 'description',
-                               'id' => 'wpUploadSource',
-                               'label-message' => 'filesource',
-                       ];
-               }
-
-               return $descriptor;
-       }
-
-       /**
-        * Get the descriptor of the fieldset that contains the upload options,
-        * such as "watch this file". The section is 'options'
-        *
-        * @return array Descriptor array
-        */
-       protected function getOptionsSection() {
-               $user = $this->getUser();
-               if ( $user->isLoggedIn() ) {
-                       $descriptor = [
-                               'Watchthis' => [
-                                       'type' => 'check',
-                                       'id' => 'wpWatchthis',
-                                       'label-message' => 'watchthisupload',
-                                       'section' => 'options',
-                                       'default' => $this->mWatch,
-                               ]
-                       ];
-               }
-               if ( !$this->mHideIgnoreWarning ) {
-                       $descriptor['IgnoreWarning'] = [
-                               'type' => 'check',
-                               'id' => 'wpIgnoreWarning',
-                               'label-message' => 'ignorewarnings',
-                               'section' => 'options',
-                       ];
-               }
-
-               $descriptor['DestFileWarningAck'] = [
-                       'type' => 'hidden',
-                       'id' => 'wpDestFileWarningAck',
-                       'default' => $this->mDestWarningAck ? '1' : '',
-               ];
-
-               if ( $this->mForReUpload ) {
-                       $descriptor['ForReUpload'] = [
-                               'type' => 'hidden',
-                               'id' => 'wpForReUpload',
-                               'default' => '1',
-                       ];
-               }
-
-               return $descriptor;
-       }
-
-       /**
-        * Add the upload JS and show the form.
-        */
-       public function show() {
-               $this->addUploadJS();
-               parent::show();
-       }
-
-       /**
-        * Add upload JS to the OutputPage
-        */
-       protected function addUploadJS() {
-               $config = $this->getConfig();
-
-               $useAjaxDestCheck = $config->get( 'UseAjax' ) && $config->get( 'AjaxUploadDestCheck' );
-               $useAjaxLicensePreview = $config->get( 'UseAjax' ) &&
-                       $config->get( 'AjaxLicensePreview' ) && $config->get( 'EnableAPI' );
-               $this->mMaxUploadSize['*'] = UploadBase::getMaxUploadSize();
-
-               $scriptVars = [
-                       'wgAjaxUploadDestCheck' => $useAjaxDestCheck,
-                       'wgAjaxLicensePreview' => $useAjaxLicensePreview,
-                       'wgUploadAutoFill' => !$this->mForReUpload &&
-                               // If we received mDestFile from the request, don't autofill
-                               // the wpDestFile textbox
-                               $this->mDestFile === '',
-                       'wgUploadSourceIds' => $this->mSourceIds,
-                       'wgCheckFileExtensions' => $config->get( 'CheckFileExtensions' ),
-                       'wgStrictFileExtensions' => $config->get( 'StrictFileExtensions' ),
-                       'wgFileExtensions' => array_values( array_unique( $config->get( 'FileExtensions' ) ) ),
-                       'wgCapitalizeUploads' => MWNamespace::isCapitalized( NS_FILE ),
-                       'wgMaxUploadSize' => $this->mMaxUploadSize,
-                       'wgFileCanRotate' => SpecialUpload::rotationEnabled(),
-               ];
-
-               $out = $this->getOutput();
-               $out->addJsConfigVars( $scriptVars );
-
-               $out->addModules( [
-                       'mediawiki.special.upload', // Extras for thumbnail and license preview.
-               ] );
-       }
-
-       /**
-        * Empty function; submission is handled elsewhere.
-        *
-        * @return bool False
-        */
-       function trySubmit() {
-               return false;
-       }
-}
-
-/**
- * A form field that contains a radio box in the label
- */
-class UploadSourceField extends HTMLTextField {
-
-       /**
-        * @param array $cellAttributes
-        * @return string
-        */
-       function getLabelHtml( $cellAttributes = [] ) {
-               $id = $this->mParams['id'];
-               $label = Html::rawElement( 'label', [ 'for' => $id ], $this->mLabel );
-
-               if ( !empty( $this->mParams['radio'] ) ) {
-                       if ( isset( $this->mParams['radio-id'] ) ) {
-                               $radioId = $this->mParams['radio-id'];
-                       } else {
-                               // Old way. For the benefit of extensions that do not define
-                               // the 'radio-id' key.
-                               $radioId = 'wpSourceType' . $this->mParams['upload-type'];
-                       }
-
-                       $attribs = [
-                               'name' => 'wpSourceType',
-                               'type' => 'radio',
-                               'id' => $radioId,
-                               'value' => $this->mParams['upload-type'],
-                       ];
-
-                       if ( !empty( $this->mParams['checked'] ) ) {
-                               $attribs['checked'] = 'checked';
-                       }
-
-                       $label .= Html::element( 'input', $attribs );
-               }
-
-               return Html::rawElement( 'td', [ 'class' => 'mw-label' ] + $cellAttributes, $label );
-       }
-
-       /**
-        * @return int
-        */
-       function getSize() {
-               return isset( $this->mParams['size'] )
-                       ? $this->mParams['size']
-                       : 60;
-       }
-}
index 3ea1d03..f176b40 100644 (file)
@@ -203,6 +203,7 @@ class SpecialVersion extends SpecialPage {
                        'Roan Kattouw', 'Trevor Parscal', 'Bryan Tong Minh', 'Sam Reed',
                        'Victor Vasiliev', 'Rotem Liss', 'Platonides', 'Antoine Musso',
                        'Timo Tijhof', 'Daniel Kinzler', 'Jeroen De Dauw', 'Brad Jorsch',
+                       'Bartosz Dziewoński', 'Ed Sanders', 'Moriel Schottlender',
                        $othersLink, $translatorsLink
                ];
 
index 6d481f8..2ebbc2d 100644 (file)
@@ -74,6 +74,7 @@ class WantedFilesPage extends WantedQueryPage {
         * In its own function to allow subclasses to override.
         * @see SpecialWantedFilesGUOverride in GlobalUsage extension.
         * @since 1.24
+        * @return bool
         */
        protected function likelyToHaveFalsePositives() {
                return RepoGroup::singleton()->hasForeignRepos();
@@ -99,6 +100,7 @@ class WantedFilesPage extends WantedQueryPage {
         * Use wfFindFile so we still think file namespace pages without
         * files are missing, but valid file redirects and foreign files are ok.
         *
+        * @param Title $title
         * @return bool
         */
        protected function existenceCheck( Title $title ) {
index 7049744..8418865 100644 (file)
@@ -112,9 +112,15 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        }
 
        public function isStructuredFilterUiEnabled() {
-               return parent::isStructuredFilterUiEnabled()
-                       && ( $this->getConfig()->get( 'StructuredChangeFiltersOnWatchlist' )
-                               || $this->getRequest()->getBool( 'rcfilters' ) );
+               return $this->getRequest()->getBool( 'rcfilters' ) || (
+                       $this->getConfig()->get( 'StructuredChangeFiltersOnWatchlist' ) &&
+                       $this->getUser()->getOption( 'rcenhancedfilters' )
+               );
+       }
+
+       public function isStructuredFilterUiEnabledByDefault() {
+               return $this->getConfig()->get( 'StructuredChangeFiltersOnWatchlist' ) &&
+                       $this->getUser()->getDefaultOption( 'rcenhancedfilters' );
        }
 
        /**
@@ -271,10 +277,9 @@ class SpecialWatchlist extends ChangesListSpecialPage {
         */
        public function getDefaultOptions() {
                $opts = parent::getDefaultOptions();
-               $user = $this->getUser();
 
-               $opts->add( 'days', $user->getOption( 'watchlistdays' ), FormOptions::FLOAT );
-               $opts->add( 'limit', $user->getIntOption( 'wllimit' ), FormOptions::INT );
+               $opts->add( 'days', $this->getDefaultDays(), FormOptions::FLOAT );
+               $opts->add( 'limit', $this->getDefaultLimit(), FormOptions::INT );
 
                return $opts;
        }
@@ -630,11 +635,13 @@ class SpecialWatchlist extends ChangesListSpecialPage {
                        'id' => 'mw-watchlist-form'
                ] );
                $form .= Html::hidden( 'title', $this->getPageTitle()->getPrefixedText() );
-               $form .= Xml::fieldset(
-                       $this->msg( 'watchlist-options' )->text(),
-                       false,
+               $form .= Xml::openElement(
+                       'fieldset',
                        [ 'id' => 'mw-watchlist-options', 'class' => 'cloptions' ]
                );
+               $form .= Xml::element(
+                       'legend', null, $this->msg( 'watchlist-options' )->text()
+               );
 
                if ( !$this->isStructuredFilterUiEnabled() ) {
                        $form .= $this->makeLegend();
@@ -912,6 +919,6 @@ class SpecialWatchlist extends ChangesListSpecialPage {
        }
 
        function getDefaultDays() {
-               return $this->getUser()->getIntOption( 'watchlistdays' );
+               return floatval( $this->getUser()->getOption( 'watchlistdays' ) );
        }
 }
diff --git a/includes/specials/formfields/EditWatchlistCheckboxSeriesField.php b/includes/specials/formfields/EditWatchlistCheckboxSeriesField.php
new file mode 100644 (file)
index 0000000..cb93bb2
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+class EditWatchlistCheckboxSeriesField extends HTMLMultiSelectField {
+       /**
+        * HTMLMultiSelectField throws validation errors if we get input data
+        * that doesn't match the data set in the form setup. This causes
+        * problems if something gets removed from the watchlist while the
+        * form is open (T34126), but we know that invalid items will
+        * be harmless so we can override it here.
+        *
+        * @param string $value The value the field was submitted with
+        * @param array $alldata The data collected from the form
+        * @return bool|string Bool true on success, or String error to display.
+        */
+       function validate( $value, $alldata ) {
+               // Need to call into grandparent to be a good citizen. :)
+               return HTMLFormField::validate( $value, $alldata );
+       }
+}
diff --git a/includes/specials/formfields/Licenses.php b/includes/specials/formfields/Licenses.php
new file mode 100644 (file)
index 0000000..f499cc1
--- /dev/null
@@ -0,0 +1,189 @@
+<?php
+/**
+ * License selector for use on Special:Upload.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * A License class for use on Special:Upload
+ */
+class Licenses extends HTMLFormField {
+       /** @var string */
+       protected $msg;
+
+       /** @var array */
+       protected $licenses = [];
+
+       /** @var string */
+       protected $html;
+       /**#@-*/
+
+       /**
+        * @param array $params
+        */
+       public function __construct( $params ) {
+               parent::__construct( $params );
+
+               $this->msg = empty( $params['licenses'] )
+                       ? wfMessage( 'licenses' )->inContentLanguage()->plain()
+                       : $params['licenses'];
+               $this->selected = null;
+
+               $this->makeLicenses();
+       }
+
+       /**
+        * @private
+        */
+       protected function makeLicenses() {
+               $levels = [];
+               $lines = explode( "\n", $this->msg );
+
+               foreach ( $lines as $line ) {
+                       if ( strpos( $line, '*' ) !== 0 ) {
+                               continue;
+                       } else {
+                               list( $level, $line ) = $this->trimStars( $line );
+
+                               if ( strpos( $line, '|' ) !== false ) {
+                                       $obj = new License( $line );
+                                       $this->stackItem( $this->licenses, $levels, $obj );
+                               } else {
+                                       if ( $level < count( $levels ) ) {
+                                               $levels = array_slice( $levels, 0, $level );
+                                       }
+                                       if ( $level == count( $levels ) ) {
+                                               $levels[$level - 1] = $line;
+                                       } elseif ( $level > count( $levels ) ) {
+                                               $levels[] = $line;
+                                       }
+                               }
+                       }
+               }
+       }
+
+       /**
+        * @param string $str
+        * @return array
+        */
+       protected function trimStars( $str ) {
+               $numStars = strspn( $str, '*' );
+               return [ $numStars, ltrim( substr( $str, $numStars ), ' ' ) ];
+       }
+
+       /**
+        * @param array &$list
+        * @param array $path
+        * @param mixed $item
+        */
+       protected function stackItem( &$list, $path, $item ) {
+               $position =& $list;
+               if ( $path ) {
+                       foreach ( $path as $key ) {
+                               $position =& $position[$key];
+                       }
+               }
+               $position[] = $item;
+       }
+
+       /**
+        * @param array $tagset
+        * @param int $depth
+        */
+       protected function makeHtml( $tagset, $depth = 0 ) {
+               foreach ( $tagset as $key => $val ) {
+                       if ( is_array( $val ) ) {
+                               $this->html .= $this->outputOption(
+                                       $key, '',
+                                       [
+                                               'disabled' => 'disabled',
+                                               'style' => 'color: GrayText', // for MSIE
+                                       ],
+                                       $depth
+                               );
+                               $this->makeHtml( $val, $depth + 1 );
+                       } else {
+                               $this->html .= $this->outputOption(
+                                       $val->text, $val->template,
+                                       [ 'title' => '{{' . $val->template . '}}' ],
+                                       $depth
+                               );
+                       }
+               }
+       }
+
+       /**
+        * @param string $message
+        * @param string $value
+        * @param null|array $attribs
+        * @param int $depth
+        * @return string
+        */
+       protected function outputOption( $message, $value, $attribs = null, $depth = 0 ) {
+               $msgObj = $this->msg( $message );
+               $text = $msgObj->exists() ? $msgObj->text() : $message;
+               $attribs['value'] = $value;
+               if ( $value === $this->selected ) {
+                       $attribs['selected'] = 'selected';
+               }
+
+               $val = str_repeat( /* &nbsp */ "\xc2\xa0", $depth * 2 ) . $text;
+               return str_repeat( "\t", $depth ) . Xml::element( 'option', $attribs, $val ) . "\n";
+       }
+
+       /**#@-*/
+
+       /**
+        *  Accessor for $this->licenses
+        *
+        * @return array
+        */
+       public function getLicenses() {
+               return $this->licenses;
+       }
+
+       /**
+        * Accessor for $this->html
+        *
+        * @param bool $value
+        *
+        * @return string
+        */
+       public function getInputHTML( $value ) {
+               $this->selected = $value;
+
+               $this->html = $this->outputOption( wfMessage( 'nolicense' )->text(), '',
+                       (bool)$this->selected ? null : [ 'selected' => 'selected' ] );
+               $this->makeHtml( $this->getLicenses() );
+
+               $attribs = [
+                       'name' => $this->mName,
+                       'id' => $this->mID
+               ];
+               if ( !empty( $this->mParams['disabled'] ) ) {
+                       $attibs['disabled'] = 'disabled';
+               }
+
+               return Html::rawElement( 'select', $attribs, $this->html );
+       }
+}
diff --git a/includes/specials/formfields/UploadSourceField.php b/includes/specials/formfields/UploadSourceField.php
new file mode 100644 (file)
index 0000000..251a286
--- /dev/null
@@ -0,0 +1,68 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * A form field that contains a radio box in the label
+ */
+class UploadSourceField extends HTMLTextField {
+
+       /**
+        * @param array $cellAttributes
+        * @return string
+        */
+       function getLabelHtml( $cellAttributes = [] ) {
+               $id = $this->mParams['id'];
+               $label = Html::rawElement( 'label', [ 'for' => $id ], $this->mLabel );
+
+               if ( !empty( $this->mParams['radio'] ) ) {
+                       if ( isset( $this->mParams['radio-id'] ) ) {
+                               $radioId = $this->mParams['radio-id'];
+                       } else {
+                               // Old way. For the benefit of extensions that do not define
+                               // the 'radio-id' key.
+                               $radioId = 'wpSourceType' . $this->mParams['upload-type'];
+                       }
+
+                       $attribs = [
+                               'name' => 'wpSourceType',
+                               'type' => 'radio',
+                               'id' => $radioId,
+                               'value' => $this->mParams['upload-type'],
+                       ];
+
+                       if ( !empty( $this->mParams['checked'] ) ) {
+                               $attribs['checked'] = 'checked';
+                       }
+
+                       $label .= Html::element( 'input', $attribs );
+               }
+
+               return Html::rawElement( 'td', [ 'class' => 'mw-label' ] + $cellAttributes, $label );
+       }
+
+       /**
+        * @return int
+        */
+       function getSize() {
+               return isset( $this->mParams['size'] )
+                       ? $this->mParams['size']
+                       : 60;
+       }
+}
diff --git a/includes/specials/forms/EditWatchlistNormalHTMLForm.php b/includes/specials/forms/EditWatchlistNormalHTMLForm.php
new file mode 100644 (file)
index 0000000..723093a
--- /dev/null
@@ -0,0 +1,36 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+/**
+ * Extend HTMLForm purely so we can have a more sane way of getting the section headers
+ */
+class EditWatchlistNormalHTMLForm extends HTMLForm {
+       public function getLegend( $namespace ) {
+               $namespace = substr( $namespace, 2 );
+
+               return $namespace == NS_MAIN
+                       ? $this->msg( 'blanknamespace' )->escaped()
+                       : htmlspecialchars( $this->getContext()->getLanguage()->getFormattedNsText( $namespace ) );
+       }
+
+       public function getBody() {
+               return $this->displaySection( $this->mFieldTree, '', 'editwatchlist-' );
+       }
+}
diff --git a/includes/specials/forms/PreferencesForm.php b/includes/specials/forms/PreferencesForm.php
new file mode 100644 (file)
index 0000000..d4e5ef4
--- /dev/null
@@ -0,0 +1,143 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Form to edit user preferences.
+ */
+class PreferencesForm extends HTMLForm {
+       // Override default value from HTMLForm
+       protected $mSubSectionBeforeFields = false;
+
+       private $modifiedUser;
+
+       /**
+        * @param User $user
+        */
+       public function setModifiedUser( $user ) {
+               $this->modifiedUser = $user;
+       }
+
+       /**
+        * @return User
+        */
+       public function getModifiedUser() {
+               if ( $this->modifiedUser === null ) {
+                       return $this->getUser();
+               } else {
+                       return $this->modifiedUser;
+               }
+       }
+
+       /**
+        * Get extra parameters for the query string when redirecting after
+        * successful save.
+        *
+        * @return array
+        */
+       public function getExtraSuccessRedirectParameters() {
+               return [];
+       }
+
+       /**
+        * @param string $html
+        * @return string
+        */
+       function wrapForm( $html ) {
+               $html = Xml::tags( 'div', [ 'id' => 'preferences' ], $html );
+
+               return parent::wrapForm( $html );
+       }
+
+       /**
+        * @return string
+        */
+       function getButtons() {
+               $attrs = [ 'id' => 'mw-prefs-restoreprefs' ];
+
+               if ( !$this->getModifiedUser()->isAllowedAny( 'editmyprivateinfo', 'editmyoptions' ) ) {
+                       return '';
+               }
+
+               $html = parent::getButtons();
+
+               if ( $this->getModifiedUser()->isAllowed( 'editmyoptions' ) ) {
+                       $t = $this->getTitle()->getSubpage( 'reset' );
+
+                       $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+                       $html .= "\n" . $linkRenderer->makeLink( $t, $this->msg( 'restoreprefs' )->text(),
+                               Html::buttonAttributes( $attrs, [ 'mw-ui-quiet' ] ) );
+
+                       $html = Xml::tags( 'div', [ 'class' => 'mw-prefs-buttons' ], $html );
+               }
+
+               return $html;
+       }
+
+       /**
+        * Separate multi-option preferences into multiple preferences, since we
+        * have to store them separately
+        * @param array $data
+        * @return array
+        */
+       function filterDataForSubmit( $data ) {
+               foreach ( $this->mFlatFields as $fieldname => $field ) {
+                       if ( $field instanceof HTMLNestedFilterable ) {
+                               $info = $field->mParams;
+                               $prefix = isset( $info['prefix'] ) ? $info['prefix'] : $fieldname;
+                               foreach ( $field->filterDataForSubmit( $data[$fieldname] ) as $key => $value ) {
+                                       $data["$prefix$key"] = $value;
+                               }
+                               unset( $data[$fieldname] );
+                       }
+               }
+
+               return $data;
+       }
+
+       /**
+        * Get the whole body of the form.
+        * @return string
+        */
+       function getBody() {
+               return $this->displaySection( $this->mFieldTree, '', 'mw-prefsection-' );
+       }
+
+       /**
+        * Get the "<legend>" for a given section key. Normally this is the
+        * prefs-$key message but we'll allow extensions to override it.
+        * @param string $key
+        * @return string
+        */
+       function getLegend( $key ) {
+               $legend = parent::getLegend( $key );
+               Hooks::run( 'PreferencesGetLegend', [ $this, $key, &$legend ] );
+               return $legend;
+       }
+
+       /**
+        * Get the keys of each top level preference section.
+        * @return array of section keys
+        */
+       function getPreferenceSections() {
+               return array_keys( array_filter( $this->mFieldTree, 'is_array' ) );
+       }
+}
diff --git a/includes/specials/forms/UploadForm.php b/includes/specials/forms/UploadForm.php
new file mode 100644 (file)
index 0000000..44d91a8
--- /dev/null
@@ -0,0 +1,446 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\Linker\LinkRenderer;
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Sub class of HTMLForm that provides the form section of SpecialUpload
+ */
+class UploadForm extends HTMLForm {
+       protected $mWatch;
+       protected $mForReUpload;
+       protected $mSessionKey;
+       protected $mHideIgnoreWarning;
+       protected $mDestWarningAck;
+       protected $mDestFile;
+
+       protected $mComment;
+       protected $mTextTop;
+       protected $mTextAfterSummary;
+
+       protected $mSourceIds;
+
+       protected $mMaxFileSize = [];
+
+       protected $mMaxUploadSize = [];
+
+       public function __construct( array $options = [], IContextSource $context = null,
+               LinkRenderer $linkRenderer = null
+       ) {
+               if ( $context instanceof IContextSource ) {
+                       $this->setContext( $context );
+               }
+
+               if ( !$linkRenderer ) {
+                       $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+               }
+
+               $this->mWatch = !empty( $options['watch'] );
+               $this->mForReUpload = !empty( $options['forreupload'] );
+               $this->mSessionKey = isset( $options['sessionkey'] ) ? $options['sessionkey'] : '';
+               $this->mHideIgnoreWarning = !empty( $options['hideignorewarning'] );
+               $this->mDestWarningAck = !empty( $options['destwarningack'] );
+               $this->mDestFile = isset( $options['destfile'] ) ? $options['destfile'] : '';
+
+               $this->mComment = isset( $options['description'] ) ?
+                       $options['description'] : '';
+
+               $this->mTextTop = isset( $options['texttop'] )
+                       ? $options['texttop'] : '';
+
+               $this->mTextAfterSummary = isset( $options['textaftersummary'] )
+                       ? $options['textaftersummary'] : '';
+
+               $sourceDescriptor = $this->getSourceSection();
+               $descriptor = $sourceDescriptor
+                       + $this->getDescriptionSection()
+                       + $this->getOptionsSection();
+
+               Hooks::run( 'UploadFormInitDescriptor', [ &$descriptor ] );
+               parent::__construct( $descriptor, $context, 'upload' );
+
+               # Add a link to edit MediaWiki:Licenses
+               if ( $this->getUser()->isAllowed( 'editinterface' ) ) {
+                       $this->getOutput()->addModuleStyles( 'mediawiki.special.upload.styles' );
+                       $licensesLink = $linkRenderer->makeKnownLink(
+                               $this->msg( 'licenses' )->inContentLanguage()->getTitle(),
+                               $this->msg( 'licenses-edit' )->text(),
+                               [],
+                               [ 'action' => 'edit' ]
+                       );
+                       $editLicenses = '<p class="mw-upload-editlicenses">' . $licensesLink . '</p>';
+                       $this->addFooterText( $editLicenses, 'description' );
+               }
+
+               # Set some form properties
+               $this->setSubmitText( $this->msg( 'uploadbtn' )->text() );
+               $this->setSubmitName( 'wpUpload' );
+               # Used message keys: 'accesskey-upload', 'tooltip-upload'
+               $this->setSubmitTooltip( 'upload' );
+               $this->setId( 'mw-upload-form' );
+
+               # Build a list of IDs for javascript insertion
+               $this->mSourceIds = [];
+               foreach ( $sourceDescriptor as $field ) {
+                       if ( !empty( $field['id'] ) ) {
+                               $this->mSourceIds[] = $field['id'];
+                       }
+               }
+       }
+
+       /**
+        * Get the descriptor of the fieldset that contains the file source
+        * selection. The section is 'source'
+        *
+        * @return array Descriptor array
+        */
+       protected function getSourceSection() {
+               if ( $this->mSessionKey ) {
+                       return [
+                               'SessionKey' => [
+                                       'type' => 'hidden',
+                                       'default' => $this->mSessionKey,
+                               ],
+                               'SourceType' => [
+                                       'type' => 'hidden',
+                                       'default' => 'Stash',
+                               ],
+                       ];
+               }
+
+               $canUploadByUrl = UploadFromUrl::isEnabled()
+                       && ( UploadFromUrl::isAllowed( $this->getUser() ) === true )
+                       && $this->getConfig()->get( 'CopyUploadsFromSpecialUpload' );
+               $radio = $canUploadByUrl;
+               $selectedSourceType = strtolower( $this->getRequest()->getText( 'wpSourceType', 'File' ) );
+
+               $descriptor = [];
+               if ( $this->mTextTop ) {
+                       $descriptor['UploadFormTextTop'] = [
+                               'type' => 'info',
+                               'section' => 'source',
+                               'default' => $this->mTextTop,
+                               'raw' => true,
+                       ];
+               }
+
+               $this->mMaxUploadSize['file'] = min(
+                       UploadBase::getMaxUploadSize( 'file' ),
+                       UploadBase::getMaxPhpUploadSize()
+               );
+
+               $help = $this->msg( 'upload-maxfilesize',
+                               $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['file'] )
+                       )->parse();
+
+               // If the user can also upload by URL, there are 2 different file size limits.
+               // This extra message helps stress which limit corresponds to what.
+               if ( $canUploadByUrl ) {
+                       $help .= $this->msg( 'word-separator' )->escaped();
+                       $help .= $this->msg( 'upload_source_file' )->parse();
+               }
+
+               $descriptor['UploadFile'] = [
+                       'class' => 'UploadSourceField',
+                       'section' => 'source',
+                       'type' => 'file',
+                       'id' => 'wpUploadFile',
+                       'radio-id' => 'wpSourceTypeFile',
+                       'label-message' => 'sourcefilename',
+                       'upload-type' => 'File',
+                       'radio' => &$radio,
+                       'help' => $help,
+                       'checked' => $selectedSourceType == 'file',
+               ];
+
+               if ( $canUploadByUrl ) {
+                       $this->mMaxUploadSize['url'] = UploadBase::getMaxUploadSize( 'url' );
+                       $descriptor['UploadFileURL'] = [
+                               'class' => 'UploadSourceField',
+                               'section' => 'source',
+                               'id' => 'wpUploadFileURL',
+                               'radio-id' => 'wpSourceTypeurl',
+                               'label-message' => 'sourceurl',
+                               'upload-type' => 'url',
+                               'radio' => &$radio,
+                               'help' => $this->msg( 'upload-maxfilesize',
+                                       $this->getContext()->getLanguage()->formatSize( $this->mMaxUploadSize['url'] )
+                               )->parse() .
+                                       $this->msg( 'word-separator' )->escaped() .
+                                       $this->msg( 'upload_source_url' )->parse(),
+                               'checked' => $selectedSourceType == 'url',
+                       ];
+               }
+               Hooks::run( 'UploadFormSourceDescriptors', [ &$descriptor, &$radio, $selectedSourceType ] );
+
+               $descriptor['Extensions'] = [
+                       'type' => 'info',
+                       'section' => 'source',
+                       'default' => $this->getExtensionsMessage(),
+                       'raw' => true,
+               ];
+
+               return $descriptor;
+       }
+
+       /**
+        * Get the messages indicating which extensions are preferred and prohibitted.
+        *
+        * @return string HTML string containing the message
+        */
+       protected function getExtensionsMessage() {
+               # Print a list of allowed file extensions, if so configured.  We ignore
+               # MIME type here, it's incomprehensible to most people and too long.
+               $config = $this->getConfig();
+
+               if ( $config->get( 'CheckFileExtensions' ) ) {
+                       $fileExtensions = array_unique( $config->get( 'FileExtensions' ) );
+                       if ( $config->get( 'StrictFileExtensions' ) ) {
+                               # Everything not permitted is banned
+                               $extensionsList =
+                                       '<div id="mw-upload-permitted">' .
+                                       $this->msg( 'upload-permitted' )
+                                               ->params( $this->getLanguage()->commaList( $fileExtensions ) )
+                                               ->numParams( count( $fileExtensions ) )
+                                               ->parseAsBlock() .
+                                       "</div>\n";
+                       } else {
+                               # We have to list both preferred and prohibited
+                               $fileBlacklist = array_unique( $config->get( 'FileBlacklist' ) );
+                               $extensionsList =
+                                       '<div id="mw-upload-preferred">' .
+                                               $this->msg( 'upload-preferred' )
+                                                       ->params( $this->getLanguage()->commaList( $fileExtensions ) )
+                                                       ->numParams( count( $fileExtensions ) )
+                                                       ->parseAsBlock() .
+                                       "</div>\n" .
+                                       '<div id="mw-upload-prohibited">' .
+                                               $this->msg( 'upload-prohibited' )
+                                                       ->params( $this->getLanguage()->commaList( $fileBlacklist ) )
+                                                       ->numParams( count( $fileBlacklist ) )
+                                                       ->parseAsBlock() .
+                                       "</div>\n";
+                       }
+               } else {
+                       # Everything is permitted.
+                       $extensionsList = '';
+               }
+
+               return $extensionsList;
+       }
+
+       /**
+        * Get the descriptor of the fieldset that contains the file description
+        * input. The section is 'description'
+        *
+        * @return array Descriptor array
+        */
+       protected function getDescriptionSection() {
+               $config = $this->getConfig();
+               if ( $this->mSessionKey ) {
+                       $stash = RepoGroup::singleton()->getLocalRepo()->getUploadStash( $this->getUser() );
+                       try {
+                               $file = $stash->getFile( $this->mSessionKey );
+                       } catch ( Exception $e ) {
+                               $file = null;
+                       }
+                       if ( $file ) {
+                               global $wgContLang;
+
+                               $mto = $file->transform( [ 'width' => 120 ] );
+                               if ( $mto ) {
+                                       $this->addHeaderText(
+                                               '<div class="thumb t' . $wgContLang->alignEnd() . '">' .
+                                               Html::element( 'img', [
+                                                       'src' => $mto->getUrl(),
+                                                       'class' => 'thumbimage',
+                                               ] ) . '</div>', 'description' );
+                               }
+                       }
+               }
+
+               $descriptor = [
+                       'DestFile' => [
+                               'type' => 'text',
+                               'section' => 'description',
+                               'id' => 'wpDestFile',
+                               'label-message' => 'destfilename',
+                               'size' => 60,
+                               'default' => $this->mDestFile,
+                               # @todo FIXME: Hack to work around poor handling of the 'default' option in HTMLForm
+                               'nodata' => strval( $this->mDestFile ) !== '',
+                       ],
+                       'UploadDescription' => [
+                               'type' => 'textarea',
+                               'section' => 'description',
+                               'id' => 'wpUploadDescription',
+                               'label-message' => $this->mForReUpload
+                                       ? 'filereuploadsummary'
+                                       : 'fileuploadsummary',
+                               'default' => $this->mComment,
+                               'cols' => 80,
+                               'rows' => 8,
+                       ]
+               ];
+               if ( $this->mTextAfterSummary ) {
+                       $descriptor['UploadFormTextAfterSummary'] = [
+                               'type' => 'info',
+                               'section' => 'description',
+                               'default' => $this->mTextAfterSummary,
+                               'raw' => true,
+                       ];
+               }
+
+               $descriptor += [
+                       'EditTools' => [
+                               'type' => 'edittools',
+                               'section' => 'description',
+                               'message' => 'edittools-upload',
+                       ]
+               ];
+
+               if ( $this->mForReUpload ) {
+                       $descriptor['DestFile']['readonly'] = true;
+               } else {
+                       $descriptor['License'] = [
+                               'type' => 'select',
+                               'class' => 'Licenses',
+                               'section' => 'description',
+                               'id' => 'wpLicense',
+                               'label-message' => 'license',
+                       ];
+               }
+
+               if ( $config->get( 'UseCopyrightUpload' ) ) {
+                       $descriptor['UploadCopyStatus'] = [
+                               'type' => 'text',
+                               'section' => 'description',
+                               'id' => 'wpUploadCopyStatus',
+                               'label-message' => 'filestatus',
+                       ];
+                       $descriptor['UploadSource'] = [
+                               'type' => 'text',
+                               'section' => 'description',
+                               'id' => 'wpUploadSource',
+                               'label-message' => 'filesource',
+                       ];
+               }
+
+               return $descriptor;
+       }
+
+       /**
+        * Get the descriptor of the fieldset that contains the upload options,
+        * such as "watch this file". The section is 'options'
+        *
+        * @return array Descriptor array
+        */
+       protected function getOptionsSection() {
+               $user = $this->getUser();
+               if ( $user->isLoggedIn() ) {
+                       $descriptor = [
+                               'Watchthis' => [
+                                       'type' => 'check',
+                                       'id' => 'wpWatchthis',
+                                       'label-message' => 'watchthisupload',
+                                       'section' => 'options',
+                                       'default' => $this->mWatch,
+                               ]
+                       ];
+               }
+               if ( !$this->mHideIgnoreWarning ) {
+                       $descriptor['IgnoreWarning'] = [
+                               'type' => 'check',
+                               'id' => 'wpIgnoreWarning',
+                               'label-message' => 'ignorewarnings',
+                               'section' => 'options',
+                       ];
+               }
+
+               $descriptor['DestFileWarningAck'] = [
+                       'type' => 'hidden',
+                       'id' => 'wpDestFileWarningAck',
+                       'default' => $this->mDestWarningAck ? '1' : '',
+               ];
+
+               if ( $this->mForReUpload ) {
+                       $descriptor['ForReUpload'] = [
+                               'type' => 'hidden',
+                               'id' => 'wpForReUpload',
+                               'default' => '1',
+                       ];
+               }
+
+               return $descriptor;
+       }
+
+       /**
+        * Add the upload JS and show the form.
+        */
+       public function show() {
+               $this->addUploadJS();
+               parent::show();
+       }
+
+       /**
+        * Add upload JS to the OutputPage
+        */
+       protected function addUploadJS() {
+               $config = $this->getConfig();
+
+               $useAjaxDestCheck = $config->get( 'UseAjax' ) && $config->get( 'AjaxUploadDestCheck' );
+               $useAjaxLicensePreview = $config->get( 'UseAjax' ) &&
+                       $config->get( 'AjaxLicensePreview' ) && $config->get( 'EnableAPI' );
+               $this->mMaxUploadSize['*'] = UploadBase::getMaxUploadSize();
+
+               $scriptVars = [
+                       'wgAjaxUploadDestCheck' => $useAjaxDestCheck,
+                       'wgAjaxLicensePreview' => $useAjaxLicensePreview,
+                       'wgUploadAutoFill' => !$this->mForReUpload &&
+                               // If we received mDestFile from the request, don't autofill
+                               // the wpDestFile textbox
+                               $this->mDestFile === '',
+                       'wgUploadSourceIds' => $this->mSourceIds,
+                       'wgCheckFileExtensions' => $config->get( 'CheckFileExtensions' ),
+                       'wgStrictFileExtensions' => $config->get( 'StrictFileExtensions' ),
+                       'wgFileExtensions' => array_values( array_unique( $config->get( 'FileExtensions' ) ) ),
+                       'wgCapitalizeUploads' => MWNamespace::isCapitalized( NS_FILE ),
+                       'wgMaxUploadSize' => $this->mMaxUploadSize,
+                       'wgFileCanRotate' => SpecialUpload::rotationEnabled(),
+               ];
+
+               $out = $this->getOutput();
+               $out->addJsConfigVars( $scriptVars );
+
+               $out->addModules( [
+                       'mediawiki.special.upload', // Extras for thumbnail and license preview.
+               ] );
+       }
+
+       /**
+        * Empty function; submission is handled elsewhere.
+        *
+        * @return bool False
+        */
+       function trySubmit() {
+               return false;
+       }
+}
diff --git a/includes/specials/helpers/ImportReporter.php b/includes/specials/helpers/ImportReporter.php
new file mode 100644 (file)
index 0000000..63addb8
--- /dev/null
@@ -0,0 +1,190 @@
+<?php
+/**
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ */
+
+use MediaWiki\MediaWikiServices;
+
+/**
+ * Reporting callback
+ * @ingroup SpecialPage
+ */
+class ImportReporter extends ContextSource {
+       private $reason = false;
+       private $logTags = [];
+       private $mOriginalLogCallback = null;
+       private $mOriginalPageOutCallback = null;
+       private $mLogItemCount = 0;
+
+       /**
+        * @param WikiImporter $importer
+        * @param bool $upload
+        * @param string $interwiki
+        * @param string|bool $reason
+        */
+       function __construct( $importer, $upload, $interwiki, $reason = false ) {
+               $this->mOriginalPageOutCallback =
+                       $importer->setPageOutCallback( [ $this, 'reportPage' ] );
+               $this->mOriginalLogCallback =
+                       $importer->setLogItemCallback( [ $this, 'reportLogItem' ] );
+               $importer->setNoticeCallback( [ $this, 'reportNotice' ] );
+               $this->mPageCount = 0;
+               $this->mIsUpload = $upload;
+               $this->mInterwiki = $interwiki;
+               $this->reason = $reason;
+       }
+
+       /**
+        * Sets change tags to apply to the import log entry and null revision.
+        *
+        * @param array $tags
+        * @since 1.29
+        */
+       public function setChangeTags( array $tags ) {
+               $this->logTags = $tags;
+       }
+
+       function open() {
+               $this->getOutput()->addHTML( "<ul>\n" );
+       }
+
+       function reportNotice( $msg, array $params ) {
+               $this->getOutput()->addHTML(
+                       Html::element( 'li', [], $this->msg( $msg, $params )->text() )
+               );
+       }
+
+       function reportLogItem( /* ... */ ) {
+               $this->mLogItemCount++;
+               if ( is_callable( $this->mOriginalLogCallback ) ) {
+                       call_user_func_array( $this->mOriginalLogCallback, func_get_args() );
+               }
+       }
+
+       /**
+        * @param Title $title
+        * @param ForeignTitle $foreignTitle
+        * @param int $revisionCount
+        * @param int $successCount
+        * @param array $pageInfo
+        * @return void
+        */
+       public function reportPage( $title, $foreignTitle, $revisionCount,
+                       $successCount, $pageInfo ) {
+               $args = func_get_args();
+               call_user_func_array( $this->mOriginalPageOutCallback, $args );
+
+               if ( $title === null ) {
+                       # Invalid or non-importable title; a notice is already displayed
+                       return;
+               }
+
+               $this->mPageCount++;
+               $linkRenderer = MediaWikiServices::getInstance()->getLinkRenderer();
+               if ( $successCount > 0 ) {
+                       // <bdi> prevents jumbling of the versions count
+                       // in RTL wikis in case the page title is LTR
+                       $this->getOutput()->addHTML(
+                               "<li>" . $linkRenderer->makeLink( $title ) . " " .
+                                       "<bdi>" .
+                                       $this->msg( 'import-revision-count' )->numParams( $successCount )->escaped() .
+                                       "</bdi>" .
+                                       "</li>\n"
+                       );
+
+                       $logParams = [ '4:number:count' => $successCount ];
+                       if ( $this->mIsUpload ) {
+                               $detail = $this->msg( 'import-logentry-upload-detail' )->numParams(
+                                       $successCount )->inContentLanguage()->text();
+                               $action = 'upload';
+                       } else {
+                               $pageTitle = $foreignTitle->getFullText();
+                               $fullInterwikiPrefix = $this->mInterwiki;
+                               Hooks::run( 'ImportLogInterwikiLink', [ &$fullInterwikiPrefix, &$pageTitle ] );
+
+                               $interwikiTitleStr = $fullInterwikiPrefix . ':' . $pageTitle;
+                               $interwiki = '[[:' . $interwikiTitleStr . ']]';
+                               $detail = $this->msg( 'import-logentry-interwiki-detail' )->numParams(
+                                       $successCount )->params( $interwiki )->inContentLanguage()->text();
+                               $action = 'interwiki';
+                               $logParams['5:title-link:interwiki'] = $interwikiTitleStr;
+                       }
+                       if ( $this->reason ) {
+                               $detail .= $this->msg( 'colon-separator' )->inContentLanguage()->text()
+                                       . $this->reason;
+                       }
+
+                       $comment = $detail; // quick
+                       $dbw = wfGetDB( DB_MASTER );
+                       $latest = $title->getLatestRevID();
+                       $nullRevision = Revision::newNullRevision(
+                               $dbw,
+                               $title->getArticleID(),
+                               $comment,
+                               true,
+                               $this->getUser()
+                       );
+
+                       $nullRevId = null;
+                       if ( !is_null( $nullRevision ) ) {
+                               $nullRevId = $nullRevision->insertOn( $dbw );
+                               $page = WikiPage::factory( $title );
+                               # Update page record
+                               $page->updateRevisionOn( $dbw, $nullRevision );
+                               Hooks::run(
+                                       'NewRevisionFromEditComplete',
+                                       [ $page, $nullRevision, $latest, $this->getUser() ]
+                               );
+                       }
+
+                       // Create the import log entry
+                       $logEntry = new ManualLogEntry( 'import', $action );
+                       $logEntry->setTarget( $title );
+                       $logEntry->setComment( $this->reason );
+                       $logEntry->setPerformer( $this->getUser() );
+                       $logEntry->setParameters( $logParams );
+                       $logid = $logEntry->insert();
+                       if ( count( $this->logTags ) ) {
+                               $logEntry->setTags( $this->logTags );
+                       }
+                       // Make sure the null revision will be tagged as well
+                       $logEntry->setAssociatedRevId( $nullRevId );
+
+                       $logEntry->publish( $logid );
+
+               } else {
+                       $this->getOutput()->addHTML( "<li>" . $linkRenderer->makeKnownLink( $title ) . " " .
+                               $this->msg( 'import-nonewrevisions' )->escaped() . "</li>\n" );
+               }
+       }
+
+       function close() {
+               $out = $this->getOutput();
+               if ( $this->mLogItemCount > 0 ) {
+                       $msg = $this->msg( 'imported-log-entries' )->numParams( $this->mLogItemCount )->parse();
+                       $out->addHTML( Xml::tags( 'li', null, $msg ) );
+               } elseif ( $this->mPageCount == 0 && $this->mLogItemCount == 0 ) {
+                       $out->addHTML( "</ul>\n" );
+
+                       return Status::newFatal( 'importnopages' );
+               }
+               $out->addHTML( "</ul>\n" );
+
+               return Status::newGood( $this->mPageCount );
+       }
+}
diff --git a/includes/specials/helpers/License.php b/includes/specials/helpers/License.php
new file mode 100644 (file)
index 0000000..4f94b4d
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+/**
+ * License selector for use on Special:Upload.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * http://www.gnu.org/copyleft/gpl.html
+ *
+ * @file
+ * @ingroup SpecialPage
+ * @author Ævar Arnfjörð Bjarmason <avarab@gmail.com>
+ * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason
+ * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
+ */
+
+/**
+ * A License class for use on Special:Upload (represents a single type of license).
+ */
+class License {
+       /** @var string */
+       public $template;
+
+       /** @var string */
+       public $text;
+
+       /**
+        * @param string $str License name??
+        */
+       function __construct( $str ) {
+               list( $text, $template ) = explode( '|', strrev( $str ), 2 );
+
+               $this->template = strrev( $template );
+               $this->text = strrev( $text );
+       }
+}
index 0665e11..64af71a 100644 (file)
@@ -118,16 +118,15 @@ class ActiveUsersPager extends UsersPager {
                                ) . ')';
                }
 
-               if ( $dbr->implicitGroupby() ) {
-                       $options = [ 'GROUP BY' => [ 'qcc_title' ] ];
-               } else {
-                       $options = [ 'GROUP BY' => [ 'user_name', 'user_id', 'qcc_title' ] ];
-               }
-
                return [
                        'tables' => $tables,
-                       'fields' => [ 'user_name', 'user_id', 'recentedits' => 'COUNT(*)', 'qcc_title' ],
-                       'options' => $options,
+                       'fields' => [
+                               'qcc_title',
+                               'user_name' => 'qcc_title',
+                               'user_id' => 'MAX(user_id)',
+                               'recentedits' => 'COUNT(*)'
+                       ],
+                       'options' => [ 'GROUP BY' => [ 'qcc_title' ] ],
                        'conds' => $conds
                ];
        }
index 7d0a9df..31ea810 100644 (file)
@@ -371,7 +371,7 @@ class ContribsPager extends RangeChronologicalPager {
         * @return string Name of field
         */
        public function getIndexField() {
-               if ( self::isQueryableRange( $this->target ) ) {
+               if ( $this->isQueryableRange( $this->target ) ) {
                        return 'ipc_rev_timestamp';
                } else {
                        return 'rev_timestamp';
@@ -394,6 +394,9 @@ class ContribsPager extends RangeChronologicalPager {
                                if ( $this->contribs === 'newbie' ) { // multiple users
                                        $batch->add( NS_USER, $row->user_name );
                                        $batch->add( NS_USER_TALK, $row->user_name );
+                               } elseif ( $this->isQueryableRange( $this->target ) ) {
+                                       // If this is an IP range, batch the IP's talk page
+                                       $batch->add( NS_USER_TALK, $row->rev_user_text );
                                }
                                $batch->add( $row->page_namespace, $row->page_title );
                        }
@@ -546,7 +549,7 @@ class ContribsPager extends RangeChronologicalPager {
                        # When querying for an IP range, we want to always show user and user talk links.
                        $userlink = '';
                        if ( ( $this->contribs == 'newbie' && !$rev->isDeleted( Revision::DELETED_USER ) )
-                               || self::isQueryableRange( $this->target ) ) {
+                               || $this->isQueryableRange( $this->target ) ) {
                                $userlink = ' . . ' . $lang->getDirMark()
                                        . Linker::userLink( $rev->getUser(), $rev->getUserText() );
                                $userlink .= ' ' . $this->msg( 'parentheses' )->rawParams(
index 813d1d4..1c46f4c 100644 (file)
@@ -286,13 +286,8 @@ class ImageListPager extends TablePager {
                        }
                        unset( $field );
 
-                       $dbr = wfGetDB( DB_REPLICA );
-                       if ( $dbr->implicitGroupby() ) {
-                               $options = [ 'GROUP BY' => 'img_name' ];
-                       } else {
-                               $columnlist = preg_grep( '/^img/', array_keys( $this->getFieldNames() ) );
-                               $options = [ 'GROUP BY' => array_merge( [ 'img_user' ], $columnlist ) ];
-                       }
+                       $columnlist = preg_grep( '/^img/', array_keys( $this->getFieldNames() ) );
+                       $options = [ 'GROUP BY' => array_merge( [ 'img_user' ], $columnlist ) ];
                        $join_conds = [ 'oldimage' => [ 'LEFT JOIN', 'oi_name = img_name' ] ];
                }
 
index 947a572..fbe9270 100644 (file)
@@ -627,6 +627,7 @@ class BalanceElement {
 
        /**
         * Get a string key for the Noah's Ark algorithm
+        * @return string
         */
        public function getNoahKey() {
                if ( $this->noahKey === null ) {
@@ -710,6 +711,7 @@ class BalanceStack implements IteratorAggregate {
        /**
         * Insert a comment at the appropriate place for inserting a node.
         * @param string $value Content of the comment.
+        * @return string
         * @see https://html.spec.whatwg.org/multipage/syntax.html#insert-a-comment
         */
        public function insertComment( $value ) {
@@ -721,6 +723,7 @@ class BalanceStack implements IteratorAggregate {
         * Insert text at the appropriate place for inserting a node.
         * @param string $value
         * @param bool $isComment
+        * @return string
         * @see https://html.spec.whatwg.org/multipage/syntax.html#appropriate-place-for-inserting-a-node
         */
        public function insertText( $value, $isComment = false ) {
@@ -901,6 +904,8 @@ class BalanceStack implements IteratorAggregate {
 
        /**
         * Return the adjusted current node.
+        * @param string $fragmentContext
+        * @return string
         */
        public function adjustedCurrentNode( $fragmentContext ) {
                return ( $fragmentContext && count( $this->elements ) === 1 ) ?
@@ -1513,6 +1518,8 @@ class BalanceActiveFormattingElements {
         * Find and return the last element with the specified tag between the
         * end of the list and the last marker on the list.
         * Used when parsing &lt;a&gt; "in body mode".
+        * @param string $tag
+        * @return null|Node
         */
        public function findElementByTag( $tag ) {
                $elt = $this->tail;
index 6e01894..f88b673 100644 (file)
@@ -14,6 +14,7 @@ abstract class TidyDriverBase {
 
        /**
         * Return true if validate() can be used
+        * @return bool
         */
        public function supportsValidate() {
                return false;
index 2ced6e2..618b7f0 100644 (file)
@@ -157,6 +157,27 @@ abstract class CentralIdLookup implements IDBAccessObject {
                return $idToName[$id];
        }
 
+       /**
+        * Given a an array of central user IDs, return the (local) user names.
+        * @param int[] $ids Central user IDs
+        * @param int|User $audience One of the audience constants, or a specific user
+        * @param int $flags IDBAccessObject read flags
+        * @return string[] User names
+        * @since 1.30
+        */
+       public function namesFromCentralIds(
+               array $ids, $audience = self::AUDIENCE_PUBLIC, $flags = self::READ_NORMAL
+       ) {
+               $idToName = array_fill_keys( $ids, false );
+               $names = $this->lookupCentralIds( $idToName, $audience, $flags );
+               $names = array_unique( $names );
+               $names = array_filter( $names, function ( $name ) {
+                       return $name !== false && $name !== '';
+               } );
+
+               return array_values( $names );
+       }
+
        /**
         * Given a (local) user name, return the central ID
         * @note There's no requirement that the user name actually exists locally,
@@ -174,6 +195,27 @@ abstract class CentralIdLookup implements IDBAccessObject {
                return $nameToId[$name];
        }
 
+       /**
+        * Given an array of (local) user names, return the central IDs.
+        * @param string[] $names Canonicalized user names
+        * @param int|User $audience One of the audience constants, or a specific user
+        * @param int $flags IDBAccessObject read flags
+        * @return int[] User IDs
+        * @since 1.30
+        */
+       public function centralIdsFromNames(
+               array $names, $audience = self::AUDIENCE_PUBLIC, $flags = self::READ_NORMAL
+       ) {
+               $nameToId = array_fill_keys( $names, false );
+               $ids = $this->lookupUserNames( $nameToId, $audience, $flags );
+               $ids = array_unique( $ids );
+               $ids = array_filter( $ids, function ( $id ) {
+                       return $id !== false;
+               } );
+
+               return array_values( $ids );
+       }
+
        /**
         * Given a central user ID, return a local User object
         * @note Unlike nameFromCentralId(), this does guarantee that the local
index 0c39610..6115144 100644 (file)
@@ -5317,6 +5317,13 @@ class User implements IDBAccessObject {
                                        $data[$row->up_property] = $row->up_value;
                                }
                        }
+
+                       // Convert the email blacklist from a new line delimited string
+                       // to an array of ids.
+                       if ( isset( $data['email-blacklist'] ) && $data['email-blacklist'] ) {
+                               $data['email-blacklist'] = array_map( 'intval', explode( "\n", $data['email-blacklist'] ) );
+                       }
+
                        foreach ( $data as $property => $value ) {
                                $this->mOptionOverrides[$property] = $value;
                                $this->mOptions[$property] = $value;
@@ -5339,6 +5346,26 @@ class User implements IDBAccessObject {
                // Not using getOptions(), to keep hidden preferences in database
                $saveOptions = $this->mOptions;
 
+               // Convert usernames to ids.
+               if ( isset( $this->mOptions['email-blacklist'] ) ) {
+                       if ( $this->mOptions['email-blacklist'] ) {
+                               $value = $this->mOptions['email-blacklist'];
+                               // Email Blacklist may be an array of ids or a string of new line
+                               // delimnated user names.
+                               if ( is_array( $value ) ) {
+                                       $ids = array_filter( $value, 'is_numeric' );
+                               } else {
+                                       $lookup = CentralIdLookup::factory();
+                                       $ids = $lookup->centralIdsFromNames( explode( "\n", $value ), $this );
+                               }
+                               $this->mOptions['email-blacklist'] = $ids;
+                               $saveOptions['email-blacklist'] = implode( "\n", $this->mOptions['email-blacklist'] );
+                       } else {
+                               // If the blacklist is empty, set it to null rather than an empty string.
+                               $this->mOptions['email-blacklist'] = null;
+                       }
+               }
+
                // Allow hooks to abort, for instance to save to a global profile.
                // Reset options to default state before saving.
                if ( !Hooks::run( 'UserSaveOptions', [ $this, &$saveOptions ] ) ) {
index 19f5100..4f639c1 100644 (file)
@@ -321,7 +321,7 @@ class ClassCollector {
        protected $alias;
 
        /**
-        * @var string $code PHP code (including <?php) to detect class names from
+        * @param string $code PHP code (including <?php) to detect class names from
         * @return array List of FQCN detected within the tokens
         */
        public function getClasses( $code ) {
index 6d0368c..67c0ca7 100644 (file)
@@ -662,7 +662,7 @@ class LanguageConverter {
         *
         * @param string $text Text to be converted
         * @param string $variant The target variant code
-        * @param int $startPos
+        * @param int &$startPos
         * @param int $depth Depth of recursion
         *
         * @throws MWException
index 03ebe21..64cce78 100644 (file)
@@ -3155,6 +3155,7 @@ public static $zh2Hant = [
 '上签约' => '上簽約',
 '上签署' => '上簽署',
 '上签订' => '上簽訂',
+'上签证' => '上簽證',
 '上签' => '上籤',
 '上系上' => '上繫上',
 '上课钟' => '上課鐘',
@@ -3172,6 +3173,7 @@ public static $zh2Hant = [
 '下签约' => '下簽約',
 '下签署' => '下簽署',
 '下签订' => '下簽訂',
+'下签证' => '下簽證',
 '下签' => '下籤',
 '下课钟' => '下課鐘',
 '不干不净' => '不乾不淨',
@@ -3247,6 +3249,7 @@ public static $zh2Hant = [
 '中签约' => '中簽約',
 '中签署' => '中簽署',
 '中签订' => '中簽訂',
+'中签证' => '中簽證',
 '中签' => '中籤',
 '中风后' => '中風後',
 '丰仪' => '丰儀',
@@ -4322,7 +4325,6 @@ public static $zh2Hant = [
 '台子女' => '台子女',
 '台子孙' => '台子孫',
 '台州' => '台州',
-'台布景' => '台布景',
 '台历史' => '台歷史',
 '台钟' => '台鐘',
 '台风奖' => '台風獎',
@@ -4867,6 +4869,8 @@ public static $zh2Hant = [
 '尸祝' => '尸祝',
 '尸祿' => '尸祿',
 '尸禄' => '尸祿',
+'尸罗' => '尸羅',
+'尸羅' => '尸羅',
 '尸罗精舍' => '尸羅精舍',
 '尸羅精舍' => '尸羅精舍',
 '尸臣' => '尸臣',
@@ -5883,6 +5887,7 @@ public static $zh2Hant = [
 '星历' => '星曆',
 '星期后' => '星期後',
 '星历史' => '星歷史',
+'星露谷物语' => '星露谷物語',
 '春游' => '春遊',
 '春香斗学' => '春香鬥學',
 '昭惠后' => '昭惠后',
@@ -6034,6 +6039,7 @@ public static $zh2Hant = [
 '架钟' => '架鐘',
 '某只' => '某隻',
 '染殿后' => '染殿后',
+'染发生' => '染發生',
 '染发' => '染髮',
 '柜上' => '柜上',
 '柜子' => '柜子',
@@ -6063,7 +6069,6 @@ public static $zh2Hant = [
 '杆菌' => '桿菌',
 '梁上君子' => '梁上君子',
 '梁启超' => '梁啓超',
-'条干' => '條幹',
 '条文里' => '條文裡',
 '梨干' => '梨乾',
 '梯冲' => '梯衝',
@@ -6139,7 +6144,6 @@ public static $zh2Hant = [
 '横征暴敛' => '橫徵暴斂',
 '横梁' => '橫樑',
 '横冲' => '橫衝',
-'台布' => '檯布',
 '台历' => '檯曆',
 '台灯' => '檯燈',
 '台球' => '檯球',
@@ -8494,6 +8498,10 @@ public static $zh2Hant = [
 '闯荡' => '闖蕩',
 '闯炼' => '闖鍊',
 '关系' => '關係',
+'关系列' => '關系列',
+'关系所' => '關系所',
+'关系科' => '關系科',
+'关系统' => '關系統',
 '辟佛' => '闢佛',
 '辟作' => '闢作',
 '辟划' => '闢劃',
@@ -9710,6 +9718,7 @@ public static $zh2Hans = [
 '圞' => '𪢮',
 '坿' => '附',
 '垜' => '垛',
+'垻' => '坝',
 '埡' => '垭',
 '執' => '执',
 '堅' => '坚',
@@ -13498,6 +13507,7 @@ public static $zh2Hans = [
 '崑崙' => '昆仑',
 '崑劇' => '昆剧',
 '崑山' => '昆山',
+'崑島' => '昆岛',
 '崑曲' => '昆曲',
 '崑腔' => '昆腔',
 '崑蘇' => '昆苏',
@@ -13875,6 +13885,9 @@ public static $zh2TW = [
 '哥特式' => '哥德式',
 '哥斯达黎加' => '哥斯大黎加',
 '哥斯達黎加' => '哥斯大黎加',
+'唐纳德·特朗普' => '唐納·川普',
+'當勞·特朗普' => '唐納·川普',
+'當奴·特朗普' => '唐納·川普',
 '卡拉奇' => '喀拉蚩',
 '乔治·奥威尔' => '喬治·歐威爾',
 '佐治亚' => '喬治亞',
@@ -13951,6 +13964,7 @@ public static $zh2TW = [
 '尼日尔' => '尼日',
 '尼日爾' => '尼日',
 '雅马哈' => '山葉',
+'特朗普' => '川普',
 '机床' => '工具機',
 '機床' => '工具機',
 '珍寶客機' => '巨無霸客機',
@@ -14105,6 +14119,7 @@ public static $zh2TW = [
 '奥巴马' => '歐巴馬',
 '奧巴馬' => '歐巴馬',
 '正在叱咤' => '正在叱咤',
+'圣佩德罗苏拉' => '汕埠',
 '文莱' => '汶萊',
 '沙律' => '沙拉',
 '沙地阿拉伯' => '沙烏地阿拉伯',
@@ -14270,7 +14285,8 @@ public static $zh2TW = [
 '毛里塔尼亞' => '茅利塔尼亞',
 '霍尔木兹' => '荷姆茲',
 '霍爾木茲' => '荷姆茲',
-'荷李活道' => '荷李活道',
+'荷里活廣場' => '荷里活廣場',
+'荷里活道' => '荷里活道',
 '莫桑比克' => '莫三比克',
 '瓦文萨' => '華勒沙',
 '華里沙' => '華勒沙',
@@ -14349,6 +14365,8 @@ public static $zh2TW = [
 '屏幕' => '螢幕',
 '行人路权' => '行人路權',
 '行人路權' => '行人路權',
+'流動作業系統' => '行動作業系統',
+'移动操作系统' => '行動作業系統',
 '流動網絡' => '行動網路',
 '移动网络' => '行動網路',
 '流動電話' => '行動電話',
@@ -14840,6 +14858,7 @@ public static $zh2HK = [
 '占高枝' => '佔高枝',
 '維德角' => '佛得角',
 '作品里' => '作品裏',
+'操作系统' => '作業系統',
 '來著' => '來着',
 '來著作' => '來著作',
 '來著名' => '來著名',
@@ -15843,6 +15862,8 @@ public static $zh2HK = [
 '數碼訊號' => '數碼訊號',
 '数字电视' => '數碼電視',
 '數位電視' => '數碼電視',
+'数字音乐' => '數碼音樂',
+'數位音樂' => '數碼音樂',
 '數著作' => '數著作',
 '數著名' => '數著名',
 '數著稱' => '數著稱',
@@ -15974,7 +15995,6 @@ public static $zh2HK = [
 '枕著述' => '枕著述',
 '枕著錄' => '枕著錄',
 '檯' => '枱',
-'台布' => '枱布',
 '台历' => '枱曆',
 '台灯' => '枱燈',
 '台面上' => '枱面上',
@@ -16101,6 +16121,8 @@ public static $zh2HK = [
 '活著者' => '活著者',
 '活著述' => '活著述',
 '活著錄' => '活著錄',
+'移动操作系统' => '流動作業系統',
+'行動作業系統' => '流動作業系統',
 '移动网络' => '流動網絡',
 '行動網路' => '流動網絡',
 '移动电话' => '流動電話',
@@ -16313,6 +16335,8 @@ public static $zh2HK = [
 '畫著稱' => '畫著稱',
 '畫著者' => '畫著者',
 '画里' => '畫裏',
+'唐納·川普' => '當勞·特朗普',
+'唐纳德·特朗普' => '當勞·特朗普',
 '當著' => '當着',
 '當著作' => '當著作',
 '過著作' => '當著作',
@@ -18118,6 +18142,9 @@ public static $zh2CN = [
 '哭著稱' => '哭著称',
 '哭著者' => '哭著者',
 '哭著述' => '哭著述',
+'唐納·川普' => '唐纳德·特朗普',
+'當勞·特朗普' => '唐纳德·特朗普',
+'當奴·特朗普' => '唐纳德·特朗普',
 '唱著' => '唱着',
 '唱著書' => '唱著书',
 '唱著作' => '唱著作',
@@ -18180,6 +18207,7 @@ public static $zh2CN = [
 '土魯斯' => '图卢兹',
 '吐瓦魯' => '图瓦卢',
 '原子筆' => '圆珠笔',
+'汕埠' => '圣佩德罗苏拉',
 '聖露西亞' => '圣卢西亚',
 '聖克里斯多福及尼維斯' => '圣基茨和尼维斯',
 '聖吉斯納域斯' => '圣基茨和尼维斯',
@@ -18204,6 +18232,7 @@ public static $zh2CN = [
 '艾菲爾' => '埃菲尔',
 '葉里溫' => '埃里温',
 '功能變數名稱' => '域名',
+'網域名稱' => '域名',
 '吉里巴斯' => '基里巴斯',
 '堂姊' => '堂姐',
 '坎培拉' => '堪培拉',
@@ -18783,6 +18812,7 @@ public static $zh2CN = [
 '數位技術' => '数字技术',
 '數位電視' => '数字电视',
 '數碼電視' => '数字电视',
+'數位音樂' => '数字音乐',
 '資料庫' => '数据库',
 '數著' => '数着',
 '數位照相機' => '数码照相机',
@@ -18964,10 +18994,10 @@ public static $zh2CN = [
 '梳著者' => '梳著者',
 '梳著述' => '梳著述',
 '梵谷' => '梵高',
-'機率' => '概率',
 '欠帳' => '欠账',
 '死帳' => '死账',
 '庇里牛斯' => '比利牛斯',
+'披索' => '比索',
 '畢卡索' => '毕加索',
 '茅利塔尼亞' => '毛里塔尼亚',
 '模里西斯' => '毛里求斯',
@@ -19406,6 +19436,8 @@ public static $zh2CN = [
 '葛摩' => '科摩罗',
 '象牙海岸' => '科特迪瓦',
 '積極份子' => '积极分子',
+'流動作業系統' => '移动操作系统',
+'行動作業系統' => '移动操作系统',
 '流動電話' => '移动电话',
 '行動電話' => '移动电话',
 '流動網絡' => '移动网络',
@@ -19609,6 +19641,8 @@ public static $zh2CN = [
 '螢光棒' => '荧光棒',
 '螢屏' => '荧屏',
 '霍爾斯坦' => '荷尔斯泰因',
+'荷里活廣場' => '荷里活广场',
+'荷里活道' => '荷里活道',
 '莫三比克' => '莫桑比克',
 '雷伊泰灣' => '莱特湾',
 '賴索托' => '莱索托',
index 90b3ca9..97474b6 100644 (file)
@@ -62,7 +62,7 @@
        "tog-watchlisthidepatrolled": "Versteek gepatrolleerde wysigings van dophoulys",
        "tog-ccmeonemails": "Stuur my 'n kopie van die e-pos wat ek aan ander stuur",
        "tog-diffonly": "Moenie 'n bladsy se inhoud onder die wysigingsverskil wys nie",
-       "tog-showhiddencats": "Wys versteekte kategorië",
+       "tog-showhiddencats": "Wys versteekte kategorieë",
        "tog-norollbackdiff": "Moenie verskille wys as teruggerol word nie",
        "tog-useeditwarning": "Waarsku my as ek 'n gewysigde bladsy verlaat voordat dit gestoor is",
        "tog-prefershttps": "Gebruik altyd 'n beveiligde verbinding terwyl aangemeld is",
        "subcategories": "Subkategorieë",
        "category-media-header": "Media in kategorie \"$1\"",
        "category-empty": "''Hierdie kategorie bevat geen bladsye of media nie.''",
-       "hidden-categories": "{{PLURAL:$1|Versteekte kategorie|Versteekte kategorië}}",
+       "hidden-categories": "{{PLURAL:$1|Versteekte kategorie|Versteekte kategorieë}}",
        "hidden-category-category": "Versteekte kategorieë",
        "category-subcat-count": "{{PLURAL:$2|Hierdie kategorie bevat slegs die volgende subkategorie.|Hierdie kategorie bevat die volgende {{PLURAL:$1|subkategorie|$1 subkategorië}}, uit 'n totaal van $2.}}",
        "category-subcat-count-limited": "Hierdie kategorie het die volgende {{PLURAL:$1|subkategorie|$1 subkategorië}}.",
        "templatesusedsection": "Die volgende {{PLURAL:$1|sjabloon|sjablone}} word in hierdie afdeling gebruik:",
        "template-protected": "(beskermd)",
        "template-semiprotected": "(half-beskerm)",
-       "hiddencategories": "Hierdie bladsy is 'n lid van {{PLURAL:$1|1 versteekte kategorie|$1 versteekte kategorië}}:",
+       "hiddencategories": "Hierdie bladsy is 'n lid van {{PLURAL:$1|1 versteekte kategorie|$1 versteekte kategorieë}}:",
        "edittools": "<!-- Die teks hier sal onderaan wysiging- en oplaaivorms vertoon word. -->",
        "nocreatetext": "{{SITENAME}} het die skep van nuwe bladsye beperk.\nU kan slegs bestaande bladsye wysig, of u kan [[Special:UserLogin|aanmeld of 'n gebruiker registreer]].",
        "nocreate-loggedin": "U het nie regte om nuwe blaaie te skep nie.",
index b2b0f63..5243964 100644 (file)
@@ -7,7 +7,16 @@
                        "Tokoabibi"
                ]
        },
-       "underline-never": "caaytu",
+       "tog-hidecategorization": "midimut kasabelih kakuniza",
+       "tog-numberheadings": "satangahan lunuk pabanggu",
+       "tog-watchlisthidecategorization": "midimut kasabelih kakuniza",
+       "tog-showhiddencats": "paazih madimutay a kakuniza",
+       "underline-always": "mahizatuay",
+       "underline-never": "amana kanca caay",
+       "editfont-style": "mikawaway-kalumyiti subal kataci nu silit a yangse:",
+       "editfont-default": "saazih sakaluk pataayaw tu kawaw a sulyang",
+       "editfont-monospace": "malecad ilaed a kataci nu silit",
+       "editfont-sansserif": "pacabay tu telay a kataci nu sulit",
        "sunday": "pilipayan",
        "monday": "sakacacay a demied nu lipay",
        "tuesday": "sakatusa a demied nu lipay",
        "subcategories": "sailuc-kasasizuma",
        "category-media-header": "kakuniza labuay \"$1\" a myiti",
        "hidden-categories": "{{PLURAL:$1|midimut kakuniza}}",
+       "hidden-category-category": "midimut kakuniza",
        "category-subcat-count": "{{PLURAL:$2|uyni kakuniza hatiza ku cacay yamalyilu sailuc-kakuniza. kina kakuniza yamalyilu isasa $2 a sailuc-kasasizuma, ilabu {{PLURAL:$1}}mahiza ku isasaay}}",
        "category-article-count": "{{PLURAL:$2|uyni kakuniza hatiza ku cacay yamalyilu sailuc-kakuniza. kina kakuniza yamalyilu isasa $2 a sailuc-kasasizuma, ilabu {{PLURAL:$1}}mahiza ku isasaay}}",
        "category-file-count": "{{PLURAL:$2|kakuniza yamalyilu isasaay a cacay ku tangan. kakuniza yamalyilu isasaay izaway $1 ku tangan, pulung $2 makalaan.}}",
        "listingcontinuesabbrev": "palalid",
        "about": "mahizaay",
+       "article": "lacul kasabelih",
        "newwindow": "(paynin baluhay a azih-sasingalan miwawah)",
        "cancel": "palawpes",
        "moredotdotdot": "yadah...",
        "anontalk": "sasukamu",
        "navigation": "pasubana’ tu miidangay",
        "and": "&#32;",
+       "faq": "sawsawniay a munday",
        "actions": "saungay",
        "namespaces": "pangangananay a salaedan",
        "variants": "masazumaay",
        "view": "ciwsace",
        "view-foreign": "i $1 miciwsace",
        "edit": "mikawaway-kalumyiti",
+       "edit-local": "itiniay buhci tu kamu nu mikawaway tu kalumyiti",
        "create": "patizeng",
        "create-local": "cunusen itiniay a buhci tu kamu",
        "delete": "misipu",
        "protect_change": "misumad",
+       "unprotect": "misumad tu midiputay",
        "newpage": "baluhayay a kasabelih",
        "talkpagelinktext": "sasukamu",
+       "specialpage": "sazumaay a kasabelih",
        "personaltools": "teked sakaluk",
        "talk": "matatengil",
        "views": "ciwsace",
        "toolbox": "sakaluk",
+       "imagepage": "ciwsace tangan a kasabelih",
+       "mediawikipage": "ciwsace palatuh kasabelih",
+       "templatepage": "ciwsace taazihan-mitudung kasabelih",
+       "viewhelppage": "ciwsace buhci tu kamu kasabelih",
+       "categorypage": "ciwsace kakuniza a kasabelih",
+       "viewtalkpage": "ciwsace matatengil kasabelih",
        "otherlanguages": "zumaay a kamu",
        "redirectedfrom": "(miliyawtu tazuma nay $1)",
-       "redirectpagesub": "miliyaw tazuma kasabelih",
-       "redirectto": "miliyaw tazuma tu:",
+       "redirectpagesub": "miliyaw patatuzu’",
+       "redirectto": "miliyaw patatuzu’ i:",
        "lastmodifiedat": "uyni kasabelih sazikuz mikawaway tu kalumyiti i $1 $2.",
+       "protectedpage": "madiputay a kasabelih",
        "jumpto": "taayaw:",
        "jumptonavigation": "pasubana’ tu miidangay",
        "jumptosearch": "kilim",
+       "pool-timeout": "imahini mihalhal milawpes pamutek",
+       "pool-queuefull": "laylay saculuk matumestu",
+       "pool-errorunknown": "caay kapulita ku mungangaw",
        "aboutsite": "mahizaay {{SITENAME}}",
        "aboutpage": "Project:mahizaay",
        "copyright": "anu izaw ku zuma buhci tu kamu, kasabelih aazihen a lacul i labu, pisaungay hamin $1 sapabeli tu kinli a ceding.",
        "portal-url": "Project:komiyonityi sacumudan",
        "privacy": "salimek a mikuwanay a kawaw",
        "privacypage": "Project:salimek a mikuwanay a kawaw",
+       "badaccess": "mungangaw ku tungus",
        "ok": "malucekay",
        "retrievedfrom": "miala i \"$1\"",
        "editsection": "mikawaway-kalumyiti",
        "viewsourceold": "ciwsace sakatizeng bangu",
        "editlink": "mikawaway-kalumyiti",
        "viewsourcelink": "ciwsace sakatizeng bangu",
-       "editsectionhint": "mikawaway tu kalumyiti tusil: $1",
+       "editsectionhint": "mikawaway-kalumyiti tusil: $1",
        "toc": "dilyikotoling",
        "showtoc": "paazih",
        "hidetoc": "midimut",
+       "collapsible-collapse": "piked",
        "collapsible-expand": "micuwat",
        "confirmable-yes": "hang",
        "confirmable-no": "caay",
        "site-atom-feed": "$1 a Atom saangangan",
        "page-atom-feed": "$1 a Atom saangangan",
        "red-link-title": "$1 (kasabelih nayai’ tu)",
+       "sort-descending": "nay tabakiay katukuh adidi  kasalaylay",
        "nstab-main": "kasabelih",
        "nstab-user": "misaungayay a kasabelih",
+       "nstab-media": "myiti kasabelih",
        "nstab-special": "sazumaay a kasabelih",
        "nstab-project": "cwanan kasabelih",
        "nstab-image": "tangan",
        "nstab-mediawiki": "palatuh",
        "nstab-template": "taazihan mitudung",
+       "nstab-help": "buhci tu kamu a kasabelih",
        "nstab-category": "kakuniza",
        "mainpage-nstab": "saayaway a belih",
        "error": "mungangaw",
+       "databaseerror": "sulu nu nasulitan  mungangaw",
        "databaseerror-query": "palalitemuh tu kawaw: $1",
        "databaseerror-function": "sakapaluwaluway: $1",
        "databaseerror-error": "mungangaw: $1",
+       "readonly": "pamutektu sulu nu nasulitan",
+       "internalerror": "ilabuay a mungangaw",
+       "internalerror_info": "ilabuay a mungangaw: $1",
        "badtitle": "a’cusay a pyawti",
        "badtitletext": "matuzu’ay a kasabelih pyawti u la’cusay、nayi’ ku cacan, caaysa tatenga’ay tu misiket kamu Wikiay a pyawti.\ntebanay pyawti akay amalyilu la’cusay pisaungay i pyawtayi a tatebanan nu nisulitan.",
        "viewsource": "ciwsace sakatizeng bangu",
+       "actionthrottled": "makelec saungay tuway",
        "exception-nologin": "caay henay patalabu",
+       "virus-unknownscanner": "caay kapulita tena’ tu milepi’ay:",
        "welcomeuser": "manamuh tu tayniay, $1!",
        "yourname": "misaungayay a kalungangan:",
        "userlogin-yourname": "misaungayay a kalungangan",
        "yourpassword": "mima:",
        "userlogin-yourpassword": "mima",
        "userlogin-yourpassword-ph": "suliten nu misuay a mima",
-       "createacct-yourpassword-ph": "pisulitan ku mima",
+       "createacct-yourpassword-ph": "pisuliten tu mima",
+       "yourpasswordagain": "pisuliten tu mima cacay aca:",
        "createacct-yourpasswordagain": "malucekay tu mima",
        "createacct-yourpasswordagain-ph": "pisulitan ku mima kinacacay aca",
        "userlogin-remembermypassword": "i balucu’en aku patalabu setyitase",
+       "userlogin-signwithsecure": "pisaungay zahkez misiket tu calay-zazan(wanglu)",
+       "cannotlogin-title": "la’cus patalabu",
+       "cannotlogin-text": "la’cus patalabu.",
+       "cannotloginnow-title": "la’cus patalabu ayza",
+       "cannotcreateaccount-title": "la’cusay panganganen ku canghaw",
+       "yourdomainname": "numisuay a calay-subal(wangyi):",
        "login": "patalabu",
        "nav-login-createaccount": "patalabu / panganganen ku canghaw",
        "logout": "katahkal",
        "createaccount": "panganganen ku canghaw",
        "userlogin-resetpassword-link": "maliyuh ku mima kisu haw?",
        "userlogin-helplink2": "patalabu miedap",
+       "userlogin-createanother": "patizeng tu zumaay canghaw",
+       "createacct-emailrequired": "imyiyo(email) puenengan",
        "createacct-emailoptional": "imyiyo(email) tigami (u pili’ay sasulitan)",
        "createacct-email-ph": "pisulitan ku imyiyo(email) nu misu",
+       "createacct-another-email-ph": "pisulitan imyiyo(email) puenengan",
        "createacct-reason": "mahicaay",
        "createacct-submit": "panganganen ku misuay a canghaw",
        "createacct-another-submit": "panganganen ku canghaw",
+       "createacct-continue-submit": "palalid patizeng tu canghaw",
        "createacct-benefit-heading": "{{SITENAME}} paanin tu nisulitan tu nu tapangay mahiza kisuan.",
-       "createacct-benefit-body1": "saka{{PLURAL:$1|ku mikawaway tu kalumyiti}}",
+       "createacct-benefit-body1": "saka{{PLURAL:$1|mikawaway-kalumyiti}}",
        "createacct-benefit-body2": "{{PLURAL:$1| kasabelih}}",
        "createacct-benefit-body3": "cay katenesay{{PLURAL:$1|paaninay tu kalusasing}}",
+       "loginerror": "patalabu mungangaw",
+       "createacct-error": "canghaw patizeng mungangaw",
        "loginsuccesstitle": "patalabutu",
+       "mailmypassword": "miliyaw miteka setin mima",
+       "accountcreated": "panganganen tu ku canghaw",
        "loginlanguagelabel": "kamu: $1",
        "pt-login": "patalabu",
        "pt-login-button": "patalabu",
+       "pt-login-continue-button": "palalid patalabu",
        "pt-createaccount": "panganganen ku canghaw",
        "pt-userlogout": "katahkal",
+       "changepassword": "misumad tu mima",
+       "resetpass_header": "misumad canghaw mima",
+       "oldpassword": "malumannay a mima",
+       "newpassword": "baluhay a mima:",
+       "retypenew": "miliyaw suliten baluhay a mima:",
+       "botpasswords": "kikay-tademaw a mima",
+       "botpasswords-existing": "naizawtu ku kikay-tademaw a mima",
+       "botpasswords-createnew": "patizeng baluhay kikay-tademaw a mima",
+       "botpasswords-label-appid": "kalungangan nu kikay-tademaw:",
        "botpasswords-label-create": "patizeng",
        "botpasswords-label-update": "misabaluhay",
        "botpasswords-label-cancel": "palawpes",
        "botpasswords-label-delete": "masipu",
+       "botpasswords-label-resetpassword": "miliyaw miteka setin mima",
+       "botpasswords-label-grants": "matatungusay a tungus:",
        "botpasswords-label-grants-column": "pabeli tu kinli",
+       "resetpass_forbidden": "la’cus misumad tu mima",
+       "resetpass_forbidden-reason": "la’cus misumad tu mima: $1",
+       "resetpass-submit-loggedin": "misumad tu mima",
        "resetpass-submit-cancel": "palawpes",
+       "resetpass-temp-password": "nanunuz a mima:",
        "passwordreset": "miliyaw miteka setin mima",
        "passwordreset-username": "misaungayay a kalungangan:",
+       "passwordreset-domain": "calay-subal(wangyi) kalungangan:",
+       "passwordreset-email": "imyiyo(email) puenengan:",
        "changeemail-none": "(nayi’)",
+       "changeemail-submit": "misumad imyiyo(email)",
+       "resettokens": "miliyaw patizeng sabuhat a mima",
        "resettokens-tokens": "sabuhat:",
+       "resettokens-resetbutton": "miliyaw patizeng mapili’ay a sabuhat-sacukcuk",
        "bold_sample": "kibetulay a sulit",
        "bold_tip": "kibetulay a sulit",
        "italic_sample": "tukenihay nisulit",
        "sig_tip": "misuay a sulit nu ngangan atu demiad, tuki",
        "hr_tip": "Sapisasuala (cayka yadah kawiza)",
        "summary": "pecu’ nu lacul:",
-       "subject": "taazihan tu kawaw:",
-       "minoredit": "payni mikilulay a mikawaway tu kalumyiti",
+       "subject": "satangahan:",
+       "minoredit": "payni mikilulay a mikawaway-kalumyiti",
        "watchthis": "miazih tuyni kasabelih",
        "savearticle": "misuped kasabelih",
+       "savechanges": "misuped tu sumad",
+       "publishpage": "patiyak kasabelih",
+       "publishchanges": "patiyak misumad",
        "preview": "pataayaway miazih",
        "showpreview": "paazih pataayaway miazih",
        "showdiff": "paazih ku masumaday",
        "anoneditwarning": "<strong>patalaw:</strong>caay henay kisu patalabu. anu miteka mikawaway tu kalumyiti, IP adolyise nu misu ama mitilak. anu kisu <strong>[$1  patalabu ]</strong> acasa <strong>[$2 panganganen ku canghaw ]</strong>, misuay mikawaway tu kalumyiti payni tu nu misuay misaungayay kalungangan sacuzu’ ,izaway zuma kapahayay.",
+       "subject-preview": "pataayaway miazih  taazihan tu kawaw:",
+       "blockednoreason": "caay pasaheci tu mahicaay",
+       "nosuchsectiontitle": "caykatepa tu tusil",
+       "loginreqtitle": "maydih patalabu",
        "loginreqlink": "patalabu",
+       "accmailtitle": "mima patigamitu",
        "newarticle": "(baluhay)",
        "newarticletext": "masasiket kisu tu nayi’ay tu kasabelih.\namipatizeng tina kasabelih, kaisasa mikawaway tu kalumyiti atilad misulit ku lacul (kahica nu kawaw piazih tu tatenga’ay [$1 misaungay a buhci tu kamu  kasabelih ]).\namahica caay padeteng tayza tina kasabelih kisu haw, pihaymaw sapecec saazihay a <strong>tatiku</strong> pipenecan.",
        "noarticletext": "kina kasabelih inayi’ lacul ayza,kapah tu kisu i zumaay a kasabelih [[Special:Search/{{PAGENAME}}| mikilim kina kasabelih pyawti ]]、<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  mikilim sasuala nasulitan nakawawan ] caay sa[{{fullurl:{{FULLPAGENAME}}|action=edit}} patizeng kina kasabelih ]</span>.",
        "noarticletext-nopermission": "tina kasabelih ayza inayi’ lacul,\nkapah tu kisu i zuma kasabelih [[Special:Search/{{PAGENAME}}| kilim kina kasabelih pyawti ]],acasa <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}}  kilim sasuala nasulitan nakawawan ]</span>,uyzasa  inayi’  ku tungus patizeng tina kasabelih.",
-       "updated": "(misabaluhay)",
+       "updated": "(misabaluh tuway)",
+       "continue-editing": "taayaw mikawaway-kalumyiti nikatatapal",
        "editing": "mikawaway tu kalumyiti  $1 ayza",
        "creating": "patizeng ayza $1",
        "editingsection": "mikawaway tu kalumyiti ayza $1 (tusil)",
+       "yourtext": "numisuay a sulit",
+       "storedversion": "misupedtu tu sumad",
        "yourdiff": "sasizuma",
        "templatesused": "uyni kasabelih pisaungay tu isasaay {{PLURAL:$1|taazihan mitudung}}:",
        "template-protected": "(madiputay)",
        "template-semiprotected": "(madiputay a kasabelih - satizep mikawaway tu kalumyiti)",
        "hiddencategories": "kina kasabelih tungusay nu {{PLURAL:$1|1 midimut kakuniza }}mamikawaw:",
+       "permissionserrors": "mungangaw ku tungus",
        "permissionserrorstext-withaction": "namakay isasaay {{PLURAL:$1|mahicaay}}, inayi’ kisu situngus miteka $2 miteka tuway misaungay:",
        "moveddeleted-notice": "kina kasabelih masipu tu.\nisasa nipabeli kina kasabelihay a masipu atu milimad nasulitan nakawawan, taneng miazih tu tatenga’ay.",
+       "log-fulllog": "ciwsace leku nasulitan-nazipa’an",
+       "edit-conflict": "mikawaway-kalumyiti sasula’cus",
+       "postedit-confirmation-created": "mapatizeng tu kasabelih.",
+       "postedit-confirmation-restored": "mapatiku tu kasabelih.",
+       "postedit-confirmation-saved": "masuped tu mikawaway-kalumyiti nu misu.",
+       "defaultmessagetext": "pataayaw tu kawaw palatuh  a sulit",
+       "invalid-content-data": "lacul kalunasulitan la’cus",
        "content-model-text": "sulit a dada’",
        "content-json-empty-object": "inayi’ay a tuutuud",
        "content-json-empty-array": "inayi’ay a papazengan tu nisulitan",
+       "template-loop-category": "sitatutungay masaliyut a kasabelih",
+       "undo-nochange": "tina mikawaway-kalumyiti mapatiku tuway.",
        "viewpagelogs": "ciwsace kina kasabelih a nasulitan nakawawan",
+       "currentrev": "sabaluhay masumad",
        "currentrev-asof": "i $1 a sabaluhay masumad",
        "revisionasof": "$1 a sumad",
        "revision-info": "i $1 tuyni a {{GENDER:$6|$2}} u nasumad nu nikawawan",
        "nextrevision": "kilulay masumad →",
        "currentrevisionlink": "sabaluhay masumad",
        "cur": "ayza",
-       "next": "nuzikuzan",
+       "next": "zikuzan a cacay",
        "last": "ayaway",
        "page_last": "sazikuzay a kasabelih",
+       "history-fieldset-title": "mikilim masumad nu ayaway",
        "histfirst": "sakasumamadan",
        "histlast": "sabaluhay",
        "historyempty": "(inayi’)",
+       "history-feed-title": "masumad nu ayaway a nazipa’an",
        "history-feed-item-nocomment": "$1 i $2",
+       "rev-delundel": "misumad ku maazihay",
        "rev-showdeleted": "paazih",
        "revdelete-show-file-submit": "hang",
+       "revdelete-legend": "misetin paazih a kelec",
+       "revdelete-hide-text": "masumad nu ayaway a sulit",
+       "revdelete-hide-image": "midimut lacul nu tangan",
+       "revdelete-hide-comment": "pecu’ nu lacul mikawaway-kalumyiti",
+       "revdelete-radio-same": "(amana misumad)",
        "revdelete-radio-set": "midimut",
        "revdelete-log": "mahicaay:",
+       "revdel-restore": "misumad ku maazihay",
+       "pagehist": "kasabelih nazipa’an",
+       "deletedhist": "masiputu tu nazipa’an",
+       "revdelete-reasonotherlist": "zuma a mahicaay",
+       "revdelete-edit-reasonlist": "masipu a mahicaay nu mikawaway-kalumyiti",
+       "revdelete-offender": "masumad nu ayaway  masacudaday:",
+       "mergehistory-from": "saangangan kasabelih:",
+       "mergehistory-into": "pabalucu’an kasabelih:",
+       "mergehistory-list": "kapah mikabuay a mikawaway-kalumyiti nazipa’an",
+       "mergehistory-fail-bad-timestamp": "tatukian a suyling la’cus.",
        "mergehistory-reason": "mahicaay:",
+       "mergelog": "mikabu tu nasulitan nazipa’an",
+       "revertmerge": "palawpes makabuay",
        "history-title": "\"$1\" masumaday a nazipa’an",
        "difference-title": "\"$1\" misumad laeday sasizuma",
        "lineno": "silsil $1:",
        "editundo": "patiku",
+       "diff-empty": "(inayi’ sasizuma)",
        "diff-multi-sameuser": "(malecaday misaungayay {{PLURAL:$1| ilaed izaw ku $1 a sumad}}inayi’ paazih)",
        "searchresults": "heci nu makatepa",
        "searchresults-title": "$1 heci nu makatepa",
+       "titlematches": "kasabelih satangah matatungus",
+       "textmatches": "kasabelih lacul matatungus",
        "prevn": "ayaw saka {{PLURAL:$1|$1}}",
-       "nextn": "zikuzan saka {{PLURAL:$1|$1}}",
+       "nextn": "zikuzan a cacay {{PLURAL:$1|$1}}",
        "prev-page": "ayaway a belih",
        "next-page": "zikuzan a belih",
        "nextn-title": "nuzikuzan saka {{PLURAL:$1|a heci}}",
        "viewprevnext": "ciwsace ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "<strong> uyni Wiki patizeng ku kasabelih  \"[[:$1]]\"!</strong>{{PLURAL:$2|0=| acasa miazih tu tatenga’ay patalabuay a matepa’ay a heci. |acasa miazih tu tatenga’ay zuma matepa’ay a heci.}}",
        "searchprofile-articles": "lacul kasabelih",
-       "searchprofile-images": "malocimyidiya",
+       "searchprofile-images": "kayadah-myiti",
        "searchprofile-everything": "hamin",
        "searchprofile-advanced": "tapabaw",
        "searchprofile-articles-tooltip": "i labu nu $1 mikilim",
        "search-result-size": "$1 ({{PLURAL:$2|$2 ku sulit}})",
        "search-redirect": "(miliyaw tazuma namakay $1)",
        "search-section": "(tusil $1)",
+       "search-category": "(kakuniza $1)",
        "search-suggest": "u tuzu’ nu misu ku:$1 haw?",
        "search-interwiki-more": "(yadah)",
+       "search-interwiki-more-results": "sayadahay a heci",
        "search-relatedarticle": "mahizaay",
        "searchall": "hamin",
        "search-showingresults": "{{PLURAL:$4|saka <strong>$1</strong> a heci, pulung <strong>$3</strong>|saka <strong>$1-$2</strong> a heci, pulung <strong>$3</strong>}}",
        "search-nonefound": "nayi’ matatungusay palalitemuh tu kawaw maheciay.",
+       "powersearch-legend": "tapabaw mikilim",
+       "powersearch-togglelabel": "pipili’i:",
        "powersearch-toggleall": "hamin",
        "powersearch-togglenone": "nayi’",
+       "search-external": "mikilim i hekal",
+       "preferences": "setin tu kanamuhan",
        "mypreferences": "setin tu kanamuhan",
+       "prefs-edits": "kinapina ku mikawaway-kalumyiti:",
        "prefs-skin": "nuhekalan",
        "skin-preview": "pataayaway miazih",
        "datedefault": "sulyang nu pataayaw tu kawaw",
+       "prefs-labs": "mitanam henay a sasahicaan",
        "prefs-rc": "capi a demaiday a sumad",
+       "prefs-watchlist": "miazihay a piazihan tu sulit",
+       "prefs-editwatchlist": "miazihay a piazihan tu sulit nu mikawaway-kalumyiti",
+       "prefs-editwatchlist-raw": "mikawaway-kalumyiti saayaway misisip a piazihan-tu-sulit",
        "prefs-misc": "zuma",
+       "prefs-resetpass": "misumad tu mima",
+       "prefs-setemail": "setin imyiyo(email) puenengan",
+       "prefs-email": "imyiyo(email) mapili’ay",
        "prefs-rendering": "nuhekalan",
        "saveprefs": "suped",
        "prefs-editing": "mikawaway-kalumyiti",
        "searchresultshead": "kilim",
        "stub-threshold-sample-link": "maaziahan",
        "stub-threshold-disabled": "mapasatezep",
+       "timezonelegend": "tatukian a kakitizaan:",
+       "localtime": "itiniay a tuki:",
+       "servertime": "sefuci-kikay a tuki:",
+       "guesstimezone": "pisaungay saazih sakaluk setin sulyang",
        "timezoneregion-africa": "Afilika",
        "timezoneregion-america": "Amilikaco",
        "timezoneregion-antarctica": "Nancico",
-       "timezoneregion-arctic": "Sasaamisan",
+       "timezoneregion-arctic": "Sasaamisan nu kitakit",
        "timezoneregion-asia": "Yaco",
        "timezoneregion-australia": "Awco",
-       "timezoneregion-europe": "Oco",
+       "timezoneregion-europe": "Ouco",
        "timezoneregion-indian": "Intuyang-bayu’",
        "timezoneregion-pacific": "Taypinyang-bayu’",
        "prefs-searchoptions": "kilim",
+       "prefs-namespaces": "pangangananay a salaedan",
        "default": "pataayaw tu kawaw",
        "prefs-custom-css": "pakuniza misanga’ CSS",
+       "prefs-registration": "pangangan a demiad:",
+       "yourrealname": "tatengaay a ngangan:",
        "yourlanguage": "kamu:",
+       "yourvariant": "lacul kamu masazumaay:",
+       "yournick": "baluhay sulitan a ngangan:",
+       "email": "imyiyo(email)",
+       "prefs-info": "anganganay a cesyun",
        "prefs-i18n": "masakitakiay",
        "prefs-signature": "sulitan a ngangan",
+       "prefs-dateformat": "demiad a kese",
        "prefs-timeoffset": "ilaed nu tuki",
+       "prefs-advancedediting": "habutuday a mapiliay",
        "prefs-editor": "mikawaway-kalumyitiay",
        "prefs-preview": "pataayaway miazih",
+       "prefs-advancedrc": "tapabaway a mapiliay",
+       "prefs-advancedsearchoptions": "tapabaway a mapiliay",
+       "prefs-displayrc": "paazih tu mapiliay",
        "prefs-tokenwatchlist": "sabuhat",
        "prefs-diffs": "sasizuma",
+       "userrights": "tungus nu misaungayay",
+       "userrights-lookup-user": "mipili’ misaungayay",
+       "userrights-groupsmember": "canan a luyaluy:",
        "userrights-reason": "mahicaay:",
+       "userrights-unchangeable-col": "amana kisu misumad tu luyaluy",
        "userrights-expiry-current": "kakatekuhan $1",
+       "userrights-expiry-none": "inayi’ kakatekuhan",
        "userrights-expiry": "kakatekuhan:",
+       "userrights-expiry-othertime": "zuma a tatukian:",
        "group": "luyaluy:",
        "group-user": "misaungayay",
        "group-bot": "kikay a tademaw",
        "group-sysop": "mikuwanay",
        "group-bureaucrat": "situngusay a mikawaway",
+       "group-suppress": "misisipay",
        "group-all": "(hamin)",
+       "group-autoconfirmed-member": "lunuk a malucekay tu misaungayay",
        "group-bot-member": "{{GENDER:$1|kikay a tademaw}}",
+       "group-bureaucrat-member": "{{GENDER:$1|situngusay-mikawaway}}",
        "grouppage-bot": "{{ns:project}}:kikay a tademaw",
        "grouppage-sysop": "{{ns:project}}:mikuwanay",
        "grouppage-bureaucrat": "{{ns:project}}:situngusay a mikawaway",
+       "right-read": "miasip kasabelih",
+       "right-edit": "kasabelih mikawaway-kalumyiti",
+       "right-createtalk": "patizeng matatengil  kasabelih",
+       "right-move": "milimad kasabelih",
+       "right-move-rootuserpages": "milimad tu limit misaungayay a kasabelih",
+       "right-move-categorypages": "milimad kakuniza a kasabelih",
+       "right-movefile": "milimad tu tangan",
+       "right-upload": "patapabaw tu tangan",
        "right-writeapi": "pisaungay suliten API",
+       "right-delete": "misipu tu kasabelih",
+       "right-browsearchive": "mikilim masipuay a kasabelih",
+       "right-undelete": "palawpes masipuay kasabelih",
+       "right-unblockself": "mihulak tu ku langat nu maku",
+       "right-noratelimit": "caypakasatezep nu saungayungayan",
+       "right-mergehistory": "mikabu kasabelih nazipa’an",
+       "grant-generic": "\"$1\" tungus pulung han",
+       "grant-group-page-interaction": "kasasukamu tu kasabelih",
+       "grant-group-file-interaction": "kasasukamu tu myiti",
+       "grant-group-email": "pabahel imyiyo(email)",
+       "grant-group-high-volume": "mileku sayadah a saungay nu binawlan",
+       "grant-group-administration": "mileku tu mikuwanay a kawaw",
+       "grant-group-other": "zuma saungay nu binawlan",
        "grant-createaccount": "panganganen ku canghaw",
+       "grant-editmywatchlist": "mikawaway-kalumyiti numisu misisip a piazihan-tu-sulit",
+       "grant-editprotected": "mikawaway-kalumyiti madiputay a kasabelih",
+       "grant-highvolume": "masibek mikawaway-kalumyiti",
+       "grant-privateinfo": "misuped-miala madimut kasikazan a cesyun",
+       "grant-uploadfile": "patapabaw ku baluhay a tangan",
+       "grant-basic": "anganganay a tungus",
        "newuserlogpage": "patizeng misaungayay nasulitan nakawawan",
-       "action-edit": "mikawaway tu kalumyiti uyni kasabelih",
+       "action-read": "miasip tina kasabelih",
+       "action-edit": "mikawaway-kalumyiti uyni a kasabelih",
+       "action-createpage": "patizeng tina kasabelih",
+       "action-createtalk": "patizeng tuyni katatengilan kasabelih",
+       "action-createaccount": "patizeng tina misaungayay canghaw",
+       "action-minoredit": "sacuzu’ tina mikawaway-kalumyiti ku mikilulay",
+       "action-move-rootuserpages": "milimad tu limit misaungayay a kasabelih",
+       "action-move-categorypages": "milimad kakuniza a kasabelih",
+       "action-movefile": "milimad tina tangan",
+       "action-upload": "patapabaw tina tangan",
+       "action-reupload": "mitahpu imahiniay a tangan",
+       "action-delete": "misipu tina kasabelih",
+       "action-deleterevision": "misipu tu masumaday nu ayaway",
+       "action-deletelogentry": "masipu nasulitan nazipa’an  kasacacay",
+       "action-browsearchive": "mikilim masipuay a kasabelih",
+       "action-mergehistory": "mikabu tina belih a nazipa’an",
+       "action-sendemail": "pabahel imyiyo(email)",
+       "action-editmywatchlist": "mikawaway-kalumyiti numisu misisip a piazihan-tu-sulit",
+       "action-editmyprivateinfo": "mikawaway-kalumyiti numisuay a cesyun",
+       "action-deletechangetags": "nay sulu nu nasulitan masipu aazihen a paya",
+       "action-purge": "misipu tina kasabelih",
+       "nchanges": "$1 {{PLURAL:$1|misumad}}",
        "enhancedrc-history": "nazipa’an",
        "recentchanges": "capi a demaiday a sumad",
        "recentchanges-legend": "capi a demiad masumaday a mapiliay",
        "recentchanges-legend-heading": "<strong>u tinaku nu kulit:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (piazih tu tatenga’ay [[Special:NewPages| baluhayay a kasabelih]])",
        "recentchanges-submit": "paazih",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|tuki}}",
+       "rcfilters-quickfilters": "suped sebseb sakaluk",
+       "rcfilters-savedqueries-defaultlabel": "suped sebseb sakaluk",
+       "rcfilters-savedqueries-rename": "miliyaw miteka pangangan",
+       "rcfilters-savedqueries-setdefault": "paceken pataayaw tu kawaw",
        "rcfilters-savedqueries-new-name-label": "kalungangan",
        "rcfilters-savedqueries-cancel-label": "palawpes",
-       "rcfilters-filterlist-title": "kilim",
+       "rcfilters-restore-default-filters": "patiku pataayaw tu kawaw mipili’ay sakacucek",
+       "rcfilters-filterlist-title": "sakacucek nu misapili’",
+       "rcfilters-highlightbutton-title": "pulita sacuzu’ a heci",
+       "rcfilters-highlightmenu-title": "mipili’ tu kilit",
+       "rcfilters-filterlist-noresults": "caykatepa sakacucek nu misapili’",
+       "rcfilters-filtergroup-authorship": "paaninay a masacudaday",
+       "rcfilters-filter-editsbyself-label": "numisuay a mikawaway-kalumyiti",
+       "rcfilters-filter-editsbyself-description": "numisuay a paanin",
+       "rcfilters-filter-editsbyother-label": "zumaay tatemaw a sumad",
+       "rcfilters-filter-user-experience-level-registered-label": "pangangan tuway",
+       "rcfilters-filter-user-experience-level-registered-description": "natalabuay nu mikawaway-kalumyiti.",
+       "rcfilters-filter-user-experience-level-unregistered-label": "caay henay pangangan",
        "rcfilters-filter-user-experience-level-newcomer-label": "baluhayay a misaungayay",
        "rcfilters-filter-user-experience-level-learner-label": "mahananamay",
+       "rcfilters-filtergroup-automated": "palunukay a paanin",
        "rcfilters-filter-bots-label": "kikay a tademaw",
+       "rcfilters-filtergroup-reviewstatus": "ciwsya setyitase",
        "rcfilters-filter-patrolled-label": "tayza mikibi tuway",
+       "rcfilters-filter-unpatrolled-label": "caay henay tayza mikibi",
+       "rcfilters-filtergroup-significance": "kakilulen",
        "rcfilters-filter-minor-label": "cayka yadah ku misumad",
+       "rcfilters-filter-major-label": "caay mikilulay mikawaway-kalumyiti",
+       "rcfilters-filter-watchlist-watched-label": "miazih piazihan tu sulit",
+       "rcfilters-filter-watchlist-watchednew-label": "nasumadan nu baluhayay misisip a piazihan-tu-sulit",
+       "rcfilters-filtergroup-changetype": "misumad nikalahizaan",
+       "rcfilters-filter-pageedits-label": "mikawaway-kalumyiti nu kasabelih",
+       "rcfilters-filter-newpages-label": "patizeng kasabelih",
+       "rcfilters-filter-categorization-label": "kakuniza misumad",
+       "rcfilters-filter-logactions-label": "saungay a nasulitan nazipa’an",
+       "rcfilters-filtergroup-lastRevision": "sabaluhay masumad",
        "rclistfrom": "paazih nay $3 $2 baluhayay a sumad katukuh ayza",
-       "rcshowhideminor": "$1 mikilulay mikawaway tu kalumyiti",
+       "rcshowhideminor": "$1 mikilulay mikawaway-kalumyiti",
        "rcshowhideminor-show": "paazih",
-       "rcshowhideminor-hide": "Hide",
-       "rcshowhidebots": "$1 kikay a tademaw",
+       "rcshowhideminor-hide": "midimut",
+       "rcshowhidebots": "$1 kikay-tademaw",
        "rcshowhidebots-show": "paazih",
        "rcshowhidebots-hide": "midimut",
        "rcshowhideliu": "$1 mapangangan tuway a misaungayay",
        "rcshowhideanons": "$1 paceba panganganay a misaungayay",
        "rcshowhideanons-show": "paazih",
        "rcshowhideanons-hide": "midimut",
+       "rcshowhidepatr": "$1 tayza mikibi mikawaway-kalumyiti",
        "rcshowhidepatr-show": "paazih",
        "rcshowhidepatr-hide": "midimut",
        "rcshowhidemine": "$1 mikawaway tu kalumyiti nu maku",
        "rcshowhidemine-show": "paazih",
        "rcshowhidemine-hide": "midimut",
+       "rcshowhidecategorization": "$1 kasabelih nu kakuniza",
        "rcshowhidecategorization-show": "paazih",
        "rcshowhidecategorization-hide": "midimut",
        "rclinks": "paazih capi a demiad $2 a demiaday a saka $1 a sumad.",
        "minoreditletter": "adidi’",
        "newpageletter": "baluhay",
        "boteditletter": "kikay a tademaw",
+       "rc_categories_any": "amahicahica tu mipili’ay",
        "rc-change-size-new": "masumadtu sa u $1 {{PLURAL:$1|wyiyincu}}",
        "newsectionsummary": "/* $1 */ baluhay a tusil",
+       "rc-enhanced-expand": "paazih pulita kalunasulitan",
+       "rc-enhanced-hide": "midimut pulitaay a  kalunasulitan",
        "recentchangeslinked": "sasuala a sumad",
        "recentchangeslinked-feed": "sasuala a sumad",
        "recentchangeslinked-toolbox": "sasuala a sumad",
        "recentchangeslinked-to": "Show changes to pages linked to the given page instead\nmisumad ku paazih masasiket tayza matuzu’ay kasabelih a nisumad",
        "upload": "patapabaw ku tangan",
        "uploadnologin": "caay henay patalabu",
+       "uploaderror": "patapabaw mungangaw",
+       "uploadlogpage": "patapabaw nasulitan nazipa’an",
+       "filename": "kalungangan nu tangan",
        "filedesc": "pecu’ nu lacul",
        "fileuploadsummary": "pecu’ nu lacul:",
+       "filereuploadsummary": "tangan misaimed:",
+       "filestatus": "nisanga’an niza tu tungus a kawaw setyitase:",
        "filesource": "saangangan:",
+       "ignorewarnings": "sekipo sacahamin patalaw",
+       "unknown-error": "tahkal caay kapulita mungangaw.",
+       "uploadwarning": "patapabaw patalaw",
+       "savefile": "misuped tu tangan",
+       "uploaddisabled": "mapasatezep tu ku patapabaw",
+       "uploaddisabledtext": "patapabaw tangan mapasatezep tuway.",
+       "upload-source": "saangangan a tangan",
+       "upload-description": "tangan sapuelac",
+       "upload-options": "patapabaw mapiliay",
+       "watchthisupload": "miazih tina tangan",
+       "upload-file-error": "ilabuay a mungangaw",
        "upload-dialog-button-cancel": "palawpes",
        "upload-dialog-button-back": "tatiku",
-       "upload-dialog-button-done": "pahezek",
+       "upload-dialog-button-done": "malahecitu",
        "upload-dialog-button-save": "suped",
        "upload-dialog-button-upload": "patapabaw",
+       "upload-form-label-infoform-title": "pulitaay a kalunasulitan",
        "upload-form-label-infoform-name": "kalungangan",
-       "upload-form-label-infoform-description": "patahkal",
+       "upload-form-label-infoform-description": "sapuelac",
+       "upload-form-label-own-work": "uyni ku nalimaan nu maku",
        "upload-form-label-infoform-categories": "kakuniza",
        "upload-form-label-infoform-date": "demiad",
+       "uploadstash": "patapabaw ku sulu nu pisipetan",
+       "uploadstash-clear": "palamadac tu sulu nu tangan",
+       "uploadstash-errclear": "palamadac tu tangan masepay.",
+       "uploadstash-refresh": "misabaluhay tu tangan piazihan tu sulit",
+       "uploadstash-thumbnail": "ciwsace tu sukep tu zunga",
+       "invalid-chunk-offset": "la’cus atilad kakitizaan",
+       "img-auth-accessdenied": "kakaian misuped-miala",
+       "upload-curl-error28": "patapabaw mautang",
        "license": "sapabeli tu kinli a cedang",
        "license-header": "sapabeli tu kinli a cedang",
+       "nolicense": "caay henay mipili’",
+       "licenses-edit": "mikawaway-kalumyiti sapabeli tu kinli a cedang mapiliay",
+       "license-nopreview": "(amana pataayaway miazih)",
        "listfiles-delete": "misipu",
        "imgfile": "tangan",
-       "listfiles": "tangan-tangan misiket",
+       "listfiles": "piazihan tu sulit nu tangan",
        "listfiles_thumb": "sukep tu zunga",
        "listfiles_date": "demiad",
        "listfiles_name": "kalungangan",
        "listfiles_user": "misaungayay",
        "listfiles_size": "hacica-tabaki",
-       "listfiles_description": "patahkal",
+       "listfiles_description": "sapuelac",
        "listfiles_count": "baziyong",
+       "listfiles-latestversion": "ayzaay a baziyong",
        "listfiles-latestversion-yes": "hang",
-       "listfiles-latestversion-no": "caay",
+       "listfiles-latestversion-no": "nayi’",
        "file-anchor-link": "tangan",
        "filehist": "tangan nu nazipa’an",
        "filehist-help": "sapecec ku demiad/tuki sapiciwsace ku tuki nina demiad a tangan baziyong",
+       "filehist-deleteall": "haminan misipu",
+       "filehist-revert": "patiku",
        "filehist-current": "ayza",
        "filehist-datetime": "demiad/tuki",
        "filehist-thumb": "sukep tu zunga",
        "filehist-thumbtext": "nu $1 baziyongay a sukep tu zunga",
+       "filehist-nothumb": "inayi’ patapabaw",
        "filehist-user": "misaungayay",
        "filehist-dimensions": "ditek",
+       "filehist-filesize": "hacica-tabaki ku tangan",
        "filehist-comment": "pacunus sakacaay kapawan",
-       "imagelinks": "tangan sadama tu kawaw",
+       "imagelinks": "sakapaluwaluway nu tangan",
        "linkstoimage": "isasaay {{PLURAL:$1| kasabelih  misiket |saka $1 a kasabelih misiket}}katukuh tina tangan:",
        "nolinkstoimage": "nayi’ ku kasabelih masasiket katukuh tini a tangan.",
        "sharedupload-desc-here": "kina tangan nay $1 hakay satu pisaungay tu zuma a cwanan.\nisasaay paazih kuyniay a tangan i [$2 tangan patahkal kasabelih] a patahkalay a lacul.",
        "shared-repo-from": "nay $1",
+       "shared-repo": "kapulung mizakecay a sulu nu tangan",
        "upload-disallowed-here": "la’cus kisu mitahpu tuyni a tangan.",
+       "filerevert": "patiku $1",
+       "filerevert-legend": "patiku tu tangan",
        "filerevert-comment": "mahicaay:",
+       "filedelete": "misipu \"$1\"",
+       "filedelete-legend": "misipu tu tangan",
        "filedelete-comment": "mahicaay:",
        "filedelete-submit": "masipu",
+       "filedelete-reason-otherlist": "zuma a mahicaay",
+       "filedelete-edit-reasonlist": "masipu a mahicaay nu mikawaway-kalumyiti",
+       "filedelete-maintenance-title": "la’cus masipu tu tangan",
        "download": "patasasa'",
+       "unwatchedpages": "caayay kasisip a kasabelih",
+       "listredirects": "miliyaw patatuzu’ piazihan tu sulit",
+       "listduplicatedfiles": "misaliyaw tu tangan piazihan tu sulit",
+       "unusedtemplates": "caayay kasaungay a taazihan mitudung",
        "randompage": "kakibalucu’ ay a kasabelih",
+       "randomincategory": "kakibalucu’ kakuniza a kasabelih",
+       "randomincategory-legend": "kakibalucu’ kakuniza a kasabelih",
        "randomincategory-submit": "mileku",
+       "randomredirect": "kakibalucu’ miliyaw patatuzu’",
        "statistics": "sausi",
+       "statistics-header-pages": "kasabelih sausi",
+       "statistics-header-edits": "sausi mikawaway-kalumyiti",
+       "statistics-header-hooks": "zuma a sausi",
+       "statistics-articles": "lacul kasabelih",
+       "statistics-files": "mapatapabaw tu a tangan",
+       "statistics-edits-average": "paybelih malecalecad mikawaway-kalumyiti su",
+       "statistics-users-active": "saungay nu binawlan a misaungayay",
+       "pageswithprop-prop": "susin kalungangan:",
        "pageswithprop-submit": "mileku",
+       "brokenredirects": "malepi’ ay miliyaw patatuzu’",
        "brokenredirects-delete": "misipu",
+       "withoutinterwiki": "inayi’ ku kamu masasiket a kasabelih",
        "withoutinterwiki-legend": "saayaway a sulit",
        "withoutinterwiki-submit": "paazih",
        "nbytes": "$1 {{PLURAL:$1|wyiyincu}}",
        "ncategories": "{{PLURAL:$1|kakuniza}}",
+       "nlinks": "$1 {{PLURAL:$1|masasiket}}",
        "nmembers": "$1 {{PLURAL:$1|ku mamikawaw}}",
+       "nrevisions": "$1 {{PLURAL:$1|masumad nu ayaway}}",
+       "nimagelinks": "{{PLURAL:$1|kasabelih}}",
+       "lonelypages": "masipulu’ a kasabelih",
+       "uncategorizedpages": "cayhen kakunizaay a kasabelih",
+       "uncategorizedcategories": "cayhenay kakunizaay a kakuniza",
+       "uncategorizedimages": "cayhen kakunizaay a tangan",
+       "uncategorizedtemplates": "sapi kakuniza taazihan mitudung",
+       "unusedcategories": "caayay kasaungay a kakuniza",
+       "unusedimages": "caayay kasaungay a tangan",
+       "wantedcategories": "maydihay a kakuniza",
+       "wantedpages": "maydihay a kasabelih",
+       "wantedfiles": "maydihay a tangan",
+       "wantedtemplates": "maydihay a taazihan mitudung",
+       "mostlinkedcategories": "masasiket sayadahay a kakuniza",
+       "mostlinkedtemplates": "nipacaliwan kayadahay a kasabelih",
+       "mostimages": "masasiket kayadahay a tangan",
+       "prefixindex": "kilul tatangahan nu sulit palalitemuh tu kawaw kasabelih",
        "prefixindex-submit": "paazih",
+       "prefixindex-strip": "sekipo ayaw nu kamu i piazihan-tu-sulit",
+       "shortpages": "ma’ngadisay a kasabelih",
+       "longpages": "mangasiway a kasabelih",
+       "deadendpages": "inayi’ masasiket kasabelih",
+       "protectedpages": "madiputay a kasabelih",
+       "protectedpages-noredirect": "midimut miliyaw patatuzu’ kasabelih",
+       "protectedpages-timestamp": "demiad tatukian",
        "protectedpages-page": "kasabelih",
        "protectedpages-expiry": "kakatekuhan",
+       "protectedpages-performer": "midiput misaungayay",
+       "protectedpages-params": "midiput tu aazihen a sulyang",
        "protectedpages-reason": "mahicaay",
+       "protectedpages-submit": "paazih tu kasabelih",
+       "protectedpages-unknown-performer": "caay kapulita a misaungayay",
+       "protectedtitles": "madiputay a satangahan",
+       "protectedtitles-submit": "paazih tu satangahan",
+       "listusers": "misaungayay a piazihan tu sulit",
+       "listusers-desc": "pisaungay nay tabakiay katukuh adidi’ kasalaylay",
        "newpages": "baluhay kasabelih",
        "newpages-submit": "paazih",
+       "newpages-username": "misaungayay a kalungangan:",
+       "ancientpages": "samalumanay a kasabelih",
        "move": "milimad",
        "notargettitle": "inayi’ ku pabalucu’an",
+       "pager-newer-n": "{{PLURAL:$1|baluhay $1}}",
        "pager-older-n": "{{PLURAL:$1| kusa malumanay}}",
        "suppress": "malangat",
+       "apihelp": "buhci tu kamu nu API",
+       "apisandbox": "bunac haku nu API",
+       "apisandbox-fullscreen": "micuwat tu sapat",
+       "apisandbox-unfullscreen": "paazih  kasabelih",
+       "apisandbox-submit": "miawaw tu milunguc",
        "apisandbox-reset": "palawpis",
        "apisandbox-retry": "miliyaw mitaneng",
+       "apisandbox-helpurls": "buhci tu kamu masasiket",
        "apisandbox-examples": "tinaku",
+       "apisandbox-dynamic-parameters": "zuma aazihen a sulyang",
+       "apisandbox-dynamic-parameters-add-label": "micunus aazihen a sulyang:",
+       "apisandbox-dynamic-parameters-add-placeholder": "kalungangan nu aazihen a sulyang",
+       "apisandbox-deprecated-parameters": "mapasatezepay a aazihen a sulyang",
+       "apisandbox-fetch-token": "lunuk suliten mima-sacukcuk",
+       "apisandbox-submit-invalid-fields-title": "izaw tu ku langat la’cus",
        "apisandbox-results": "heci",
+       "apisandbox-request-selectformat-label": "paazih milunguc kalunasulitan u:",
+       "apisandbox-request-format-url-label": "URL palalitemuh tu kawaw sulisulitan",
+       "apisandbox-request-json-label": "milunguc JSON:",
+       "apisandbox-alert-field": "la’cus tina pisinga’an a sulyang.",
        "apisandbox-continue": "palalid",
        "apisandbox-continue-clear": "palawpis",
        "booksources": "nu cudad atu laculaculan",
        "booksources-search-legend": "mikilim ku cudad atu laculaculan",
        "booksources-search": "kilim",
+       "specialloguserlabel": "mileku-misaungayay:",
        "log": "nasulitan nakawawan",
        "logeventslist-submit": "paazih",
+       "all-logs-page": "sacahamin pabinawlan nasulitan nazipa’an",
        "checkbox-select": "mipili’: $1",
        "checkbox-all": "hamin",
        "checkbox-none": "nayi’",
+       "checkbox-invert": "kabelihan mipili’",
        "allpages": "hamin nu kasabelih",
        "nextpage": "zikuzan a belih ($1)",
        "prevpage": "ayaway a belih ($1)",
+       "allpagesfrom": "paazih kasabelih miteka i:",
+       "allpagesto": "paazih kasabelih pahezek i:",
        "allarticles": "hamin nu kasabelih",
        "allpagessubmit": "mileku",
+       "allpagesprefix": "kilul tu saayaw nu nakamuan palalitemuh tu kawaw kasabelih:",
+       "allpages-hide-redirects": "midimut miliyaw patatuzu’ kasabelih",
        "categories": "kakuniza",
        "categories-submit": "paazih",
+       "categoriesfrom": "paazih kakuniza miteka i:",
+       "linksearch": "ihekal masasiket mikilim",
+       "linksearch-pat": "mikilim aazihen a sulit:",
        "linksearch-ns": "pangangananay a salaedan:",
        "linksearch-ok": "kilim",
        "listusers-submit": "paazih",
+       "listusers-noresult": "caykatepa misaungayay.",
+       "listusers-blocked": "(malangat tuway)",
+       "activeusers-noresult": "caykatepa misaungayay.",
        "listgrouprights-group": "luyaluy",
+       "listgrouprights-rights": "kinli",
+       "listgrouprights-members": "(sakawaway piazihan tu sulit)",
+       "listgrouprights-addgroup-all": "micunus sacahamin a luyaluy",
+       "listgrouprights-removegroup-all": "misipu sacahamin luyaluy",
+       "listgrouprights-namespaceprotection-header": "pangangananay a salaedan mikelec",
        "listgrants": "pabeli tu kinli",
        "listgrants-rights": "kinli",
+       "trackingcategories": "mikilul nazikuzan kakuniza",
+       "trackingcategories-desc": "kakuniza milisimet a tatungus",
+       "trackingcategories-nodesc": "inayi’ ku silaheciay a sapuelac",
+       "trackingcategories-disabled": "mapasatezep kakuniza tuway",
+       "mailnologin": "inayi’ pabahel puenengan",
+       "usermaildisabled": "mapasatezep imyiyo(email)",
+       "emailusername": "misaungayay a kalungangan:",
        "emailusernamesubmit": "patayzaan",
-       "emailfrom": "nay:",
+       "emailfrom": "patigamiay:",
        "emailto": "katukuh:",
-       "emailsubject": "taazihan tu kawaw:",
+       "emailsubject": "satangahan:",
        "emailmessage": "palatuh:",
        "emailsend": "patigamitu",
        "watchlist": "miazihay a piazihan tu sulit",
        "mywatchlist": "miazihay a piazihan tu sulit",
        "watchnologin": "caay henay patalabu",
+       "addwatch": "cunusen tu miazihay a piazihan-tu-sulit",
+       "removewatch": "misipu nay misisip a piazihan-tu-sulit",
        "watch": "miazih",
+       "watchthispage": "miazih tuyni kasabelih",
+       "unwatch": "palawpes aazihan",
+       "unwatchthispage": "pahanhan miazih",
+       "notanarticle": "caay ku lacul nu kasabelih",
        "watchlist-hide": "midimut",
        "wlshowhideminor": "cayka yadah ku misumad",
        "wlshowhidebots": "kikay a tademaw",
+       "wlshowhideliu": "napangangan a misaungayay",
+       "wlshowhideanons": "paceba panganganay a misaungayay",
+       "wlshowhidepatr": "tayza mikibi mikawaway-kalumyiti",
+       "wlshowhidemine": "numakuay a mikawaway-kalumyiti",
+       "wlshowhidecategorization": "kasabelih nu kakuniza",
+       "watchlist-options": "misisipa piazihan-tu-sulit a syinsiang",
+       "unwatching": "palawpes aazihan...",
+       "enotif_anon_editor": "paceba panganganay a misaungayay $1",
+       "enotif_minoredit": "payni mikilulay a mikawaway-kalumyiti",
+       "deletepage": "misipu tu kasabelih",
        "confirm": "malucekaytu",
        "delete-confirm": "misipu \"$1\"",
        "historyaction-submit": "paazih",
+       "actioncomplete": "pahezek tu ku saungay",
+       "actionfailed": "saungay mungangaw",
        "dellogpage": "masipu ku nasulitan nakawawan",
+       "deletionlog": "masipu nasulitan nazipa’an",
+       "reverted": "patiku ayaway a baziyong",
        "deletecomment": "mahicaay:",
+       "deletereasonotherlist": "zuma a mahicaay",
+       "rollback": "panukasan mikawaway-kalumyiti",
        "rollbacklink": "panukasan",
        "rollbacklinkcount": "patiku {{PLURAL:$1|mikawaway tu kalumyiti}}",
+       "rollbackfailed": "patiku mungangaw",
+       "sessionfailure-title": "kasasiket mungangaw",
+       "changecontentmodel": "misumad lacul tatudungen misanga’",
+       "changecontentmodel-title-label": "kasabelih satangahan",
+       "changecontentmodel-model-label": "tatudungen misanga’ nu baluhay a lacul",
        "changecontentmodel-reason-label": "mahicaay:",
+       "changecontentmodel-emptymodels-title": "inayi’ ku silaheciay a lacul tatudungen-misanga",
        "protectlogpage": "midiput nasulitan nakawawan",
+       "protect-legend": "malucekay tu midiputay",
        "protectcomment": "mahicaay:",
        "protectexpiry": "kakatekuhan:",
+       "protect_expiry_invalid": "la’cusay a kakatekuhan",
+       "protect_expiry_old": "Expiration time is in the past.",
+       "protect-default": "mahasa sacahamin misaungayay",
+       "protect-level-sysop": "mahasa mikuwanay a cacay",
        "protect-summary-cascade": "patatusul",
        "protect-expiring": "kakatekuhan $1 (UTC)",
+       "protect-expiring-local": "kakatekuhan katukuh i $1",
        "protect-expiry-indefinite": "inayi’ u sungliw",
+       "protect-othertime": "zuma a tatukian:",
+       "protect-otherreason-op": "zuma a mahicaay",
+       "protect-edit-reasonlist": "midiput a mahicaay nu mikawaway-kalumyiti",
+       "restriction-type": "tungus:",
+       "restriction-level": "kelec kasaselal:",
+       "minimum-size": "makaadidi’ay a sausi",
+       "maximum-size": "sakatabakiay a sausi:",
+       "pagesize": "(wyiyincu)",
        "restriction-edit": "mikawaway-kalumyiti",
        "restriction-move": "milimad",
        "restriction-create": "patizeng",
        "restriction-upload": "patapabaw",
+       "restriction-level-sysop": "maenapay a diput",
+       "restriction-level-autoconfirmed": "lalusa-diput",
+       "restriction-level-all": "amahicahicaay a kasalelal",
+       "undelete-fieldset-title": "patiku misumad nu ayaway",
+       "undelete-nodiff": "inayi’ nasawniay a sumad.",
        "undeletebtn": "patiku",
+       "undeleteinvert": "kabelihan mipili’",
        "undeletecomment": "mahicaay:",
+       "undelete-search-title": "mikilim masipuay a kasabelih",
+       "undelete-search-prefix": "paazih kasabelih miteka nay:",
        "undelete-search-submit": "kilim",
+       "undelete-error": "palawpes masipu kasabelih  mungangaw",
        "undelete-show-file-submit": "hang",
        "namespace": "pangangananay a salaedan:",
        "invert": "kabelihan mipili’",
        "uctop": "(ayza)",
        "month": "sazikuzay demiad nabuladan:",
        "year": "sazikuzay demiad mihcaan:",
+       "sp-contributions-newbies-sub": "paanin nu baluhay a canghaw",
        "sp-contributions-blocklog": "milangat tu nasulitan nakawawan",
        "sp-contributions-uploads": "patapabaw",
        "sp-contributions-logs": "nasulitan nakawawan",
        "sp-contributions-talk": "sasukamu",
+       "sp-contributions-search": "mikilim tu paanin",
+       "sp-contributions-hideminor": "midimut mikilulay mikawaway-kalumyiti",
        "sp-contributions-submit": "kilim",
        "whatlinkshere": "masasiket katukuh uyniyay a kasabelih",
        "whatlinkshere-title": "masasiket tazumaay a \"$1\" kasabelih",
        "whatlinkshere-page": "Kasabelih:",
        "linkshere": "isasaay a kasabelih masasiket tazuma tu <strong>[[:$1]]</strong>:",
-       "isredirect": "miliyaw tazuma kasabelih",
-       "istemplate": "nicaliwan",
+       "isredirect": "miliyaw patatuzu’",
+       "istemplate": "palaculen tu kasabelih",
        "isimage": "tangan-tangan misiket",
        "whatlinkshere-prev": "saka {{PLURAL:$1|nuayaway}}",
        "whatlinkshere-next": "saka {{PLURAL:$1|nuzikuzan}}",
        "whatlinkshere-hidetrans": "$1 nicaliwan",
        "whatlinkshere-hidelinks": "$1 masasiket",
        "whatlinkshere-hideimages": "$1 tangan-tangan misiket",
-       "whatlinkshere-filters": "kilim",
+       "whatlinkshere-filters": "sakacucek nu misapili’",
        "whatlinkshere-submit": "mileku",
+       "block": "milangat misaungayay",
+       "blockip-legend": "milangat misaungayay",
        "ipbexpiry": "kakatekuhan:",
        "ipbreason": "mahicaay:",
+       "ipbsubmit": "milangat tina misaungayay",
+       "ipbother": "zuma a tatukian:",
+       "ipb-confirm": "malucekay tu langat",
+       "blockipsuccesssub": "milangat malahci",
+       "ipb-edit-dropdown": "malangat a mahicaay nu mikawaway-kalumyiti",
+       "ipb-unblock-addr": "mihulak tu langat $1",
        "ipb-blocklist-duration-left": "$1 pakawili",
+       "ipusubmit": "misipu tina langat",
+       "unblocked-range": "mahulak tu ku langat $1.",
+       "blocklist": "malangatay tu a misaungayay",
        "autoblocklist-submit": "kilim",
+       "ipblocklist": "malangatay tu a misaungayay",
+       "blocklist-userblocks": "midimut canghaw malangat",
+       "blocklist-tempblocks": "midimut nanunuz malangat",
+       "blocklist-timestamp": "demiad tatukian",
        "blocklist-target": "pabalucu’an",
        "blocklist-expiry": "kakatekuhan",
+       "blocklist-by": "milangat a mikuwanay",
+       "blocklist-params": "milangat tu aazihen a sulyang",
        "blocklist-reason": "mahicaay",
        "ipblocklist-submit": "kilim",
+       "ipblocklist-localblock": "milangat itiniay",
        "infiniteblock": "inayi’ u sungliw",
-       "blocklink": "malangat",
+       "expiringblock": "$1 $2 hatinitu",
+       "anononlyblock": "wiza dada’ paceba panganganay ku misaungayay",
+       "noautoblockblock": "mapasatezep lunuk  milangat",
+       "createaccountblock": "canghaw patizeng mapasatezep tuway",
+       "emailblock": "mapasatezep imyiyo(email)",
+       "blocklink": "milangat",
+       "unblocklink": "mihulak tu langat",
+       "change-blocklink": "misumad tu langat",
        "contribslink": "paanin",
+       "emaillink": "pabahel imyiyo(email)",
        "blocklogpage": "milangat tu nasulitan nakawawan",
+       "unblocklogentry": "mahulak malangat $1 tuway",
+       "block-log-flags-anononly": "wiza dada’ paceba panganganay ku misaungayay",
+       "block-log-flags-nocreate": "canghaw patizeng mapasatezep tuway",
+       "block-log-flags-noautoblock": "mapasatezep lunuk  milangat",
+       "block-log-flags-noemail": "mapasatezep imyiyo(email)",
+       "proxyblocker": "kutay sefuci-kikay milangat-kikay",
+       "lockdb": "pamutek tu sulu nu kalunasulitan",
+       "lockbtn": "pamutek tu sulu nu kalunasulitan",
+       "lockdbsuccesssub": "malahci pamutek sulu nu nasulitan tuway",
+       "unlockdbsuccesssub": "misipu pamutek tu sulu nu kalunasulitan tuway",
+       "databaselocked": "pamutek tuway ku sulu nu nasulitan.",
+       "databasenotlocked": "caay pamutek henay ku sulu nu nasulitan.",
+       "move-page": "milimad $1",
+       "move-page-legend": "milimad kasabelih",
+       "newtitle": "baluhay satangahan:",
+       "movepagebtn": "milimad kasabelih",
+       "pagemovedsub": "milimad malaheci tuway",
        "movelogpage": "milimad ku nasulitan nakawawan",
        "movereason": "mahicaay:",
+       "delete_and_move_confirm": "hang, masipu tina kasabelih",
+       "immobile-source-page": "tina belih la’cus milimad.",
+       "imageinvalidfilename": "papatuzu’an a tangan  kalungangan la’cus.",
+       "move-leave-redirect": "miliwan miliyaw patatuzu’ kasabelih",
        "export": "patahkal ku kasabelih",
+       "exportall": "patahkal sacahamin  kasabelih",
        "export-submit": "patahkal",
+       "export-download": "misuped sapatangan",
+       "export-templates": "yamalyilu taazihan mitudung",
+       "export-manual": "tiyung ku lima micunus kasabelih:",
+       "allmessages": "sisetyimo palatuh",
        "allmessagesname": "kalungangan",
+       "allmessagesdefault": "pataayaw tu kawaw palatuh  a sulit",
        "allmessages-filter-legend": "kilim",
+       "allmessages-filter": "kilul misumad zasatu mikilim:",
+       "allmessages-filter-unmodified": "caay henay misumad",
        "allmessages-filter-all": "hamin",
        "allmessages-filter-modified": "masumad tuway",
+       "allmessages-prefix": "ahizan saayaway a sulit mikilim:",
        "allmessages-language": "kamu:",
        "allmessages-filter-submit": "mileku",
        "allmessages-filter-translate": "mibelih",
        "thumbnail-more": "patabaki(micuwat)",
+       "filemissing": "tangan mahedaw",
+       "thumbnail_dest_directory": "la’cus patizeng papatuzu’an a dilyikotoling",
+       "thumbnail_image-type": "caypi damaenay a zunga nikalahizaan",
+       "thumbnail_image-missing": "tangan mahedaw: $1",
+       "import": "pacumuden kasabelih",
+       "import-interwiki-sourcewiki": "saangangan Wiki:",
+       "import-interwiki-sourcepage": "saangangan kasabelih:",
+       "import-interwiki-templates": "yamalyilu sacahamin  taazihan mitudung",
        "import-interwiki-submit": "pacumud",
+       "import-mapping-namespace": "pacumud i pangangananay a salaedan:",
+       "import-upload-filename": "kalungangan nu tangan:",
        "import-comment": "pacunus sakacaay kapawan:",
+       "import-revision-count": "$1 {{PLURAL:$1|masumad nu ayaway}}",
+       "importcantopen": "la’cusay miwawah pacumuday a tangan",
+       "importsuccess": "pahezek tuway pacumud!",
+       "importnofile": "caay henay papabaw pacumud tangan.",
+       "importlogpage": "pacumuden nasulitan nazipa’an",
        "tooltip-pt-userpage": "{{GENDER:|misaungayay nu misu}} kasabelih",
        "tooltip-pt-mytalk": "{{GENDER:|misuay }}sasukamu a kasabelih",
        "tooltip-pt-preferences": "{{GENDER:|misuay}} setin tu kanamuhan",
        "tooltip-pt-logout": "katahkal",
        "tooltip-pt-createaccount": "taneng kami pauuh kisuan panganganen tu cacay canghaw atu patalabu, anu caay ku tabakiay a pisaungay.",
        "tooltip-ca-talk": "matatengil tu mahizaay lacul nu kasabelih",
-       "tooltip-ca-edit": "mikawaway tu kalumyiti uyni kasabelih",
+       "tooltip-ca-edit": "mikawaway-kalumyiti uyni a kasabelih",
        "tooltip-ca-viewsource": "uyni kasabelih madiputay tuway.\nkapah kisu miciwsace tuyni kasabelih sakatizeng bangu",
        "tooltip-ca-history": "uyini kasabelih nasawniay a sumad",
+       "tooltip-ca-protect": "midiput tina kasabelih",
+       "tooltip-ca-unprotect": "misumad tuyniay a sadiput",
+       "tooltip-ca-delete": "misipu tina kasabelih",
        "tooltip-ca-move": "milimad tina kasabelih",
        "tooltip-ca-watch": "paynien kasabelih micunus misuay cyinse piazihan tu sulit",
        "tooltip-search": "kilim {{SITENAME}}",
        "tooltip-t-permalink": "uyni kasabelih masumaday saluimengay misiket",
        "tooltip-ca-nstab-main": "ciwsace kasabelihay a lacul",
        "tooltip-ca-nstab-user": "ciwsace misaungayay a kasabelih",
+       "tooltip-ca-nstab-media": "ciwsace myiti kasabelih",
        "tooltip-ca-nstab-special": "uyni kasabelih u sazumaay belih, cayka tineng mikawaway tu kalumyiti",
        "tooltip-ca-nstab-project": "ciwsace cwanan kasabelih",
        "tooltip-ca-nstab-image": "ciwsace tangan kasabelih",
+       "tooltip-ca-nstab-mediawiki": "ciwsace sisetyimo palatuh",
        "tooltip-ca-nstab-template": "ciwsace taazihan mitudung",
+       "tooltip-ca-nstab-help": "ciwsace buhci tu kamu kasabelih",
        "tooltip-ca-nstab-category": "ciwsace kakuniza a kasabelih",
+       "tooltip-minoredit": "silusi tina tu payni mikilulay a mikawaway-kalumyiti",
        "tooltip-save": "misuped misuay a pisumad",
+       "tooltip-publish": "patiyak tu sumad nu misu",
        "tooltip-preview": "kay iayaw nu pisuped miazih tu nu misuay nisumad.",
        "tooltip-diff": "paazih hica sa kisu labuay a nisumadan",
        "tooltip-watch": "paynien kasabelih micunus misuay cyinse piazihan tu sulit",
+       "tooltip-watchlistedit-normal-submit": "misipu satangahan",
+       "tooltip-watchlistedit-raw-submit": "misabaluhay misisip tu piazihan-tu-sulit",
+       "tooltip-upload": "miteka patapabaw",
        "tooltip-rollback": "sapecec \"patiku\" misiket, kapah patiku tayza nuayawanay a paanin tu nisulitan tina kasabelih mikawaway tu kalumyiti",
        "tooltip-undo": "\"patiku\" kapah tu patiku tuyni mikawaway tu kalumyiti payni pataayaway miazih muse miwawah mikawaway tu kalumyiti aazihan cudad, saka caay cayaw nu labu micunus mahicaay.",
+       "tooltip-preferences-save": "pisuped tu setin nu kanamuhan",
        "tooltip-summary": "kapisulitan apuyu’ay a pecu’ nu lacul",
        "others": "zuma",
+       "creditspage": "kasabelih kasakumi nu misayingaay",
+       "spamprotectiontitle": "misapili’ a cengse nu babakahen a sulit",
        "simpleantispam-label": "sapi tena’ babakahen a sulit kinsa.\nyu <strong>amana</strong> misulit kuyni pisinga’an!",
+       "pageinfo-title": "\"$1\" a cesyun",
+       "pageinfo-header-basic": "anganganay a cesyun",
+       "pageinfo-header-edits": "nazipa’an nu mikawaway-kalumyiti",
+       "pageinfo-header-restrictions": "kasabelih midiput",
+       "pageinfo-header-properties": "susin nu kasabelih",
+       "pageinfo-display-title": "paazih tu satangahan",
+       "pageinfo-article-id": "kasabelih ID",
+       "pageinfo-language": "kasabelih lacul a kamu",
        "pageinfo-language-change": "misumad",
+       "pageinfo-content-model": "kasabelih a lacul tatudungen misanga’",
        "pageinfo-content-model-change": "misumad",
+       "pageinfo-robot-policy": "nay kikay-tademaw patizeng kapah pikiliman tu nisulitan miasip",
        "pageinfo-robot-noindex": "amana",
+       "pageinfo-watchers": "kasabelih miazihay a nikayadah",
+       "pageinfo-subpages-name": "tina belih a sailuc-kasabelih nikayadah",
+       "pageinfo-firstuser": "kasabelih patizengay",
+       "pageinfo-firsttime": "patizeng demiad nu kasabelih",
+       "pageinfo-lastuser": "capiay a mikawaway-kalumyiti",
+       "pageinfo-lasttime": "capiay a demiad nu mikawaway-kalumyiti",
+       "pageinfo-edits": "pulung nikayadah nu mikawaway-kalumyiti",
+       "pageinfo-authors": "papina nu masacudaday",
+       "pageinfo-recent-authors": "capiay masacudaday a nikayadah",
        "pageinfo-toolboxlink": "kasabelih cesyun",
        "pageinfo-redirectsto-info": "katinengan",
+       "pageinfo-contentpage": "miasip papi lacul kasabelih",
        "pageinfo-contentpage-yes": "hang",
        "pageinfo-protect-cascading-yes": "hang",
+       "pageinfo-protect-cascading-from": "patatusul midiput namakay",
+       "pageinfo-category-info": "kakuniza a cesyun",
+       "pageinfo-category-total": "papina nu sakawaway",
+       "pageinfo-category-pages": "kasabelih nikayadah",
+       "pageinfo-category-subcats": "sailuc-kasasizuma nikayadah",
+       "pageinfo-category-files": "tangan nikayadah",
+       "pageinfo-user-id": "misaungayay ID",
+       "markaspatrolleddiff": "silusi natayza mikibi tuway",
+       "markedaspatrolled": "silusi natayza mikibi tuway",
+       "patrol-log-page": "tayza mikibi nasulitan nazipa’an",
+       "log-show-hide-patrol": "$1 tayza mikibi nasulitan nazipa’an",
+       "log-show-hide-tag": "$1 aazihen a paya nasulitan nazipa’an",
        "confirm-markpatrolled-button": "malucekay",
        "previousdiff": "← malumanay a mikawaway tu kalumyiti",
        "nextdiff": "baluhayay mikawaway tu kalumyit →",
+       "thumbsize": "sukep tu zunga hacica-tabaki:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|ku kasabelih}}",
        "file-info-size": "$1 × $2 syangsu, hacica ku tabaki nu tangan: $3, MIME kakuniza: $4",
        "file-info-size-pages": "$1 × $2 syangsu, hacica ku tabaki nu tangan:$3,MIME kakuniza: $4, $5 {{PLURAL:$5|ku kasabelih}}",
        "show-big-image-preview": "pataayaway miazih hacica ku tabaki: $1.",
        "show-big-image-size": "$1 × $2 syangsu",
        "file-info-gif-looped": "palalacalen",
-       "file-info-gif-frames": "$1 {{PLURAL:$1|misabacu}}",
-       "file-info-png-frames": "$1 {{PLURAL:$1|misabacu}}",
+       "file-info-gif-frames": "$1 {{PLURAL:$1|kulit sapat}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|kulit sapat}}",
+       "newimages": "baluhay tangan a sulu nu zunga",
        "newimages-legend": "kilim",
+       "noimages": "inayi’ amahicahica tu zunga.",
+       "gallery-slideshow-toggle": "ketun mibalic sukep tu zunga",
        "ilsubmit": "kilim",
        "bydate": "ahizan tu demiad",
+       "seconds": "$1 a {{PLURAL:$1|abeti}}",
+       "minutes": "{{PLURAL:$1|$1 widi}}",
+       "hours": "{{PLURAL:$1|$1 tuki}}",
+       "days": "$1 {{PLURAL:$1|a demiad}}",
+       "ago": "ayaw nu $1",
        "just-now": "nasawni",
+       "hours-ago": "ayaw $1 {{PLURAL:$1|a tuki}}",
+       "minutes-ago": "ayaw $1 {{PLURAL:$1|widi}}",
+       "seconds-ago": "ayaw $1 {{PLURAL:$1|a beti}}",
+       "monday-at": "sakacacay a demiad nu lipay i$1",
+       "tuesday-at": "sakatusa a demied nu lipay i $1",
+       "wednesday-at": "saka tulu i $1",
+       "thursday-at": "sakasepat i $1",
+       "friday-at": "sakalima a demied nu lipay i $1",
+       "saturday-at": "sakaenem a demiad nu lipay i $1",
+       "sunday-at": "pilipayan i $1",
+       "yesterday-at": "nacila i $1",
        "metadata": "pulita tu kalunasulitan",
        "metadata-help": "uyni tangan labuay amin yamalyilu zuma cesyun, uyni a cesyun akay nay suewyi  sasasing asaca sapisekyin i tapang asaca suwyihwa saayaw katukuh pahzekan a nakawawan mapacunusay. anu nay tangan saayaway setyitase masumadtu, hatizaay pulita kalunasulitan akay la’cus mileku mabetil a misumad tu tangan.",
+       "metadata-expand": "paazih pulita kalunasulitan",
+       "metadata-collapse": "midimut pulitaay a kalunasulitan",
        "metadata-fields": "i tini palatuh patahkal i labuay a EXIF pulita tu kalunasulitanay a kakitizaan, yamalyilu i zunga paazih kasabelih, sapipulita tu cudad nu nasulitan malepi’ paazih palatuh.\nzumaay a pulita tu cudad pataayaw tu kawaw midimut.\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-imagewidth": "ahebal",
-       "exif-imagelength": "u takalaw",
+       "exif-imagelength": "takalaw sulyang",
+       "exif-bitspersample": "paysyangsuay a wyiyin",
+       "exif-compression": "piepian mipecec a sasakawawen",
+       "exif-photometricinterpretation": "pacamel-palacul tu syangsu",
        "exif-orientation": "papayzaan",
+       "exif-samplesperpixel": "syangsu nikayadah",
+       "exif-planarconfiguration": "kalunasulitan misilsil",
        "exif-xresolution": "sasuala katingalaw",
        "exif-yresolution": "mitelekay katingalaw",
+       "exif-stripoffsets": "iga kalunasulitan kakitizaan",
+       "exif-rowsperstrip": "cacay ku kaus papina ku tusil",
+       "exif-whitepoint": "sangelacay hacica-kulit",
+       "exif-primarychromaticities": "sausi sulyang nu kulit",
+       "exif-referenceblackwhite": "umeniay-sangelacay miazih tu tatenga’ay nikayadah",
        "exif-datetime": "tangan misumaday a demiad atu tuki",
-       "exif-make": "sasasing misanga’ay tu kalutuud",
-       "exif-model": "sasasing silosi nu nisanga’an",
+       "exif-imagedescription": "satangahan nu iga",
+       "exif-make": "sasasing-kikay misanga’ tu kalutuuday",
+       "exif-model": "sasasing nu nisanga’an a banggu",
        "exif-software": "pisaungay zwanti",
        "exif-artist": "masacudaday",
+       "exif-copyright": "nizaay nisanga’an tu tungus a kawaw",
        "exif-exifversion": "Exif baziyong / sapad",
        "exif-colorspace": "kalukulit salaedan",
+       "exif-componentsconfiguration": "paysyangsu yamalyilu",
+       "exif-compressedbitsperpixel": "iga piepian mipecec a muse",
+       "exif-pixelxdimension": "zunga nu hacica-ahebal",
+       "exif-pixelydimension": "zunga nu hacica-takalaw",
+       "exif-usercomment": "misaungayay a buhci tu kamu",
        "exif-datetimeoriginal": "kalunasulitan masangaay’ a demiad atu tuki",
        "exif-datetimedigitized": "suwyihwaay a demiad atu tuki",
+       "exif-exposuretime": "mapaedil a lawad",
+       "exif-exposuretime-format": "$1 beti ($2)",
+       "exif-exposureprogram": "mapaedil a muse",
+       "exif-spectralsensitivity": "edil-selal saahemi’han",
+       "exif-isospeedratings": "ISO suli",
+       "exif-aperturevalue": "APEX edil",
+       "exif-brightnessvalue": "APEX likat",
+       "exif-maxaperturevalue": "satabakiay a likat-mulu i lala’ nu kitakit",
+       "exif-subjectdistance": "ilaed nu satangahan",
+       "exif-meteringmode": "miditek tu edil a muse",
        "exif-lightsource": "katahkalan nu likat",
        "exif-flash": "sabelabelatay a tinghuy",
        "exif-focallength": "saed nu sapisasing",
+       "exif-subjectarea": "sausi a kakitizaan",
+       "exif-flashenergy": "sabelabelatay a tinghuy u icelang",
+       "exif-focalplaneresolutionunit": "edil-sanat a sapat katingalaw  tatebanan nu nisulitan",
+       "exif-subjectlocation": "kakitizaan nu satangahan",
+       "exif-exposureindex": "mapaedil a sulyang",
+       "exif-sensingmethod": "mise nu nikasumad nay edil",
+       "exif-filesource": "saangangan nu tangan",
+       "exif-scenetype": "makaazihay nikalahizaan",
+       "exif-customrendered": "pakuniza misanga’ iga",
+       "exif-whitebalance": "sapalalen nu salengacay",
+       "exif-scenecapturetype": "makaazihay masasing nikalahizaan",
+       "exif-gaincontrol": "makaazihay misimaw",
        "exif-contrast": "e-contrast",
+       "exif-saturation": "matumesay a sulyang",
+       "exif-sharpness": "kacidem",
+       "exif-devicesettingdescription": "sakaluk setin sapuelac",
+       "exif-subjectdistancerange": "baat nu tatizengan a liwliw",
+       "exif-gpsversionid": "GPS baziyong nu aazihen a paya",
+       "exif-gpslatituderef": "pyiwyi asaca nanwyi",
+       "exif-gpslongituderef": "tongcing asaca sicing",
+       "exif-gpsaltituderef": "nutakalaw namakay bayu’ miazih tu tatenga’ay a sulyang",
+       "exif-gpssatellites": "sapiditekay a zizuisi",
+       "exif-gpsstatus": "pizawis sakaluk setyitase",
+       "exif-gpsmeasuremode": "miditek a muse",
+       "exif-gpsdop": "miditek a tatungus",
+       "exif-gpsspeedref": "saduba’ kalamkam a sacacaycacay",
+       "exif-gpsmapdatum": "pisaungay ulaulangan miditek a kalunasulitan",
+       "exif-gpsdestlatitude": "pabalucu’an a wyitu",
+       "exif-gpsdestlongituderef": "pabalucu’an a cintu",
+       "exif-gpsdatestamp": "GPS a demiad",
+       "exif-gpsdifferential": "GPS chafen misumad",
        "exif-keywords": "aazihen dulit",
+       "exif-worldregioncreated": "zunga masasing a kakitizaan",
+       "exif-countrycreated": "zunga masasingan a kanatal",
+       "exif-provinceorstatecreated": "yakuwanan a sasing",
+       "exif-citycreated": "yatukay a sasing",
+       "exif-worldregiondest": "paazih tu subal nu kitakit",
+       "exif-countrydest": "paazih tu kanatal",
+       "exif-countrycodedest": "paazih kanatal a kodo",
+       "exif-provinceorstatedest": "paazih seng asaca cou",
+       "exif-citydest": "paazihay a tukay",
+       "exif-sublocationdest": "paazih tukay pulita kahicelaan",
        "exif-objectname": "sapuyuay a ngangan",
+       "exif-specialinstructions": "sazumaay buhci tu kamu",
        "exif-headline": "satangahan",
+       "exif-credit": "misanga’/nipabeli’ay",
        "exif-source": "saangangan",
+       "exif-editstatus": "zunga setyitase nu binawlan sapuelac",
+       "exif-urgency": "hacica ku kalah",
+       "exif-locationdest": "patahkal kahicelaan",
+       "exif-locationdestcode": "kakitizaan kodo sapuelac",
+       "exif-objectcycle": "myiti saungay a takukian",
+       "exif-contact": "patakusan a cesyun",
        "exif-writer": "misacudaday",
        "exif-languagecode": "kamu",
+       "exif-iimversion": "IIM baziyong",
        "exif-iimcategory": "kakuniza",
+       "exif-iimsupplementalcategory": "micunus kakuniza",
+       "exif-datetimereleased": "patiyak i",
+       "exif-originaltransmissionref": "saayaway miculu’ kakitizaan a kodo",
        "exif-identifier": "mapulitaay a kodo",
+       "exif-lens": "pisaungay tu cingtou",
+       "exif-serialnumber": "sasasing salaylay a banggu",
+       "exif-cameraownername": "sasasing nizaay",
        "exif-label": "aazihen paya",
+       "exif-nickname": "caykaw tatengaay a zunga kalungangan",
+       "exif-rightscertificate": "nisanga’an niza tu tungus a kawaw nu makuwanay a pincen",
+       "exif-copyrighted": "nisanga’an niza tu tungus a kawaw setyitase",
+       "exif-copyrightowner": "nizaay nisanga’an tu tungus a kawaw",
+       "exif-usageterms": "mamaala a cedang",
+       "exif-webstatement": "nabalucu'an nu i telay nisanga’an niza tu tungus a kawaw",
+       "exif-licenseurl": "nisanga’an niza tu tungus a kawaw pabeli tu kinli  masasiket",
+       "exif-morepermissionsurl": "paliyuh pabeli tu kinli a cesyun",
+       "exif-pngfilecomment": "PNG tangan pacunus sakacaay kapawan",
+       "exif-disclaimer": "caay pimuku tu sikining",
+       "exif-contentwarning": "lacul mipatalaw",
+       "exif-giffilecomment": "GIF tangan pacunus sakacaay kapawan",
+       "exif-intellectualgenre": "kasacacay nikalahizaan",
+       "exif-subjectnewscode": "kodo nu satangahan",
+       "exif-event": "sapuelac tu sikikawaw",
+       "exif-organisationinimage": "sapuelac nu mikumi",
+       "exif-personinimage": "sapuelac tu tademaw",
+       "exif-originalimageheight": "takalaway nu caayhen masait",
+       "exif-originalimagewidth": "misait tu nuayawan a ahebal",
+       "exif-compression-1": "caay henay piepian mipecec",
+       "exif-copyrighted-true": "madiput nu nisanga’an niza tu tungus a kawaw",
+       "exif-copyrighted-false": "caay kapulita nu nisanga’an niza tu tungus a kawaw setyitase",
+       "exif-unknowndate": "caay kapulita ku demiad",
        "exif-orientation-1": "tatungus",
+       "exif-orientation-2": "mabelih tu zazay",
+       "exif-orientation-4": "mabelih tu mitelekay",
+       "exif-planarconfiguration-1": "pu’nel-kizemu a kese",
+       "exif-planarconfiguration-2": "kimpi’ a kese",
+       "exif-colorspace-65535": "caay henay masitudung ku kulit",
        "exif-componentsconfiguration-0": "inayi’",
        "exif-exposureprogram-0": "caay henay misaheci",
        "exif-exposureprogram-1": "palima",
+       "exif-exposureprogram-2": "tatungus a muse",
+       "exif-exposureprogram-3": "likat maluayaw",
+       "exif-exposureprogram-4": "kiyata maluayaw",
+       "exif-subjectdistance-value": "$1 mi",
+       "exif-meteringmode-2": "pikuwanan pacunus lalet",
+       "exif-meteringmode-3": "baniyut-ditek",
+       "exif-meteringmode-4": "kayadah- baniyut-ditek",
+       "exif-meteringmode-5": "muse",
+       "exif-meteringmode-6": "liyad",
        "exif-meteringmode-255": "zuma",
-       "exif-lightsource-1": "edil",
+       "exif-lightsource-1": "likat",
        "exif-lightsource-2": "inkwang a tinghuy",
        "exif-lightsource-4": "sabelabelatay a tinghuy",
        "exif-lightsource-9": "cilalah a demiad",
        "exif-lightsource-10": "kenutan",
+       "exif-lightsource-11": "iduutay",
+       "exif-lightsource-17": "tatungus likat nu dingki A",
+       "exif-lightsource-18": "tatungus likat nu dingki B",
+       "exif-lightsource-19": "tatungus likat nu dingki C",
+       "exif-lightsource-255": "zuma katahkalan nu likat",
+       "exif-flash-fired-0": "sabelabelatay a tinghui caay henay miwawah",
+       "exif-flash-fired-1": "sabelabelatay a tinghui miwawah tuway",
+       "exif-flash-mode-1": "pacici sabelabelatay tinghuy mawawah",
+       "exif-flash-mode-2": "pacici sabelabelatay tinghuy mapaneng",
+       "exif-flash-mode-3": "lunuk muse",
+       "exif-flash-function-1": "inayi’ sasahicaan nu sabelabelatay a tinghui",
+       "exif-flash-redeye-1": "muse nu kasatezep tu sumanahay a mata",
        "exif-focalplaneresolutionunit-2": "incun",
+       "exif-sensingmethod-1": "caay henay misaheci",
+       "exif-sensingmethod-7": "tululait askance-kikay",
+       "exif-filesource-3": "sulyangay a sasasing",
+       "exif-scenetype-1": "besuc han misasingay a zunga",
+       "exif-customrendered-0": "habutuday a laylay",
+       "exif-customrendered-1": "pakuniza misanga’ay a laylay",
+       "exif-exposuremode-0": "lunuk mapaedil",
+       "exif-exposuremode-1": "lima-saungay mapaedil",
+       "exif-exposuremode-2": "lunuk laup mapacedil",
+       "exif-whitebalance-0": "lunuk sapalalen nu salengacay",
+       "exif-whitebalance-1": "lima-saungay sapalalen nu salengacay",
        "exif-scenecapturetype-0": "tatungus",
        "exif-scenecapturetype-1": "makaazihay",
        "exif-scenecapturetype-2": "sassing nu tademaw",
        "exif-contrast-1": "pu’nel",
        "exif-contrast-2": "takalaw",
        "exif-saturation-0": "tatungus",
+       "exif-saturation-1": "caykatumesay a kulit",
+       "exif-saturation-2": "takalaw atu matumes ku kulit",
        "exif-sharpness-0": "tatungus",
        "exif-sharpness-1": "pu’nel",
        "exif-sharpness-2": "takalaw",
+       "exif-subjectdistancerange-1": "ciyuci",
        "exif-subjectdistancerange-2": "pakatepalay a azih",
        "exif-subjectdistancerange-3": "pakabatatay a azih",
        "exif-gpslatitude-n": "pyiwyi",
        "exif-gpslatitude-s": "nanwyi",
        "exif-gpslongitude-e": "tongcing",
        "exif-gpslongitude-w": "sicing",
+       "exif-gpsstatus-a": "miditek miteka henay ayza",
+       "exif-gpsstatus-v": "miditek masasiketay a sausi",
+       "exif-gpsmeasuremode-2": "tusa-wei miditek",
+       "exif-gpsmeasuremode-3": "tulu-wei miditek",
+       "exif-gpsspeed-k": "paytuki a kungli",
+       "exif-gpsspeed-m": "paytuki a inli",
        "exif-gpsdestdistance-k": "kungli",
        "exif-gpsdestdistance-m": "inli",
        "exif-gpsdestdistance-n": "hayli",
+       "exif-gpsdop-excellent": "tada kapah ($1)",
+       "exif-gpsdop-poor": "la’cus ($1)",
        "exif-objectcycle-a": "namalamam a cacay",
        "exif-objectcycle-p": "nakalahukan a cacay",
+       "exif-objectcycle-b": "namalanam atu namalahuk",
+       "exif-gpsdirection-t": "tatengaay tatuzu’an",
+       "exif-gpsdirection-m": "tatuzu'an nu tyice",
+       "exif-ycbcrpositioning-1": "teban",
+       "exif-ycbcrpositioning-2": "palecad miala tu maaziahan",
        "exif-dc-contributor": "paaninay tu kalusasing",
        "exif-dc-date": "demiad",
+       "exif-dc-publisher": "insacay",
+       "exif-dc-relation": "mahizaay u myiti",
        "exif-dc-rights": "kinli",
+       "exif-dc-source": "saangangan a myiti",
+       "exif-dc-type": "myiti nikalahizaan",
+       "exif-rating-rejected": "kakaian",
+       "exif-isospeedratings-overflow": "satabakien tu 65535",
+       "exif-iimcategory-clj": "mungangaw atu hulic",
+       "exif-iimcategory-fin": "kyizay atu syubay",
        "exif-iimcategory-edu": "pasubana’ay a kawaw",
        "exif-iimcategory-evn": "liwliw",
        "exif-iimcategory-hth": "kapah ku uzip",
+       "exif-iimcategory-hum": "u zazan nu tademaw",
        "exif-iimcategory-lab": "makawaw",
+       "exif-iimcategory-lif": "nikauzip atu pahanhanan",
+       "exif-iimcategory-pol": "cengcey",
+       "exif-iimcategory-rel": "papazaan atu papayzaan",
+       "exif-iimcategory-sci": "kagak atu keci",
+       "exif-iimcategory-soi": "binawlan a munday",
        "exif-iimcategory-spo": "wundukay",
+       "exif-iimcategory-war": "ngayaw, sasula’cus atu sasibud",
        "exif-iimcategory-wea": "demidad",
        "exif-urgency-normal": "tatungus ($1)",
+       "exif-urgency-low": "pu’nel ($1)",
+       "exif-urgency-high": "takalaw ($1)",
        "namespacesall": "hamin",
        "monthsall": "hamin",
+       "recreate": "miliyaw miteka patizeng",
+       "confirm-purge-title": "misipu tina kasabelih",
        "confirm_purge_button": "malucekay",
        "confirm-watch-button": "malucekay",
        "confirm-unwatch-button": "malucekay",
        "confirm-rollback-button": "malucekay",
+       "quotation-marks": "\"$1\"",
+       "imgmultipageprev": "ayaway cacay a belih",
        "imgmultipagenext": "zikuzan a belih →",
        "imgmultigo": "mileku!",
+       "imgmultigoto": "taayaw saka $1 a blih",
+       "img-lang-default": "(pataayaw tu kawaw a kamu)",
        "img-lang-go": "mileku",
        "ascending_abbrev": "masalaylay adidi’ay katukuh tabakiay",
        "descending_abbrev": "masalaylay tabakiay katukuh adidi’ay",
        "table_pager_next": "zikuzan a belih",
+       "table_pager_first": "sakacacay a belih",
        "table_pager_last": "sazikuzay a kasabelih",
+       "table_pager_limit_label": "paybelih a sulit:",
        "table_pager_limit_submit": "mileku",
+       "table_pager_empty": "inayi’ ku heci",
+       "autosumm-blank": "nayi’ ku cacan a kasabelih",
+       "autosumm-newblank": "patizeng nayi’ ku cacan a kasabelih",
+       "watchlistedit-normal-title": "miazihay a piazihan tu sulit nu mikawaway-kalumyiti",
+       "watchlistedit-normal-submit": "misipu satangahan",
+       "watchlistedit-raw-title": "mikawaway-kalumyiti saayaway misisip a piazihan-tu-sulit",
+       "watchlistedit-raw-submit": "misabaluhay misisip tu piazihan-tu-sulit",
+       "watchlistedit-clear-title": "misipu miazihay a piazihan tu sulit",
+       "watchlisttools-clear": "misipu miazihay a piazihan tu sulit",
+       "watchlisttools-view": "ciwsace mahizaay a sumad",
+       "watchlisttools-raw": "mikawaway-kalumyiti saayaway misisip a piazihan-tu-sulit",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1| sasukamu ]])",
        "timezone-local": "itizaay",
        "version": "baziyong",
+       "version-extensions": "malacul tu sacunusan a sakaluk",
+       "version-skins": "malacul tu nuhekalan",
        "version-specialpages": "sazumaay a kasabelih",
+       "version-parserhooks": "kulawid nu saheciay sakaluk",
+       "version-variables": "masumaday-sausi",
+       "version-antispam": "mitena’ tu babakahen a latuh",
        "version-other": "zuma",
+       "version-mediahandlers": "myiti saungayay a sakaluk",
        "version-hooks": "kulawid",
+       "version-parser-function-hooks": "kamu-sakilul mapulita sapisausi makulawit",
+       "version-hook-name": "kalawid a kalungangan",
        "version-hook-subscribedby": "pangangan",
+       "version-no-ext-name": "[caay henay pangangan]",
        "version-skin-colheader-name": "nuhekalan",
        "version-ext-colheader-version": "baziyong",
-       "version-ext-colheader-description": "patahkal",
+       "version-ext-colheader-license": "sapabeli tu kinli a cedang",
+       "version-ext-colheader-description": "sapuelac",
        "version-ext-colheader-credits": "masacudaday",
+       "version-license-title": "$1 a sapabeli tu kinli a cedang",
+       "version-credits-title": "$1 a kasakumi nu misayingaay",
        "version-poweredby-others": "zuma",
+       "version-software": "malacul tu ku zwanti",
        "version-software-product": "nasang’ay a tuutuud",
        "version-software-version": "baziyong",
+       "version-entrypoints": "sacumud URL",
        "version-entrypoints-header-url": "URL",
        "version-libraries-library": "sulu nu cengse",
        "version-libraries-version": "baziyong",
-       "version-libraries-description": "patahkal",
+       "version-libraries-license": "sapabeli tu kinli a cedang",
+       "version-libraries-description": "sapuelac",
        "version-libraries-authors": "masacudaday",
        "redirect-submit": "mileku",
+       "redirect-lookup": "palalitemuh tu kawaw:",
+       "redirect-value": "sulyang:",
+       "redirect-page": "kasabelih ID",
+       "redirect-file": "kalungangan nu tangan",
+       "redirect-logid": "nasulitan nazipa’an ID",
+       "redirect-not-exists": "caykatepa ku sulyang",
+       "fileduplicatesearch": "mikilim masaliyaw a tangan",
+       "fileduplicatesearch-filename": "kalungangan nu tangan:",
        "fileduplicatesearch-submit": "kilim",
        "specialpages": "sazumaay a kasabelih",
+       "specialpages-group-maintenance": "aazihen a cudad nu midiputay",
+       "specialpages-group-other": "sazumaay cidek a kasabelih",
        "specialpages-group-login": "patalabu / panganganen ku canghaw",
+       "specialpages-group-users": "misaungayay atu tungus",
+       "specialpages-group-highuse": "sawsawniay a kasabelih",
+       "specialpages-group-pages": "piazihan tu sulit nu kasabelih",
+       "specialpages-group-pagetools": "kasabelih sakaluk",
+       "specialpages-group-wiki": "kalunasulitan atu sakaluk",
+       "specialpages-group-developer": "saayaway miteka a misakakawaway sakaluk",
+       "blankpage": "salengacay a kasabelih",
+       "tags": "kapah misumad tu tazihan a paya",
        "tag-filter": "[[Special:Tags|aazihen paya]] kilim:",
        "tag-filter-submit": "kilim",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|aazihen paya’}}]]: $2)",
+       "tag-mw-contentmodelchange": "lacul tatudungen misanga’  misumad",
+       "tags-title": "aazihen a paya",
+       "tags-tag": "aazihen a paya  kalungangan",
        "tags-source-header": "saangangan",
+       "tags-active-header": "miwawah",
        "tags-actions-header": "saungay",
        "tags-active-yes": "hang",
        "tags-active-no": "caay",
+       "tags-source-extension": "nay misaheci nu zwanti",
+       "tags-source-none": "caytu pisaungay",
        "tags-delete": "masipu",
        "tags-activate": "miteka’",
        "tags-deactivate": "mapasatezep",
+       "tags-hitcount": "$1 {{PLURAL:$1|misumad}}",
+       "tags-create-heading": "patizeng baluhay aazihen a paya",
+       "tags-create-tag-name": "aazihen a paya  kalungangan:",
        "tags-create-reason": "mahicaay:",
        "tags-create-submit": "patizeng",
+       "tags-delete-title": "misipu tu aazihen a paya",
        "tags-delete-reason": "mahicaay:",
+       "tags-activate-title": "miteka aazihen a paya",
        "tags-activate-reason": "mahicaay:",
        "tags-activate-submit": "miteka’",
+       "tags-deactivate-title": "mapasatezep tu aazihen a paya",
        "tags-deactivate-reason": "mahicaay:",
+       "tags-edit-title": "aazihen a paya mikawaway-kalumyiti",
+       "tags-edit-manage-link": "aazihen a paya nu kuwan",
+       "tags-edit-new-tags": "baluhay aazihen a paya:",
+       "tags-edit-add": "micunus uyniyay aazihen a paya:",
+       "tags-edit-chosen-placeholder": "mipili’ hatizaay aazihen a paya",
        "tags-edit-reason": "mahicaay:",
+       "tags-edit-success": "macaedung tu ku sasumad.",
+       "comparepages": "sasutili’ay a kasabelih",
+       "compare-page1": "sakacacay a belih",
+       "compare-page2": "sakatusa a belih",
+       "compare-rev1": "misumad nu ayaway 1",
+       "compare-rev2": "misumad nu ayaway 2",
        "compare-submit": "sasutili’ay",
        "diff-form": "sasizuma",
        "permanentlink": "saluimengay misiket",
+       "htmlform-required": "sasuliten kuyni.",
        "htmlform-submit": "patayzaan",
+       "htmlform-reset": "patiku masumaday",
        "htmlform-selectorother-other": "zuma",
        "htmlform-no": "caay",
        "htmlform-yes": "hang",
+       "htmlform-cloner-create": "ngalepen tu cunus",
        "htmlform-cloner-delete": "milimad",
+       "htmlform-time-placeholder": "HH:MM:SS",
        "htmlform-title-not-exists": "$1 inayi’",
        "htmlform-user-not-exists": "<strong>$1</strong> inayi’",
        "logentry-delete-delete": "$1 {{GENDER:$2|masiputu}} kasabelih $3",
        "restore-count-files": "{{PLURAL:$1|1 tangan}}",
+       "revdelete-content-hid": "madimut tu ku lacul",
+       "revdelete-content-unhid": "palawpes midimut tu lacul",
+       "revdelete-summary-unhid": "palawpes midimut  mikawaway-kalumyiti pecu’ nu lacul",
        "logentry-move-move": "$1 {{GENDER:$2|milimad tuway}} kasabelih $3 katukuh $4",
        "logentry-newusers-create": "{{GENDER:$2|patizeng}} misaungayay canghaw tuway $1",
        "logentry-upload-upload": "$1 {{GENDER:$2|masayacay tuway}} $3",
+       "log-name-managetags": "aazihan-paya kuwan tu nasulitan",
+       "log-name-tag": "aazihen a paya nasulitan nazipa’an",
        "rightsnone": "(nayi’)",
        "feedback-back": "tatiku",
        "feedback-cancel": "palawpes",
-       "feedback-close": "pahezek",
+       "feedback-close": "malahecitu",
+       "feedback-external-bug-report-button": "munday nu patubeli",
+       "feedback-dialog-title": "patahkal tu kamu mihwidubaku",
        "feedback-message": "palatuh:",
-       "feedback-subject": "taazihan tu kawaw:",
+       "feedback-subject": "satangahan:",
        "feedback-submit": "patayzaan",
+       "feedback-thanks-title": "kukay tisuwanan!",
+       "feedback-useragent": "misaungayay tayli:",
        "searchsuggest-search": "kilim {{SITENAME}}",
+       "api-error-unknownerror": "caay kapulita ku mungangaw: \"$1\".",
+       "duration-seconds": "$1 {{PLURAL:$1|a beti}}",
+       "duration-minutes": "$1 {{PLURAL:$1|widi}}",
+       "duration-hours": "$1 {{PLURAL:$1|tuki}}",
+       "duration-weeks": "$1 {{PLURAL:$1|a lipas}}",
+       "duration-years": "$1 {{PLURAL:$1|a mihca}}",
+       "duration-centuries": "$1 {{PLURAL:$1|lasubu a mihca}}",
+       "duration-millennia": "$1 {{PLURAL:$1|malebut a mihca}}",
+       "limitreport-title": "tingalaw-kikay mapulita kalunasulitan:",
+       "limitreport-cputime": "CPU pisaungay a lawad(tuki)",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|a beti}}",
+       "limitreport-walltime": "tatengaay pisaungay a lawad-tuki",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|a beti}}",
+       "limitreport-postexpandincludesize": "namicuwat nicaliwan hacica-tabaki",
+       "limitreport-expansiondepth": "satakalaw micuwat ilabu",
+       "expandtemplates": "micuwat tu taazihan a mitudung",
+       "expand_templates_input": "suliten:",
        "expand_templates_output": "heci",
+       "expand_templates_xml_output": "XML patahkal",
        "expand_templates_ok": "malucekay",
+       "expand_templates_remove_comments": "misipu buhci tu kamu",
        "expand_templates_preview": "pataayaway miazih",
+       "pagelanguage": "misumad kasabelih a kamu",
        "pagelang-language": "kamu",
+       "pagelang-use-default": "pisaungay pataayaw tu kawaw a kamu",
+       "pagelang-select-lang": "mipili’ tu kamu",
        "pagelang-reason": "mahicaay:",
        "pagelang-submit": "patayzaan",
+       "right-pagelang": "misumad kasabelih a kamu",
+       "action-pagelang": "misumad kasabelih a kamu",
+       "log-name-pagelang": "kamu misumad a nasulitan nazipa’an",
+       "mediastatistics": "myiti sausi cesyun",
+       "mediastatistics-table-mimetype": "MIME nikalahizaan",
+       "mediastatistics-table-extensions": "kapah saungay a mikilulay a ngangan nu tangan",
+       "mediastatistics-table-count": "tangan nikayadah",
+       "mediastatistics-table-totalbytes": "pulung sausi nu hacica-tabaki",
        "mediastatistics-header-bitmap": "pacepacekan a zunga",
+       "mediastatistics-header-drawing": "mizunga (siangliyang zunga)",
        "mediastatistics-header-audio": "ludihang",
        "mediastatistics-header-video": "yiga",
+       "mediastatistics-header-multimedia": "payadahay malocimyidiy",
        "mediastatistics-header-office": "zimusiw",
        "mediastatistics-header-executable": "kapah tu mileku",
+       "mediastatistics-header-archive": "piepian mipecec tuway a kese",
+       "mediastatistics-header-total": "sacahamin a tangan",
+       "json-error-syntax": "sakilul nu kamu mungangaw",
+       "headline-anchor-title": "misasiket tina tusil",
        "special-characters-group-latin": "u sulit nu Latin",
+       "special-characters-group-latinextended": "lalad tu sulit nu Lating",
+       "special-characters-group-ipa": "nu kanatalay a silusi nu ngiha’",
        "special-characters-group-symbols": "sawantan",
        "special-characters-group-greek": "u sulit nu Sila",
+       "special-characters-group-greekextended": "lalad tu sulit-bacu nu Sila",
+       "special-characters-group-cyrillic": "u sulit nu Selafu",
+       "special-characters-group-arabic": "u sulit nu Alapu",
+       "special-characters-group-arabicextended": "lalad tu sulit nu Alapo",
+       "special-characters-group-hebrew": "u kamu nu Hipulay",
+       "special-characters-group-bangla": "u sulit nu Muncyala",
+       "special-characters-group-tamil": "u sulit nu tanmil",
+       "special-characters-group-telugu": "u sulit nu telaku",
+       "special-characters-group-sinhala": "u sulit nu sencialo",
+       "special-characters-group-gujarati": "u sulit nu Kucilat",
        "special-characters-group-devanagari": "Devanagari a kamu",
        "special-characters-group-thai": "u sulit nu Tayko",
        "special-characters-group-lao": "u sulit nu Liau",
        "special-characters-group-khmer": "u sulit nu Kaomien",
+       "special-characters-title-endash": "apuyu’ay a pucehaw",
+       "special-characters-title-emdash": "tanaya’ay a pucehaw",
        "special-characters-title-minus": "selep a bacu",
+       "mw-widgets-dateinput-no-date": "caayhen mipili’ tu demiad",
+       "mw-widgets-mediasearch-noresults": "caykatepa ku heci.",
+       "mw-widgets-titleinput-description-new-page": "kasabelih nayai’ tu",
+       "mw-widgets-categoryselector-add-category-placeholder": "micunus tu kakuniza...",
+       "mw-widgets-usersmultiselect-placeholder": "micunus sangaleben...",
+       "sessionprovider-generic": "$1 kasasiketan",
+       "randomrootpage": "kakibalucu’ lamitay kasabelih",
+       "log-action-filter-block": "milangat nikalahizaan:",
+       "log-action-filter-delete": "misipu nikalahizaan:",
+       "log-action-filter-import": "pacumud nikalahizaan:",
+       "log-action-filter-move": "milimad nikalahizaan:",
+       "log-action-filter-patrol": "tayza mikibi nikalahizaan:",
+       "log-action-filter-protect": "midiput nikalahizaan:",
+       "log-action-filter-upload": "nikalahizaan nu patapabaw:",
        "log-action-filter-all": "hamin",
-       "log-action-filter-block-block": "malangat",
+       "log-action-filter-block-block": "milangat",
+       "log-action-filter-block-reblock": "milangat tu sapisumad",
+       "log-action-filter-block-unblock": "mihulak tu langat",
+       "log-action-filter-contentmodel-change": "lacul tatudungen-misanga’ a sumad",
+       "log-action-filter-delete-delete": "misipu kasabelih",
+       "log-action-filter-delete-delete_redir": "miliyaw patatuzu’ mipakutay tu sulit",
+       "log-action-filter-delete-restore": "kasabelih milawpes tu sipu",
+       "log-action-filter-delete-event": "misipu nasulitan nazipa’an",
+       "log-action-filter-delete-revision": "misumad nu ayaway a sipu",
+       "log-action-filter-managetags-create": "patizeng aazihen paya",
+       "log-action-filter-managetags-delete": "misipu aazihen a paya",
+       "log-action-filter-managetags-activate": "aazihen a paya miteka",
+       "log-action-filter-managetags-deactivate": "aazihan-paya palawpesen ku pisaungay",
+       "log-action-filter-move-move_redir": "milimad miliyaw misulit miliyawtu tazuma nay",
+       "log-action-filter-newusers-create": "nay paceba panganganay a misaungayay patizeng",
+       "log-action-filter-newusers-create2": "nay pangangan misaungayay patizeng",
+       "log-action-filter-newusers-autocreate": "lunuk patizeng",
+       "log-action-filter-patrol-patrol": "lima-saungay tayza mikibi",
+       "log-action-filter-patrol-autopatrol": "lunuk tayza mikibi",
        "log-action-filter-protect-protect": "midiput",
+       "log-action-filter-protect-modify": "midiput tu misumaday",
+       "log-action-filter-protect-unprotect": "mihulak midiputay",
+       "log-action-filter-protect-move_prot": "midiputay milimad tuway",
+       "log-action-filter-rights-rights": "lima-saungay misumad",
+       "log-action-filter-rights-autopromote": "lunuk misumad",
+       "log-action-filter-suppress-event": "nasulitan nazipa’an satezep  paazih",
+       "log-action-filter-suppress-revision": "masumad nu ayaway  satezep paazih",
+       "log-action-filter-suppress-delete": "kasabelih satezep paazih",
        "log-action-filter-upload-upload": "baluhay a patapabaw",
-       "authprovider-resetpass-skip-label": "sekipo"
+       "log-action-filter-upload-overwrite": "miliyaw patapabaw",
+       "authmanager-authplugin-setpass-failed-title": "misumad mima mungangaw",
+       "authmanager-authplugin-setpass-bad-domain": "la’cusay a calay-subal(wangyi).",
+       "authmanager-email-label": "imyiyo(email)",
+       "authmanager-email-help": "imyiyo(email) puenengan",
+       "authmanager-realname-label": "tatengaay a ngangan",
+       "authmanager-realname-help": "misaungayay tatenga’ay a ngangan",
+       "authmanager-provider-temporarypassword": "nanunuz a mima",
+       "authprovider-confirmlink-request-label": "manakanca masasiket tu canghaw",
+       "authprovider-resetpass-skip-label": "sekipo",
+       "authform-newtoken": "mahedaw mima-sacukcuk. $1",
+       "authform-wrongtoken": "mima-sacukcuk mungangaw",
+       "specialpage-securitylevel-not-allowed-title": "amana",
+       "cannotauth-not-allowed-title": "caykataneng ku tungus",
+       "changecredentials": "misumad tu sapangangan-wacay",
+       "changecredentials-success": "masumad tuway zencen nu misu.",
+       "removecredentials": "misipu sapangangan",
+       "removecredentials-success": "masipu tu pincen nu misu.",
+       "credentialsform-provider": "pincen nikalahizaan:",
+       "credentialsform-account": "canghaw kalungangan:",
+       "cannotlink-no-provider-title": "inayi’ amasasiketan a canghaw",
+       "linkaccounts": "masasiket tu canghaw",
+       "linkaccounts-success-text": "masasiket tu ku canghaw",
+       "linkaccounts-submit": "masasiket tu canghaw",
+       "unlinkaccounts": "palawpes masasiketay a canghaw",
+       "unlinkaccounts-success": "malawpes masasiket tu canghaw.",
+       "revid": "masumad nu ayaway $1",
+       "pageid": "kasabelih ID $1"
 }
index e2d890f..5473afe 100644 (file)
        "querypage-no-updates": "Ednīwunga for þissum tramete ne sindon nū gelīfeda. \nCȳþþu hēr ne biþ hraðe ednīwod.",
        "viewsource": "Sēon fruman",
        "viewsource-title": "Fruman for $1 sēon",
+       "actionthrottled": "Macung gewyrged",
+       "actionthrottledtext": "Swa gemetgung wið misnytt, þu ne meaht geæfnan þisre macung to oft in scortum hwile, and þu hæfest onþuned swylc mearc.\nWe beodaþ þe þe þu cunne æfter lytlum hwile.",
        "protectedpagetext": "Þes tramet wæs geborgen tō wyrnenne ōðerre adihtunge oþþe ōðra dǣda.",
        "viewsourcetext": "Þū canst sēon and biwrītan þone fruman þisses trametes:",
        "viewyourtext": "Þū canst sēon and biwrītan þone fruman <strong>þīnra adihtunga</strong> tō þissum tramete:",
        "showpreview": "Īwan forebysene",
        "showdiff": "Īwan andwendunga",
        "summary-preview": "Scortnesse forebysen:",
+       "blockedtitle": "Bruced is fordiced",
        "blockednoreason": "nān racu gifen",
        "whitelistedittext": "Þū scealt $1 to adihtenne trametas.",
        "nosuchsectiontitle": "Ne cann dǣl findan",
        "permissionserrorstext-withaction": "Þū ne hæfst þafunge tō $2, for {{PLURAL:$1|þisre race|þissum racum}}:",
        "recreate-moveddeleted-warn": "'''Warnung: Þū edsciepst tramet þe wæs ǣr forloren.'''\n\nÞu sceoldest smēagan, hwæðer hit gerādlīc sīe, forþ tō gānne mid þǣre adihtunge þisses trametes.\nÞæt forlēosunge and wegunge ealdhord þisses trametes is hēr geīeht for behēfnesse:",
        "moveddeleted-notice": "Þes tramet wæs forloren.\nÞæt forlēosunge and wǣgunge stǣr þæs trametes is geīwed hēr.",
+       "postedit-confirmation-created": "Se tramet hæfþ beon gesceapen",
+       "postedit-confirmation-restored": "Se tramet hæfþ beon geseted",
+       "undo-summary": "Ic undyde sceawunge $1 be [[Syndrig:Contributions/$2|$2]] ([[Brūcendmōtung:$2|Mōtung]])",
+       "undo-summary-username-hidden": "Ic undyde sceawung $1 be bedyrnedum brucende",
        "viewpagelogs": "Sēon þisses trametes ealdhold",
        "nohistory": "Nis nān adihtunge stǣr for þissum tramete.",
        "currentrev-asof": "Nīwost fadung on þǣre $3. tīde þæs $2.",
index 725bb1b..91a386d 100644 (file)
        "changeemail-throttled": "أنت قمت بمحاولات تسجيل دخول كثيرة.\nمن فضلك انتظر $1 قبل المحاولة ثانية.",
        "changeemail-nochange": "رجاءً أدخل كلمة سر جديد مختلفة.",
        "resettokens": "غير المفاتيح",
-       "resettokens-text": " يمكن تغيير المفاتيح من الاطلاع على البيانات الخصوصية المتعلقة بحسابك.\nغير المفاتيح إذا أطلعت عليها أحدهم عن طريف الخطأ أو إذا كان حسابك قد اخترق.",
+       "resettokens-text": "عليك تغيير الرموز من الاطلاع على البيانات الخصوصية المتعلقة بحسابك.\n\nغير الرموز إذا أطلعت عليها أحدهم عن طريف الخطأ أو إذا كان حسابك قد اُختُرِق.",
        "resettokens-no-tokens": "ما من مفاتيح للتغيير.",
        "resettokens-tokens": "مفاتيح:",
        "resettokens-token-label": "$1 (القيمة الحالية: $2)",
        "parser-template-loop-warning": "تم كشف حلقة قالب: [[$1]]",
        "template-loop-category": "الصفحات بحلقات قالب",
        "template-loop-category-desc": "الصفحة تحتوي على حلقة قالب، أي أن القالب يستدعي نفسه.",
+       "template-loop-warning": "<strong>تحديز:</strong> هذه الصفحة تستدعي [[:$1]] والذي يتسبب في حدوث حلقة قالب (استدعاء عودي لا نهائي).",
        "parser-template-recursion-depth-warning": "تم تجاوز حد عمق فرد القوالب ($1)",
        "language-converter-depth-warning": "تم تخطي حد عمق محول اللغة ($1)",
        "node-count-exceeded-category": "تجاوزات تعداد العقد",
        "timezoneregion-indian": "المحيط الهندي",
        "timezoneregion-pacific": "المحيط الهادي",
        "allowemail": "مكن تلقي البريد الإلكتروني من المستخدمين الآخرين",
+       "email-blacklist-label": "امنع هؤلاء المستخدمين من إرسال بريد إلكتروني لي:",
        "prefs-searchoptions": "البحث",
        "prefs-namespaces": "أسماء النطاقات",
        "default": "افتراضي",
        "rcfilters-watchlist-markseen-button": "التعليم على كل التغييرات كمرئية",
        "rcfilters-watchlist-edit-watchlist-button": "تعديل قائمة الصفحات المراقبة",
        "rcfilters-watchlist-showupdated": "التغييرات للصفحات التي لم تزرها منذ حدوث التغييرات هي <strong>بالخط العريض</strong>، مع علامات صلبة.",
+       "rcfilters-preference-label": "أخف النسخة المحسنة من أحدث التغييرات",
+       "rcfilters-preference-help": "يسترجع عملية إعادة تصميم الواجهة لعام 2017 وكل الأدوات التي أضيفت منذ ذلك الوقت.",
        "rcnotefrom": "بالأسفل {{PLURAL:$5|التغيير|التغييرات}} منذ <strong>$2</strong> (إلى <strong>$1</strong> معروضة).",
        "rclistfromreset": "إعادة ضبط خيار التاريخ",
        "rclistfrom": "أظهر التغييرات بدء من $3 $2",
        "logentry-newusers-autocreate": "أنشئ حساب {{GENDER:$2|المستخدم|المستخدمة}} $1 تلقائيًا",
        "logentry-protect-move_prot": "$1 {{GENDER:$2|نقل}} إعدادات الحماية من $4 إلى $3",
        "logentry-protect-unprotect": "{{GENDER:$2|رفع|رفعت}} $1 الحماية عن $3",
-       "logentry-protect-protect": "$1 {{GENDER:$2|حمى|حمت}} $3 $4",
+       "logentry-protect-protect": "{{GENDER:$2|حمى|حمت}} $1 $3 $4",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|حمى|حمت}} $3 $4 [مضمنة]",
        "logentry-protect-modify": "{{GENDER:$2|غير|غيرت}} $1 مستوى حماية $3 $4",
        "logentry-protect-modify-cascade": "$1 {{GENDER:$2|غير|غيرت}} مستوى الحماية ل$3 $4 [مضمن]",
index d2173a2..aa5984c 100644 (file)
        "loginsuccesstitle": "Daxil oldunuz",
        "loginsuccess": "'''\"$1\" adı ilə sistemə daxil oldunuz.'''",
        "nosuchuser": "\"$1\" adlı istifadəçi mövcud deyil.\nİstifadəçi adları hərflərin böyük və ya kiçik olmasına həssasdırlar.\nDüzgün yazdığınıza əmin olun, yaxud [[Special:CreateAccount|yeni hesab açın]].",
-       "nosuchusershort": "\"$1\" adında istifadəçi mövcud deyil.\nDüzgün yazdığına əmin ol.",
+       "nosuchusershort": "\"$1\" adlı istifadəçi mövcud deyil. Yazdığınızı yoxlayın.",
        "nouserspecified": "İstifadəçi adı daxil etməlisiniz.",
        "login-userblocked": "Bu istifadəçi bloklanıb. Sistemə giriş üçün icazə verilmir.",
        "wrongpassword": "Səhv parol. Təkrar yazın.",
        "recentchanges-legend-heading": "<strong>Legenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (həmçinin bax: [[Special:NewPages|yeni səhifələrin siyahısı]])",
        "recentchanges-submit": "Göstər",
+       "rcfilters-legend-heading": "<strong>Abreviaturalar siyahısı:</strong>",
+       "rcfilters-other-review-tools": "<strong>Digər yoxlama alətləri</strong>",
+       "rcfilters-group-results-by-page": "Dəyişiklikləri səhifələrə görə qruplaşdır",
+       "rcfilters-grouping-title": "Qruplaşdırma",
+       "rcfilters-activefilters": "Aktiv filtrlər",
+       "rcfilters-advancedfilters": "Geniş filtr",
+       "rcfilters-limit-title": "Göstərilməli dəyişikliklər",
+       "rcfilters-limit-shownum": "Son {{PLURAL:$1|dəyişikliyi|$1 dəyişikliyi}} göstər",
+       "rcfilters-days-title": "Son günlər",
+       "rcfilters-hours-title": "Son saatlar",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|gün|gün}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|saat|saat}}",
+       "rcfilters-quickfilters": "Yaddaşdakı filtrlər",
+       "rcfilters-quickfilters-placeholder-title": "Yaddaşa verilmiş keçid yoxdur",
+       "rcfilters-quickfilters-placeholder-description": "Filtr nizamlamalarını yaddaşda saxlamaq və sonradan təkrar istifadə etmək üçün aşağıdakı Aktiv Filtrlər bölməsindəki əlfəcin nişanını tıqlayın.",
+       "rcfilters-savedqueries-remove": "Sil",
        "rcfilters-savedqueries-new-name-label": "Ad",
        "rcfilters-savedqueries-cancel-label": "Ləğv et",
+       "rcfilters-savedqueries-add-new-title": "Hazırkı filtr nizamlamalarını yaddaşa ver",
+       "rcfilters-restore-default-filters": "Standart filtrləri bərpa et",
+       "rcfilters-clear-all-filters": "Bütün filtrləri sil",
+       "rcfilters-show-new-changes": "Ən son dəyişiklikləri göstər",
+       "rcfilters-search-placeholder": "Son dəyişiklikləri filtrlə (siyahıdan seçin və ya yazın)",
+       "rcfilters-empty-filter": "Aktiv filtr yoxdur. Bütün redaktələr göstərilir.",
        "rcfilters-filterlist-title": "Filtrlər",
+       "rcfilters-filterlist-feedbacklink": "Bu (yeni) filtrasiya alətləri barədə fikirlərinizi bizimlə bölüşün",
+       "rcfilters-highlightbutton-title": "Nəticələri vurğula",
+       "rcfilters-highlightmenu-title": "Rəng seçin",
+       "rcfilters-highlightmenu-help": "Bu xüsusiyyəti rəngləmək üçün rəng seçin",
+       "rcfilters-filtergroup-authorship": "Redaktələrin müəllifliyi",
+       "rcfilters-filter-editsbyself-label": "Öz dəyişiklikləriniz",
+       "rcfilters-filter-editsbyother-label": "Başqalarının dəyişiklikləri",
+       "rcfilters-filtergroup-userExpLevel": "İstifadəçi qeydiyyatı və təcrübəsi",
+       "rcfilters-filter-user-experience-level-registered-label": "Qeydiyyatlı",
+       "rcfilters-filter-user-experience-level-unregistered-label": "Qeydiyyatsız",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Təcrübəsizlər",
+       "rcfilters-filter-user-experience-level-learner-label": "Öyrənənlər",
+       "rcfilters-filter-user-experience-level-experienced-label": "Təcrübəli istifadəçilər",
+       "rcfilters-filtergroup-automated": "Avtomatik redaktələr",
        "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-humans-label": "İnsan (qeyri-bot)",
+       "rcfilters-filtergroup-significance": "Əhəmiyyətlilik",
        "rcfilters-filter-minor-label": "Kiçik redaktələr",
+       "rcfilters-filter-major-label": "Adi redaktələr",
+       "rcfilters-filtergroup-watchlist": "İzləmə siyahısındakı səhifələr",
+       "rcfilters-filter-watchlist-watched-label": "İzləmə siyahısında olan",
+       "rcfilters-filter-watchlist-watchednew-label": "İzləmə siyahısında yeni redaktələr",
+       "rcfilters-filter-watchlist-notwatched-label": "İzləmə siyahısında olmayan",
+       "rcfilters-filtergroup-changetype": "Dəyişiklik növü",
+       "rcfilters-filter-pageedits-label": "Səhifə redaktələri",
+       "rcfilters-filter-newpages-label": "Səhifə yaradılmaları",
+       "rcfilters-filter-categorization-label": "Kateqoriya dəyişiklikləri",
+       "rcfilters-filter-logactions-label": "Qeydiyyatlı redaktələr",
+       "rcfilters-filter-logactions-description": "İnzibati tədbirlər, hesab yaradılmaları, səhifə silinmələri, yükləmələr…",
+       "rcfilters-filtergroup-lastRevision": "Son versiyalar",
+       "rcfilters-filter-lastrevision-label": "Hazırkı versiya",
+       "rcfilters-filter-previousrevision-label": "Sonuncu olmayan versiya",
+       "rcfilters-exclude-button-off": "Seçilənləri istisna et",
+       "rcfilters-exclude-button-on": "Seçilmişlərin çıxarılması",
+       "rcfilters-view-advanced-filters-label": "Genişləndirilmiş filtrlər",
+       "rcfilters-view-tags": "Etiketlənmiş redaktələr",
+       "rcfilters-view-namespaces-tooltip": "Nəticələri adlar fəzasına görə filtrlə",
+       "rcfilters-view-tags-tooltip": "Nəticələri redaktə etiketləri əsasında filtrlə",
        "rcnotefrom": "Aşağıda <strong>$2</strong>-dən bu yana olan dəyişikliklər göstərilib (<strong>$1</strong>-dən çox olmayaraq).",
        "rclistfrom": "$3 $2 vaxtından başlayaraq yeni dəyişiklikləri göstər",
        "rcshowhideminor": "Kiçik redaktələri $1",
        "recentchangeslinked-summary": "Aşağıdakı siyahı, qeyd olunan səhifəyə (və ya qeyd olunan kateqoriyadakı səhifələrə) daxili keçid verən səhifələrdə edilmiş son dəyişikliklərin siyahısıdır.\n[[Special:Watchlist|İzləmə siyahınızdakı]] səhifələr '''qalın''' şriftlə göstərilmişdir.",
        "recentchangeslinked-page": "Səhifə adı:",
        "recentchangeslinked-to": "Qeyd olunan səhifədəki deyil, ona daxili keçid verən səhifələrdəki dəyişiklikləri göstər",
+       "recentchanges-page-added-to-category": "[[:$1]] kateqoriyaya əlavə edildi",
        "upload": "Fayl yüklə",
        "uploadbtn": "Sənəd yüklə",
        "reuploaddesc": "Return to the upload form.",
        "ipbreason": "Səbəb:",
        "ipbreason-dropdown": "*Bloklama səbəbləri:\n** Yalan məlumatların əlavə edilməsi\n** Səhifənin məzmununun silinməsi\n** Xarici saytlara spam-keçidlər\n** Səhifəyə mənasız və yararsız əlavələrə görə\n** Hədə və təqiblərə görə\n** Təhqirə görə\n** Çoxsaylı hesabdan sui istifadəyə görə\n** Qadağan olunmuş istifadəçi adına görə",
        "ipbcreateaccount": "Hesab açmanı məhdudlaşdır",
+       "ipbenableautoblock": "Bu istifadəçinin istifadə etdiyi son IP-ünvanı və dəyişiklik etməyə çalışdığı sonrakı IP-ünvanları blokla",
        "ipbsubmit": "Bu istifadəçini blokla",
        "ipbother": "Başqa vaxt",
        "ipboptions": "2 saat:2 hours,1 gün:1 day,3 gün:3 days,1 həftə:1 week,2 həftə:2 weeks,1 ay:1 month,3 ay:3 months,6 ay:6 months,1 il:1 year,müddətsiz:infinite",
        "unblockip": "İstifadəçinin blokunu götür",
        "unblockiptext": "Əvvəlcədən bloklanmış bir IP ünvanına və ya istifadəçi adına yazma geri vermek için aşağıdakı formadan istifadə edin.",
        "ipusubmit": "Bu bloku götür",
-       "unblocked": "[[User:$1|$1]] - nin bloku götürüldü",
-       "unblocked-range": "$1-nin bloku götürüldü",
-       "unblocked-id": "$1-nin bloku götürüldü",
+       "unblocked": "[[User:$1|$1]] blokdan çıxarıldı",
+       "unblocked-range": "$1 blokdan çıxarıldı",
+       "unblocked-id": "$1 üzərindən blok götürüldü",
        "blocklist": "Bloklanmış istifadəçilər",
        "autoblocklist": "Avtobloklar",
        "autoblocklist-submit": "Axtar",
        "compare-submit": "Qarşılaşdır",
        "dberr-problems": "Üzr istəyirik! Bu saytda texniki problemlər var.",
        "dberr-info": "(Məlumat bazası ilə əlaqə yoxdur: $1)",
-       "htmlform-invalid-input": "Girişinizin bir qismilə əlaqədəar problemlər var",
+       "htmlform-invalid-input": "Daxil etdiyiniz məlumatın bir qismilə əlaqədar problem var",
        "htmlform-select-badoption": "İşarə etdiyiniz xüsus keçərli deyil.",
        "htmlform-int-invalid": "Göstərdiyiniz ifadə tam ədəd deyil.",
        "htmlform-float-invalid": "Göstərdiyiniz ifadə ədəd deyil.",
index 3808631..825ab17 100644 (file)
@@ -19,7 +19,9 @@
                        "Mjbmr",
                        "Alp Er Tunqa",
                        "Matma Rex",
-                       "Ilğım"
+                       "Ilğım",
+                       "ییلماز",
+                       "Saraiki"
                ]
        },
        "tog-underline": "باغلانتی‌لارین آلتینی خطله:",
        "category-file-count-limited": "بۇ بؤلمه‌ده، آشاغیداکی {{PLURAL:$1|فایل|$1 فایل}} واردیر.",
        "listingcontinuesabbrev": "(قالانی)",
        "index-category": "ایندئکس‌لشدیریلمیش صحیفه‌لر",
-       "noindex-category": "ایندئکس‌لشدیریلمه‌میش صحیفه‌لر",
+       "noindex-category": "ایندکس‌لشدیریلمه‌میش صفحه‌لر",
        "broken-file-category": "قیریلمیش فایل باغلانتیلاری اوْلان صحیفه‌لر",
        "about": "حاقیندا",
        "article": "ایچری‌لی صحیفه",
        "searcharticle": "گئت",
        "history": "صفحه‌‌نین گئچمیشی",
        "history_short": "گئچمیش",
+       "history_small": "گئچمیش",
        "updatedmarker": "سوْن باخیشیمدان سوْنرا یئنی‌لنیب‌دیر",
        "printableversion": "چاپ اۆچون نۆسخه",
        "permalink": "قالیجی لینک",
        "createacct-yourpasswordagain-ph": "رمزی یئنی‌دن یازین",
        "userlogin-remembermypassword": "منی ایچری‌ده ساخلا",
        "userlogin-signwithsecure": "آرخایین باغلانتی ایشلدین",
+       "cannotlogin-title": "گیرمک اوْلمور",
+       "cannotlogin-text": "گیرمک مۆمکون دئییل.",
        "cannotloginnow-title": "ایندی گیریش اوْلونمازدیر",
        "cannotloginnow-text": "$1-ی ایشلدرکن گیریش اوْلونمازدیر",
+       "cannotcreateaccount-title": "حساب یاراتماق اوْلمور",
        "yourdomainname": "سیزین دامنه:",
        "password-change-forbidden": "بو ویکی‌ده رمزلری دَییشه بیلنمه‌سینیز.",
        "externaldberror": "بیر دیتابیس دوغرولاما خطاسی اولدو، یوخسا سیزین ائشیک حسابینیزی گونجل‌لدمگه ایجازه‌نیز یوخدور.",
        "pt-login": "گیریش ائت",
        "pt-login-button": "گیریش ائت",
        "pt-login-continue-button": "گیریشین دالینی توت",
-       "pt-createaccount": "حساب یارات",
+       "pt-createaccount": "حساب آچ",
        "pt-userlogout": "چیخیش",
        "php-mail-error-unknown": "پی‌اچ‌پی‌نین mail() فونکسیاسیندا تانینمامیش خطا.",
        "user-mail-no-addy": "ایمیل آدرسی اولماماق‌لا، ایمیل گؤندرمگه چالیشدی",
        "permissionserrorstext": "سیز آشاغیداکی {{PLURAL:$1|دلیل|دلیل‌لر}}ه گؤره، او ایشه ایجازه‌نیز یوخدور.",
        "permissionserrorstext-withaction": "سیز آشاغیداکی {{PLURAL:$1|دلیل|دلیل‌لر}}اوچون، $2 ایشینه ایجازه‌نیز یوخدور:",
        "recreate-moveddeleted-warn": "'''دیقت: سیز اؤنجه‌ده سیلینمیش بیر صفحه‌نی یئنی‌دن یارادیرسینیز.'''\n\nبو صفحه‌نین یئنی‌دن یارادماغی‌نین نه‌قدر اویغون اولدوغونو گرک نظرده آلاسینیز.\nبو صفحه‌نین سیلمک و آپارماق گئچمیشی بوردا گؤستریلیب‌دیر:",
-       "moveddeleted-notice": "بو صحیفه سیلینمیشدیر.\nمعلومات اوچون آشاغیدا بو صحیفه‌نین آددَییشدیرمه و سیلمه قئيدلری گؤستریلیب‌دیر.",
+       "moveddeleted-notice": "بو صفحه سیلینیبدیر.\nسیلمه، قوْروما و آد دَییشدیرمه قئيدلری آشاغیدا گؤستریلیر.",
        "log-fulllog": "بوتون بیلگی‌لری گؤستر",
        "edit-hook-aborted": "دوزلیش‌لر قارماق-پروسئ‌دور طرفین‌دن گئری قایتاریلیب.\nعلاوه ایزاهات وئریلمه‌ییب.",
        "edit-gone-missing": "صحیفنی یئنی لمک مومکون دئییل.\nچوخ گومان کی، صحیفه سیلینمیش‌دیر.",
        "page_first": "ایلک",
        "page_last": "سون",
        "histlegend": "فرقلری سئچمه: موقاییسه ائتمک ایسته‌دیگینیز دییشیک‌لیکلرین یانینداکی گیرده دۆیمه‌لره علامت قویون و سوْنرا Enter-ی وۇروب یوْخسا آشاغیداکی دۆیمه‌نی وورون.<br />\nآچیقلاما:'''({{int:cur}})''' =سون نوسخه ایله فرقلر ، '''({{int:last}})''' = قاباقکی نوسخه ایله فرقلر، '''{{int:minoreditletter}}''' = کیچیک دییشیک‌لیک.",
-       "history-fieldset-title": "گئچمیشی آختار",
+       "history-fieldset-title": "نۆسخه‌لر آختاریشی",
        "history-show-deleted": "تکجه سیلینَنلر",
        "histfirst": "ان اسکی",
        "histlast": "ان یئنی",
        "search-interwiki-caption": "قارداش پروژه‌لر",
        "search-interwiki-default": "$1 دان سونوجلار:",
        "search-interwiki-more": "(داها)",
+       "search-interwiki-more-results": "داها چوْخ نتیجه‌لر",
        "search-relatedarticle": "ایلگیلی",
        "searchrelated": "ایلگیلی",
        "searchall": "بوتون",
        "search-external": "ائشیک آختاریش",
        "searchdisabled": "{{SITENAME}} آختاریشی باغلانیب‌دیر.\nایندی گوگل ایله آختارا بیلرسینیز.\nدیقت ائدین کی اونون {{SITENAME}} ایندئکسی، کؤهنه اولا بیلر.",
        "search-error": "آختاراندا بیر خطا قاباغا گلدی: $1",
+       "search-warning": "آختاراندا بیر خطا قاباغا گلدی: $1",
        "preferences": "ترجیحلر",
        "mypreferences": "ترجیحلر",
        "prefs-edits": "دَییشمه‌لرین سایی:",
        "prefs-help-prefershttps": "سیزین بو ترجیحینیزین اثری سیزین سونراکی گیریشینیز دن سونرا اولاجاق.",
        "prefswarning-warning": "ترجیحلرینیزه اولان دَییشیک لر هله آرتیریلمیب.\nایر بو صفحه نین \"$1\" اوستونه باسیلمامیشدان اونجه ترک ائتسز ترجیحلرینیز آرتیریلمییاجاق.",
        "prefs-tabs-navigation-hint": "ایپ اوجو : سیز ائلیه بیلرسیز ساغ و سول جهت نیما کیلید لریندن نیشانه نه نین دولانماسی نیشانه لر لیستینده ایستفاده ائده سیز.",
-       "userrights": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ø­Ø§Ù\82Ù\84ارÛ\8c Ø§Û\8cدارÙ\87â\80\8cسی",
-       "userrights-lookup-user": "اÛ\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8c Ú¯Ø±Ù\88Ù¾Ù\84ارÛ\8c Ø§Û\8cدارÙ\87â\80\8cسÛ\8c",
+       "userrights": "اÛ\8cØ´Ù\84دÙ\86 Ø­Ø§Ù\82Ù\84اری",
+       "userrights-lookup-user": "بÛ\8cر Ø§Û\8cØ´Ù\84دÙ\86 Ø³Ø¦Ú\86",
        "userrights-user-editname": "ایستیفاده‌چی آدی‌نیزی یازین",
        "editusergroup": "ایستیفاده‌چی قروپونو دَییشدیر",
        "editinguser": "ایستیفاده‌چی '[[User:$1|$1]]' $2 اوچون ایستیفاده‌چی حقوق‌لاری دییشدیریلیر",
        "userrights-nodatabase": "$1 وئریلنلر بازاسی يا مؤوجود دئيیل، يا دا لوکال دئيیل.",
        "userrights-changeable-col": "ديَیشدیره بیلدیگینیز قروپلار",
        "userrights-unchangeable-col": "ديَیشدیره بیلمه‌دیگینیز قروپلار",
+       "userrights-expiry-current": "$1-ده قۇرتولور",
+       "userrights-expiry-othertime": "آیری چاغ",
        "userrights-conflict": "ایستیفاده‌چی حاقلاری توققوشماسی! لوطفاً گوزله ین و دَییشدیرمه‌لرینیزی یئنی‌دن ائدین.",
        "group": "گروه:",
        "group-user": "ایستفاده‌چیلر",
        "right-override-export-depth": "ایچری باغلانتیلاری اولان صحیفه‌لری، چوخو ۵ درجه درینلیگی ایله، ایخراج ائت",
        "right-sendemail": "باشقا ایستیفاده‌چیلره ایمیل گؤندر",
        "grant-group-email": "ایمئیل گؤندر",
+       "grant-createaccount": "حساب یارات",
        "newuserlogpage": "ایشلدن یارادیلما ژورنالی",
        "newuserlogpagetext": "بۇ ایشلدن یارادماق لیستی‌دیر.",
        "rightslog": "ایشلدن حاقلاری ژورنالی",
        "unwatchthispage": "صحیفه ایزلمیی دایان‌دیر",
        "notanarticle": "مضمون صحیفه‌سی دئییل",
        "notvisiblerev": "باشقا ایستیفادی‌چی‌نین سون دییشیک‌لیگی سیلینیب",
-       "watchlist-details": "دانیشیق صفحه‌لرینی آیری سایمایاراق، {{PLURAL:$1|$1 صفحه‌نی}} ایزله‌ییرسینیز.",
+       "watchlist-details": "{{PLURAL:$1|$1 صفحه‌نی}} (دانیشیق صفحه‌لریله) ایزله‌ییرسینیز.",
        "wlheader-enotif": "ایمیل ایله بیلدیریش آچیلیب‌دیر.",
        "wlheader-showupdated": "سون گؤروشونوزدن سوْنرا ائدیلن دییشیکلیکلر '''قالین''' گؤرسدیلیب‌دیر.",
        "wlnote": "آشاغیداکی {{PLURAL:$1|بیر ديَیشیک‌لیک|<strong>$1</strong> ديَیشیک‌لیک}}  سون {{PLURAL:$2|ساعتدا|<strong>$2</strong> ساعتدا}} ائدیلمیشدیر. $3، $4",
        "whatlinkshere-hideredirs": "$1 یول‌لاندیرمالاری",
        "whatlinkshere-hidetrans": "$1 علاوه‌لری",
        "whatlinkshere-hidelinks": "$1 باغلانتیلاری",
-       "whatlinkshere-hideimages": "فایل باغلانتیلارینی $1",
+       "whatlinkshere-hideimages": "$1 فایل باغلانتی‌سی",
        "whatlinkshere-filters": "سۆزگَجلر",
        "whatlinkshere-submit": "گئت",
        "autoblockid": "اوتوماتیک باغلانما #$1",
        "tooltip-n-randompage": "بیر تصادوفی صفحه گتیر",
        "tooltip-n-help": "آنلاماق یئری",
        "tooltip-t-whatlinkshere": "بۇرا باغلانان بۆتون ویکی صفحه‌لرین لیستی",
-       "tooltip-t-recentchangeslinked": "بۇ صفحه اوْنلارا باغلانان صفحه‌لرین سوْن دَییشیکلیک‌لری",
+       "tooltip-t-recentchangeslinked": "بۇ صفحه‌دن باغلانتی‌لی صفحه‌لرین سوْن دَییشیکلیک‌لری",
        "tooltip-feed-rss": "بو صحیفه‌‌ اوچون آراس‌اس يايیمی",
        "tooltip-feed-atom": "بو صحیفه‌‌ اوچون آتوم يايیمی",
        "tooltip-t-contributions": "{{GENDER:$1|بۇ ایشلدنین}} وئردیگی دییشیکلر لیستی",
-       "tooltip-t-emailuser": "بÙ\88 Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8câ\80\8cÛ\8cه بیر ایمیل گؤندر",
+       "tooltip-t-emailuser": "بÙ\88 Ø§Û\8cØ´Ù\84دÙ\86ه بیر ایمیل گؤندر",
        "tooltip-t-info": "بو صفحه‌یه گؤره آرتیق ایطلاعات",
        "tooltip-t-upload": "فایل‌لار یوکله",
        "tooltip-t-specialpages": "بوتون اؤزل صفحه‌لرین لیستی",
        "tooltip-t-print": "بو صفحه‌‌نین چاپ ائدیلن سۆرومو",
-       "tooltip-t-permalink": "صفحه‌نین بو سۆرومونه دَییشیلمز باغلانتی",
+       "tooltip-t-permalink": "صفحه‌نین بو نۆسخه‌سینه دَییشیلمز باغلانتی",
        "tooltip-ca-nstab-main": "مقاله‌یه باخین",
        "tooltip-ca-nstab-user": "ایشلدن صفحه‌سینه باخ",
        "tooltip-ca-nstab-media": "مئدیا-فايل",
        "tooltip-ca-nstab-mediawiki": "سیستم مئساژلرینه باخ",
        "tooltip-ca-nstab-template": "شابلونا باخ",
        "tooltip-ca-nstab-help": "یاردیم صفحه‌‌سی",
-       "tooltip-ca-nstab-category": "بؤلمه صحیفه‌‌سینی گؤستر",
+       "tooltip-ca-nstab-category": "بؤلمه صفحه‌‌سینی گؤستر",
        "tooltip-minoredit": "بو دییشیگی کیچیک دییشیک کیمی قئید ائت",
        "tooltip-save": "ديَیشیکلیکلرینیزی قئيد ائدین",
        "tooltip-preview": "لوطفاً صحیفه‌نی قئید ائتمک‌دن اؤنجه، دییشیکلرینیزی سیناق گؤستریش ایله باخین!",
        "pageinfo-length": "صفحه‌‌ اوزونلوغو (بايت)",
        "pageinfo-article-id": "صفحه آی‌دی-سی",
        "pageinfo-language": "صفحه مضمونونون دیلی",
+       "pageinfo-content-model": "صفحه‌نین ایچینده‌کیلرینین دۆزولوشو",
        "pageinfo-robot-policy": "بوتلارلا ایندِکسلنیر",
        "pageinfo-robot-index": "ایجازه‌لی",
        "pageinfo-robot-noindex": "ایجازه‌سیز",
        "show-big-image": "فایلین اصلی",
        "show-big-image-preview": "سیناق گؤستریشی اؤلچوسو: $1.",
        "show-big-image-other": "آیری {{PLURAL:$2|کیفیت|کیفیتلر}}: $1.",
-       "show-big-image-size": "$1 × $2 پیکسئل",
+       "show-big-image-size": "$1 × $2 پیکسل",
        "file-info-gif-looped": "ایلملنیب",
        "file-info-gif-frames": "$1 {{PLURAL:$1|فرامئ|چرچیوه}}",
        "file-info-png-looped": "ایلملنیب",
        "version-libraries-version": "نوسخه‌",
        "version-libraries-description": "آچیقلاما",
        "version-libraries-authors": "یازارلار",
-       "redirect": "Ù\81اÛ\8cÙ\84Ø\8c Ø§Û\8cستÛ\8cÙ\81ادÙ\87â\80\8cÚ\86Û\8cØ\8c ØµÙ\81Ø­Ù\87 Û\8cا Ù\86Ù\88سخÙ\87 Ø¢Û\8câ\80\8cدÛ\8c-سÛ\8c ایله یول‌لاندیرما",
-       "redirect-summary": "بو اؤزل صحیفه، بیر فایلا (فایل آدی ایله)، صفحه‌یه (نوسخه یا صفحه آی‌دی-سی ایله) یا ایستیفاده‌چی صفحه‌سینه (ایستیفاده‌چی نومره آی‌دی-سی ایله) یول‌لاندیریر. ایشلتمک: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]]، یا [[{{#Special:Redirect}}/user/101]].",
+       "redirect": "Ù\81اÛ\8cÙ\84Ø\8c Ø§Û\8cØ´Ù\84دÙ\86Ø\8c ØµÙ\81Ø­Ù\87Ø\8c Ù\86Ù\88سخÙ\87 Û\8cا Ù\82ئÛ\8cد ایله یول‌لاندیرما",
+       "redirect-summary": "بو اؤزل صفحه، بیر فایلا (فایل آدی ایله)، صفحه‌یه (نوسخه یا صفحه آی‌دی-سی ایله)، ایشلدن صفحه‌سینه (ایشلدن نومره آی‌دی-سی ایله) یا بیر قئیده (قئیدین آی‌دی‌سی ایله) یول‌لاندیریر. ایشلتمک: [[{{#Special:Redirect}}/file/Example.jpg]]، [[{{#Special:Redirect}}/page/64308]]، [[{{#Special:Redirect}}/revision/328429]]، [[{{#Special:Redirect}}/user/101]] یا [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "گئت",
        "redirect-lookup": "آختار:",
        "redirect-value": "دَگَر:",
        "htmlform-user-not-exists": "<strong>$1</strong> یوخدور.",
        "htmlform-user-not-valid": "<strong>$1</strong> بیر دوزگون ایشلدن آدی دئییل.",
        "logentry-delete-delete": "$1، $3 صفحه‌سینی {{GENDER:$2|سیلدی}}",
-       "logentry-delete-restore": "$1، $3 صفحه‌سینی {{GENDER:$2|قایتاردی}}",
+       "logentry-delete-restore": "$1، $3 صفحه‌سینی {{GENDER:$2|قایتاردی}} ($4)",
        "logentry-delete-event": "$1، $3-ده $5 سیاهی اولایینین {{PLURAL:$5|گؤرونوشونو|گؤرونوشلرینی}} {{GENDER:$2|دَییشدیردی}}: $4",
        "logentry-delete-revision": "$1، $3 صفحه‌سینده $5 نوسخه‌نین {{PLURAL:گؤرونوشونو|گؤرونوشلرینی}} {{GENDER:$2|دَییشدیردی}}: $4",
        "logentry-delete-event-legacy": "$1، $3-ده سیاهی اولایلارینین گؤرونوشلرینی {{GENDER:$2|دَییشدیردی}}",
        "mw-widgets-dateinput-no-date": "تاریخ سئچیلمه‌ییب",
        "mw-widgets-titleinput-description-new-page": "صفحه هله‌لیک یوخدور",
        "mw-widgets-titleinput-description-redirect": "$1-ه داشی",
+       "randomrootpage": "تصادوفی آنا صفحه",
        "log-action-filter-block": "باغلانما نوعو:",
        "log-action-filter-managetags": "ایداره نوعو:",
        "log-action-filter-move": "حرکت نوعو:",
index 426e92d..2cde220 100644 (file)
        "parser-template-loop-warning": "Выяўлены цыкль у шаблёнах: [[$1]]",
        "template-loop-category": "Старонкі з цыклямі шаблёнаў",
        "template-loop-category-desc": "Старонка ўтрымлівае цыкль шаблёну, г. зн., шаблён уключае сам сябе рэкурсіўна.",
+       "template-loop-warning": "<strong>Папярэджаньне:</strong> гэтая старонка выклікае [[:$1]], які зьяўляецца прычынай цыклю шаблёнаў (бясконцы рэкурсіўны выклік).",
        "parser-template-recursion-depth-warning": "Перавышаны ліміт глыбіні рэкурсіі шаблёну ($1)",
        "language-converter-depth-warning": "Перавышанае абмежаваньне глыбіні канвэртару варыянтаў мовы ($1)",
        "node-count-exceeded-category": "Старонкі зь перавышанай колькасьцю вузлоў",
        "timezoneregion-indian": "Індыйскі акіян",
        "timezoneregion-pacific": "Ціхі акіян",
        "allowemail": "Дазволіць атрыманьне лістоў ад іншых удзельнікаў і ўдзельніц",
+       "email-blacklist-label": "Забараніць гэтым удзельнікам дасылаць мне лісты электроннай поштай:",
        "prefs-searchoptions": "Пошук",
        "prefs-namespaces": "Прасторы назваў",
        "default": "па змоўчваньні",
        "rcfilters-watchlist-markseen-button": "Пазначыць усе зьмены як прагледжаныя",
        "rcfilters-watchlist-edit-watchlist-button": "Рэдагаваць ваш сьпіс назіраньня за старонкамі",
        "rcfilters-watchlist-showupdated": "Зьмены старонак, якія вы не наведвалі пасьля гэтых зьменаў, пазначаныя <strong>тоўстым</strong> з адпаведнымі пазнакамі.",
+       "rcfilters-preference-label": "Схаваць палепшаную вэрсію апошніх зьменаў",
+       "rcfilters-preference-help": "Адкатвае рэдызайн інтэрфэйсу 2017 году і ўсе інструмэнты, дададзеныя з таго часу.",
        "rcnotefrom": "Ніжэй {{PLURAL:$5|знаходзіцца зьмена|знаходзяцца зьмены}} з <strong>$4 $3</strong> (да <strong>$1</strong> на старонку).",
        "rclistfromreset": "Скінуць выбар даты",
        "rclistfrom": "Паказаць зьмены з $2 $3",
        "uploadbtn": "Загрузіць файл",
        "reuploaddesc": "Скасаваць загрузку і вярнуцца да формы загрузкі",
        "upload-tryagain": "Даслаць зьмененае апісаньне файла",
+       "upload-tryagain-nostash": "Даслаць паўторна загружаны файл і зьмененае апісаньне",
        "uploadnologin": "Вы не ўвайшлі ў сыстэму",
        "uploadnologintext": "Вам трэба $1, каб загружаць файлы.",
        "upload_directory_missing": "Загрузачная дырэкторыя ($1) адсутнічае і ня можа быць створаная сэрвэрам.",
        "file-deleted-duplicate-notitle": "Файл, ідэнтычны гэтаму файлу, раней ужо быў выдалены, а назва файла была забароненая.\nВам трэба зьвярнуцца да некага з правамі прагляду зьвестак забароненых файлаў, каб прааналізаваць сытуацыю перад тым, як загружаць файл ізноў.",
        "uploadwarning": "Папярэджаньне",
        "uploadwarning-text": "Калі ласка, зьмяніце апісаньне файла ніжэй і паспрабуйце ізноў.",
+       "uploadwarning-text-nostash": "Калі ласка, загрузіце файл ізноў, зьмніце апісаньне ніжэй і паспрабуйце яшчэ раз.",
        "savefile": "Захаваць файл",
        "uploaddisabled": "Загрузка файлаў забароненая",
        "copyuploaddisabled": "Загрузка праз URL-адрас адключаная.",
        "listfiles_size": "Памер",
        "listfiles_description": "Апісаньне",
        "listfiles_count": "Вэрсіі",
-       "listfiles-show-all": "Уключаць старыя вэрсіі выяў",
+       "listfiles-show-all": "Уключаць старыя вэрсіі файлаў",
        "listfiles-latestversion": "Бягучая вэрсія",
        "listfiles-latestversion-yes": "Так",
        "listfiles-latestversion-no": "Не",
        "log": "Журналы падзеяў",
        "logeventslist-submit": "Паказаць",
        "all-logs-page": "Усе публічныя журналы падзеяў",
-       "alllogstext": "Сумесны паказ усіх журналаў падзеяў {{GRAMMAR:родны|{{SITENAME}}}}.\nВы можаце адфільтраваць вынікі па тыпе журналу, удзельніку ці старонцы.",
+       "alllogstext": "Сумесны паказ усіх журналаў падзеяў {{GRAMMAR:родны|{{SITENAME}}}}.\nВы можаце адфільтраваць вынікі па тыпе журналу, удзельніку (улічваецца рэгістар) ці старонцы (таксама ўлічваецца рэгістар).",
        "logempty": "Падобных запісаў у журнале няма.",
        "log-title-wildcard": "Шукаць назвы, якія пачынаюцца з гэтага тэксту",
        "showhideselectedlogentries": "Паказаць/схаваць выбраныя запісы ў журнале",
        "diff-form-revid": "Ідэнтыфікатар вэрсіі з адрозьненьнямі",
        "diff-form-submit": "Паказаць адрозьненьні",
        "permanentlink": "Сталая спасылка",
+       "permanentlink-revid": "Ідэнтыфікатар вэрсіі",
+       "permanentlink-submit": "Перайсьці да вэрсіі",
        "dberr-problems": "Прабачце! На гэтым сайце ўзьніклі тэхнічныя цяжкасьці.",
        "dberr-again": "Паспрабуйце пачакаць некалькі хвілінаў і абнавіць.",
        "dberr-info": "(Немагчыма злучыцца з базай зьвестак: $1)",
        "credentialsform-provider": "Тып уліковых зьвестак:",
        "credentialsform-account": "Назва рахунку:",
        "cannotlink-no-provider-title": "Няма рахункаў для далучэньня",
-       "cannotlink-no-provider": "Няма рахункаў для далучэньня."
+       "cannotlink-no-provider": "Няма рахункаў для далучэньня.",
+       "linkaccounts": "Далучэньне рахункаў",
+       "linkaccounts-success-text": "Рахунак быў далучаны.",
+       "linkaccounts-submit": "Далучыць рахункі",
+       "unlinkaccounts": "Адлучэньне рахункаў"
 }
index f443e19..4a1f7be 100644 (file)
        "createacct-another-realname-tip": "Истинското име е незадължително.\nВ случай, че бъде избрано да се попълни, то ще бъде използвано за да му се приписват приносите в уикито.",
        "pt-login": "Влизане",
        "pt-login-button": "Влизане",
+       "pt-login-continue-button": "Продължаване с влизането",
        "pt-createaccount": "Създаване на сметка",
        "pt-userlogout": "Излизане",
        "php-mail-error-unknown": "Неразпозната грешка във функция mail() на PHP.",
        "botpasswords-label-cancel": "Отказване",
        "botpasswords-label-delete": "Изтриване",
        "botpasswords-label-resetpassword": "Възстановяване на парола",
+       "botpasswords-bad-appid": "Името на бота „$1“ не е валидно.",
        "botpasswords-created-title": "Паролата на бота е създадена",
        "botpasswords-created-body": "Паролата на бот „$1“ на потребител „$2“ е създадена.",
        "botpasswords-updated-title": "Паролата на бота е обновена",
        "timezoneregion-indian": "Индийски океан",
        "timezoneregion-pacific": "Тихи океан",
        "allowemail": "Възможност за получаване на писма от други потребители",
+       "email-blacklist-label": "Забраняване на следните потребители да ми изпращат писма:",
        "prefs-searchoptions": "Търсене",
        "prefs-namespaces": "Именни пространства",
        "default": "по подразбиране",
        "grant-basic": "Основни права",
        "grant-viewdeleted": "Преглед на изтритите файлове и страници",
        "grant-viewmywatchlist": "Преглед на списъка ви за наблюдение",
+       "grant-viewrestrictedlogs": "Преглед на ограничените записки в дневника",
        "newuserlogpage": "Дневник на регистрациите",
        "newuserlogpagetext": "В този дневник се записват регистрациите на потребители.",
        "rightslog": "Дневник на потребителските права",
        "protectedarticle": "защити „[[$1]]“",
        "modifiedarticleprotection": "смени нивото на защита на „[[$1]]“",
        "unprotectedarticle": "свали защитата на „[[$1]]“",
-       "movedarticleprotection": "пÑ\80емеÑ\81Ñ\82ване Ð½Ð° Ð½Ð°Ñ\81Ñ\82Ñ\80ойкиÑ\82е Ð·а защита от „[[$2]]“ на „[[$1]]“",
+       "movedarticleprotection": "пÑ\80емеÑ\81Ñ\82и Ð½Ð°Ñ\81Ñ\82Ñ\80ойкиÑ\82е Ð½а защита от „[[$2]]“ на „[[$1]]“",
        "protect-title": "Смяна на нивото на защита на „$1“",
        "protect-title-notallowed": "Преглеждане нивото на защита за „$1“",
        "prot_1movedto2": "„[[$1]]“ преместена като „[[$2]]“",
        "logentry-newusers-create2": "$1 {{GENDER:$2|създаде}} потребителска сметка $3",
        "logentry-newusers-byemail": "$1 {{GENDER:$2|създаде}} потребителската сметка $3, като паролата за нея беше изпратена по е-поща",
        "logentry-newusers-autocreate": "Сметката $1 беше {{GENDER:$2|създадена}} автоматично",
+       "logentry-protect-move_prot": "$1 {{GENDER:$2|премести}} настройките на защита от $4 на $3",
        "logentry-protect-protect": "\n$1 {{GENDER:$2|защити}} $3 $4",
        "logentry-protect-protect-cascade": "$1 {{GENDER:$2|защити}} $3 $4 [каскадно]",
        "logentry-rights-rights": "$1 {{GENDER:$2|промени}} потребителската група на {{GENDER:$6|$3}} от $4 на $5",
index 6812863..f1dd8b6 100644 (file)
@@ -71,6 +71,7 @@
        "tog-watchlisthideminor": "অনুল্লেখ্য সম্পাদনাগুলো নজরতালিকায় লুকিয়ে রাখা হোক",
        "tog-watchlisthideliu": "অ্যাকাউন্টে প্রবেশকৃত ব্যবহারকারীদের সম্পাদনাগুলি নজরতালিকায় লুকিয়ে রাখা হোক",
        "tog-watchlistreloadautomatically": "প্রতিবার একটি ছাঁকনি পরিবর্তন হওয়া মাত্রই স্বয়ংক্রিয়ভাবে নজরতালিকাটি পুনঃলোড করা হোক (জাভাস্ক্রিপ্ট প্রয়োজন)",
+       "tog-watchlistunwatchlinks": "নজরতালিকার ভুক্তিতে সরাসরি দেখা/না দেখার সংযোগ যুক্ত করুন (এই কার্যকারিতা জন্য জাভাস্ক্রিপ্ট প্রয়োজন)",
        "tog-watchlisthideanons": "বেনামী ব্যবহারকারীদের সম্পাদনাগুলি নজরতালিকায় আড়ালে রাখা হোক",
        "tog-watchlisthidepatrolled": "পরীক্ষিত সম্পাদনাগুলি নজরতালিকায় লুকিয়ে রাখা হোক",
        "tog-watchlisthidecategorization": "পাতার শ্রেণীবদ্ধকরণ লুকিয়ে রাখা হোক",
        "permissionserrorstext-withaction": "আপনার $2 অনুমতি নেই, যার {{PLURAL:$1|কারণটি|কারণগুলি}} হল:",
        "contentmodelediterror": "আপনি এই পুনর্বিবেচনা সম্পাদনা করতে পারবেন না কারণ এর বিষয়বস্তু মডেল <code>$1</code>, যা বর্তমান বিষয়বস্তু মডেল <code>$2</code>-এর থেকে ভিন্ন।",
        "recreate-moveddeleted-warn": "'''সতর্কীকরণ: আপনি এমন একটি পাতা পুনরায় তৈরি করছেন যা পূর্বে অপসারণ করা হয়েছিল।'''\n\nআপনি পাতাটি সম্পাদনা চালিয়ে যাওয়া ঠিক হবে কিনা, তা বিবেচনা করুন।\nআপনার সুবিধার্থে পাতাটির অপলুপ্তি লগ এখানে দেয়া হলো:",
-       "moveddeleted-notice": "এই পাতাটি অপসারণ করা হয়েছে।\nসূত্র হিসেবে নিচে এ পাতার অবলুপ্তি লগ দেওয়া হলো।",
+       "moveddeleted-notice": "এই পাতাটি অপসারণ করা হয়েছে।\nসূত্র হিসেবে নিচে এই পাতার অপসারণ, সুরক্ষা ও স্থানান্তর লগ দেওয়া হলো।",
        "moveddeleted-notice-recent": "দুঃখিত, এই পাতাটি সাম্প্রতি অপসারিত হয়েছে (সর্বশেষ ২৪ ঘণ্টায়)।\nসূত্র হিসেবে নিচে এই পাতা অপসারণ, সুরক্ষা ও স্থানান্তর লগ দেয়া হয়েছে।",
        "log-fulllog": "সম্পূর্ণ লগ দেখুন",
        "edit-hook-aborted": "হূক দ্বারা সম্পাদনা পরিত্যক্ত হয়েছে।\nএর কোন ব্যাখ্যা নাই।",
        "duplicate-args-category-desc": "এই পাতায় টেমপ্লেট আহ্বান উপস্থিত রয়েছে যা সদৃশ আর্গুমেন্ট ব্যবহার করেছে, যেমন <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> বা <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>।",
        "expensive-parserfunction-warning": "'''সতর্ক হোন:''' এই পাতাটি অনেক বেশি পরিমাণে এক্সপেনসিভ পার্সার ফাংশন কল রয়েছে।\n\nএটি $2-এর চেয়ে কম পরিমাণ {{PLURAL:$2|কল|কল}} থাকা উচিত, যেখানে মোট কলের সংখ্যা {{PLURAL:$1|বর্তমানে $1|বর্তমানে $1}}।",
        "expensive-parserfunction-category": "অনেক বেশি পরিমাণে এক্সপেনসিভ পার্সার ফাংশন কল থাকা পাতাসমূহ",
-       "post-expand-template-inclusion-warning": "'''সতর্ক হোন:''' টেমপ্লেটের ইনক্লুড আকার অনেক বেশি।\nকিছু টেমপ্লেট সংযুক্ত করা নাও যেতে পারে।",
+       "post-expand-template-inclusion-warning": "<strong>সতর্ক হোন:</strong> টেমপ্লেটের অন্তর্ভুক্তির আকার অনেক বেশি।\nকিছু টেমপ্লেট সংযুক্ত করা নাও যেতে পারে।",
        "post-expand-template-inclusion-category": "যেসকল স্থানে টেমপ্লেট অন্তর্ভুক্তির আকার অতিক্রম করে গেছে সেই পাতাগুলো",
        "post-expand-template-argument-warning": "' ' ' সাবধান: ' ' ' এই পাতাটিতে অন্তত একটি ফর্মা যুক্তি আছে যা একটি খুব বড় বিস্তার আকার ধারণ করেছে।\nতাই এই আর্গুমেন্টটি বাদ দেওয়া হয়েছে।",
        "post-expand-template-argument-category": "বাদ ফর্মা আর্গুমেন্ট ধারণকারী পাতা",
        "rcfilters-savedqueries-new-name-label": "নাম",
        "rcfilters-savedqueries-new-name-placeholder": "ছাঁকনির উদ্দেশ্য বর্ণনা করুন",
        "rcfilters-savedqueries-apply-label": "ছাঁকনি তৈরি করুন",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "পূর্বনির্ধারিত ছাঁকনি তৈরি করুন",
        "rcfilters-savedqueries-cancel-label": "বাতিল",
        "rcfilters-savedqueries-add-new-title": "বর্তমান ছাঁকনির সেটিং সংরক্ষণ করুন",
        "rcfilters-restore-default-filters": "পূর্বনির্ধারিত ছাঁকনি পুনরুদ্ধার করুন",
        "rcfilters-filterlist-noresults": "কোনও ছাঁকনি পাওয়া যায়নি",
        "rcfilters-noresults-conflict": "কোনও ফলাফল পাওয়া যায়নি কারণ অনুসন্ধানের মাপকাঠিগুলির মধ্যে সংঘর্ষ আছে",
        "rcfilters-state-message-subset": "এই ছাঁকনিটির কোন প্রভাব নেই কারণ এর ফলাফলগুলি নিম্নোক্ত বৃহত্তর পরিধির {{PLURAL:$2|ছাঁকনিটির|ছাঁকনিগুলির}} মধ্যে অন্তর্ভুক্ত আছে (আলোকপাত করে এটিকে আলাদা করে দেখার চেষ্টা করুন): $1",
-       "rcfilters-state-message-fullcoverage": "à¦\95à§\8bন à¦¦à¦²à§\87র à¦¸à¦®à¦¸à§\8dত à¦\9bাà¦\81à¦\95নি à¦¨à¦¿à¦°à§\8dবাà¦\9aন à¦\95রা à¦\8fবà¦\82 à¦\95à§\8bন à¦\9bাà¦\81à¦\95নিà¦\87 à¦¨à¦¿à¦°à§\8dবাà¦\9aন না করা একই কথা, তাই এই ছাঁকনিটির কোন প্রভাব নেই। এই দলে অন্তর্ভুক্ত ছাঁকনিগুলি হল: $1",
+       "rcfilters-state-message-fullcoverage": "à¦\8fà¦\87 à¦¦à¦²à§\87র à¦¸à¦®à¦¸à§\8dত à¦\9bাà¦\81à¦\95নি à¦¨à¦¿à¦°à§\8dবাà¦\9aন à¦\95রা, না করা একই কথা, তাই এই ছাঁকনিটির কোন প্রভাব নেই। এই দলে অন্তর্ভুক্ত ছাঁকনিগুলি হল: $1",
        "rcfilters-filtergroup-authorship": "কার দ্বারা পরিবর্তিত",
        "rcfilters-filter-editsbyself-label": "আপনার দ্বারা পরিবর্তিত",
        "rcfilters-filter-editsbyself-description": "আপনার নিজস্ব অবদান।",
        "rcfilters-filter-watchlist-notwatched-label": "নজরতালিকাভুক্ত নয়",
        "rcfilters-filter-watchlist-notwatched-description": "আপনার নজরতালিকায় থাকা পাতাগুলি ব্যতীয় সবকিছু।",
        "rcfilters-filtergroup-watchlistactivity": "নজরতালিকার কার্যক্রম",
+       "rcfilters-filter-watchlistactivity-unseen-label": "অদেখা পরিবর্তন",
+       "rcfilters-filter-watchlistactivity-seen-label": "দেখা পরিবর্তন",
        "rcfilters-filtergroup-changetype": "পরিবর্তনের ধরন",
        "rcfilters-filter-pageedits-label": "পাতার সম্পাদনা",
        "rcfilters-filter-pageedits-description": "উইকি বিষয়বস্তু, আলোচনা, বিষয়শ্রেণীর বিবরণ... ইত্যাদিতে সম্পাদনা",
        "rcfilters-tag-prefix-namespace-inverted": "$1 <strong>:নয়</strong>",
        "rcfilters-view-advanced-filters-label": "উন্নত ছাঁকনি",
        "rcfilters-view-tags": "ট্যাগকৃত সম্পাদনা",
+       "rcfilters-view-namespaces-tooltip": "নামস্থান অনুযায়ী ফলাফল ছাঁকুন",
        "rcfilters-view-tags-tooltip": "সম্পাদনা ট্যাগ ব্যবহার করে ফলাফল ছাঁকুন",
        "rcfilters-view-return-to-default-tooltip": "মূল ছাঁকনির মেনুতে ফিরুন",
        "rcfilters-liveupdates-button": "সরাসরি হালনাগাদ",
        "rcfilters-liveupdates-button-title-on": "সরাসরি হালনাগাদ বন্ধ করুন",
+       "rcfilters-watchlist-markseen-button": "দেখা হিসাবে সব পরিবর্তন চিহ্নিত করুন",
+       "rcfilters-preference-label": "সাম্প্রতিক পরিবর্তনের উন্নত সংস্করণটি লুকান",
        "rcnotefrom": "<strong>$2</strong>টা থেকে সংঘটিত পরিবর্তনগুলি (সর্বোচ্চ <strong>$1টি</strong> দেখানো হয়েছে)।",
        "rclistfromreset": "তারিখ নির্বাচন পুনঃস্থাপন করুন",
        "rclistfrom": "$2, $3 তারিখের পর সংঘটিত নতুন পরিবর্তনগুলো দেখাও",
        "listfiles_size": "আকার",
        "listfiles_description": "বিবরণ",
        "listfiles_count": "সংস্করণ",
-       "listfiles-show-all": "à¦\9bবির পুরাতন সংস্করণ সংযোজন",
+       "listfiles-show-all": "ফাà¦\87লà§\87র পুরাতন সংস্করণ সংযোজন",
        "listfiles-latestversion": "বর্তমান সংস্করণ",
        "listfiles-latestversion-yes": "হ্যাঁ",
        "listfiles-latestversion-no": "না",
        "unwatchthispage": "নজর সরিয়ে নিন",
        "notanarticle": "বিষয়বস্তু পাতা নয়",
        "notvisiblerev": "অপর একজন ব্যবহারকারী কর্তৃক প্রণীত সর্বশেষ সংস্করণটি অপসারিত হয়েছে",
-       "watchlist-details": "à¦\86পনার à¦¨à¦\9cরতালিà¦\95াতà§\87 {{PLURAL:$1|$1à¦\9fি à¦ªà¦¾à¦¤à¦¾}} à¦\86à¦\9bà§\87 (à¦\86লাপ à¦ªà¦¾à¦¤à¦¾à¦\97à§\81লি à¦\97ণনায় à¦¨à¦¾ à¦§à¦°à§\87)।",
+       "watchlist-details": "à¦\86পনার à¦¨à¦\9cরতালিà¦\95ায় {{PLURAL:$1|$1à¦\9fি à¦ªà¦¾à¦¤à¦¾}} à¦\86à¦\9bà§\87 (à¦\86লাপ à¦ªà¦¾à¦¤à¦¾à¦¸à¦¹)।",
        "wlheader-enotif": "ইমেল বিজ্ঞপ্তি সক্রিয় করা আছে।",
        "wlheader-showupdated": "আপনার শেষ আগমনের পর থেকে যেসব পাতায় পরিবর্তন হয়েছে সেগুলি '''গাঢ়''' করে দেখানো হয়েছে।",
        "wlnote": "নিচে $3, $4 তারিখ থেকে বিগত {{PLURAL:$2|১ ঘন্টায়|<strong>$2</strong> ঘন্টায়}} সংঘটিত {{PLURAL:$1|শেষ ১টি পরিবর্তন|শেষ <strong>$1টি</strong> পরিবর্তন}} দেখানো হল।",
        "compare-title-not-exists": "আপনার কাঙ্ক্ষিত শিরোনামটি নেই।",
        "compare-revision-not-exists": "আপনার কাঙ্ক্ষিত সংস্করণটি নেই।",
        "diff-form": "পার্থক্য",
+       "diff-form-submit": "পার্থক্য দেখান",
+       "permanentlink": "স্থায়ী সংযোগ",
+       "permanentlink-revid": "সংশোধন আইডি",
        "permanentlink-submit": "এই সংশোধনে যান",
        "dberr-problems": " দুঃখিত! এই সাইটটি বর্তমানে কারীগরী অসুবিধার মুখোমুখি হয়েছে।",
        "dberr-again": "কয়েক মিনিট পর পুনরায় পরিদর্শনের চেষ্টা করুন।",
        "undelete-cantedit": "আপনি এই পাতাটি ফিরিয়ে আনতে পারবেন না কারণ আপনার এই পাতাটি সম্পাদনা করার অনুমতি নেই।",
        "undelete-cantcreate": "আপনি এই পাতাটি ফিরিয়ে আনতে পারবেন না কারণ এই নামে কোন পাতা বিদ্যমান নেই ও আপনার এই পাতাটি তৈরি করার অনুমতি নেই।",
        "pagedata-title": "পাতার উপাত্ত",
+       "pagedata-not-acceptable": "কোন মিলে যাওয়া বিন্যাস পাওয়া যায় নি। সমর্থিত MIME ধরনগুলি হল: $1",
        "pagedata-bad-title": "অপ্রযোজ্য শিরোনাম: \"$1\""
 }
index d99bf55..fafbbe9 100644 (file)
@@ -56,7 +56,8 @@
                        "Jaumeortola",
                        "Kippelboy",
                        "Syum90",
-                       "Xð"
+                       "Xð",
+                       "Abella"
                ]
        },
        "tog-underline": "Subratlla els enllaços:",
@@ -93,6 +94,7 @@
        "tog-watchlisthideminor": "Amaga les edicions menors de la llista de seguiment",
        "tog-watchlisthideliu": "Amaga a la llista les edicions d'usuaris registrats",
        "tog-watchlistreloadautomatically": "Recarrega la llista de seguiment automàticament sempre que canviï un filtre (cal JavaScript)",
+       "tog-watchlistunwatchlinks": "Afegeix enllaços directes per a seguir o deixar de seguir les entrades de la llista de seguiment (cal Javascript per a la funcionalitat d'alternar)",
        "tog-watchlisthideanons": "Amaga a la llista les edicions d'usuaris anònims",
        "tog-watchlisthidepatrolled": "Amaga edicions patrullades de la llista de seguiment",
        "tog-watchlisthidecategorization": "Amaga la categorització de les pàgines",
        "hidden-category-category": "Categories ocultes",
        "category-subcat-count": "{{PLURAL:$2|Aquesta categoria només té la següent subcategoria.|Aquesta categoria conté {{PLURAL:$1|la següent subcategoria|les següents $1 subcategories}}, d'un total de $2.}}",
        "category-subcat-count-limited": "Aquesta categoria conté {{PLURAL:$1|la següent subcategoria|les següents $1 subcategories}}.",
-       "category-article-count": "{{PLURAL:$2|Aquesta categoria només té la pàgina següent.|{{PLURAL:$1|La pàgina següent és|Les $1 pàgines següents són}} dins d’aquesta categoria, d’un total de $2.}}",
+       "category-article-count": "{{PLURAL:$2|Aquesta categoria només conté la pàgina següent.|{{PLURAL:$1|La pàgina és|Les $1 pàgines són}} dins d'aquesta categoria, d'un total de $2.}}",
        "category-article-count-limited": "{{PLURAL:$1|La següent pàgina és|Les següents $1 pàgines són}} dins la categoria actual.",
-       "category-file-count": "{{PLURAL:$2|Aquesta categoria només té el fitxer següent.|{{PLURAL:$1|El fitxer següent és|Els $1 fitxers següents són}} dins d’aquesta categoria, d’un total de $2.}}",
+       "category-file-count": "{{PLURAL:$2|Aquesta categoria només conté el fitxer següent.|{{PLURAL:$1|El fitxer és|Els $1 fitxers són}} dins d'aquesta categoria, d'un total de $2.}}",
        "category-file-count-limited": "{{PLURAL:$1|El següent fitxer és|Els següents $1 fitxers són}} dins la categoria actual.",
        "listingcontinuesabbrev": " cont.",
        "index-category": "Pàgines indexades",
        "viewhelppage": "Visualitza la pàgina d'ajuda",
        "categorypage": "Visualitza la pàgina de la categoria",
        "viewtalkpage": "Visualitza la pàgina de discussió",
-       "otherlanguages": "En altres llengües",
+       "otherlanguages": "En altres idiomes",
        "redirectedfrom": "(S'ha redirigit des de: $1)",
        "redirectpagesub": "Pàgina de redirecció",
        "redirectto": "Redirigeix a:",
        "lastmodifiedat": "La pàgina va ser modificada per darrera vegada el $1 a les $2.",
        "viewcount": "S'ha visitat aquesta pàgina {{PLURAL:$1|una vegada|$1 vegades}}.",
        "protectedpage": "Pàgina protegida",
-       "jumpto": "Dreceres ràpides:",
+       "jumpto": "Salta a:",
        "jumptonavigation": "navegació",
        "jumptosearch": "cerca",
        "view-pool-error": "Disculpeu, els servidors es troben sobrecarregats.\nMassa usuaris estan tractant d'accedir a aquesta pàgina.\nPer favor, esperau una mica abans de tornar a accedir a aquesta pàgina.\n\n$1",
        "pool-servererror": "El servei de recompte de la reserva no és disponible ($1).",
        "poolcounter-usage-error": "Error d'ús: $1",
        "aboutsite": "Quant al projecte {{SITENAME}}",
-       "aboutpage": "Project:Quant a",
+       "aboutpage": "Project:Quant al",
        "copyright": "El contingut està disponible sota la llicència $1 si no s'indica el contrari.",
        "copyrightpage": "{{ns:project}}:Drets d'autor",
        "currentevents": "Actualitat",
        "currentevents-url": "Project:Actualitat",
-       "disclaimers": "Avís general",
-       "disclaimerpage": "Project:Avís general",
+       "disclaimers": "Renúncies",
+       "disclaimerpage": "Project:Descàrrec general",
        "edithelp": "Ajuda per a l'edició",
        "helppage-top-gethelp": "Ajuda",
        "mainpage": "Pàgina principal",
        "feed-invalid": "La subscripció no és vàlida pel tipus de sindicament.",
        "feed-unavailable": "Els canals de sindicació no estan disponibles",
        "site-rss-feed": "Canal RSS $1",
-       "site-atom-feed": "Canal Atom $1",
+       "site-atom-feed": "Font Atom $1",
        "page-rss-feed": "«$1» RSS Feed",
        "page-atom-feed": "Canal Atom «$1»",
        "feed-atom": "Atom",
        "rcfilters-grouping-title": "Agrupació",
        "rcfilters-activefilters": "Filtres actius",
        "rcfilters-advancedfilters": "Filtres avançats",
+       "rcfilters-limit-shownum": "Mostra {{PLURAL:$1|el darrer canvi| els darrers $1 canvis}}",
        "rcfilters-days-title": "Darrers dies",
        "rcfilters-hours-title": "Hores recents",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|dia|dies}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|hora|hores}}",
+       "rcfilters-highlighted-filters-list": "Destacat: $1",
        "rcfilters-quickfilters": "Filtres desats",
        "rcfilters-quickfilters-placeholder-title": "Encara no s’ha desat cap enllaç",
+       "rcfilters-quickfilters-placeholder-description": "Per desar els teus filtres i usar-los  després, premeu l'icona de marcador de pàgina a l'àrea de Filtres Actius, més avall.",
        "rcfilters-savedqueries-defaultlabel": "Filtres desats",
        "rcfilters-savedqueries-rename": "Reanomena",
        "rcfilters-savedqueries-setdefault": "Defineix per defecte",
        "rcfilters-savedqueries-new-name-label": "Nom",
        "rcfilters-savedqueries-new-name-placeholder": "Descriviu el propòsit del filtre",
        "rcfilters-savedqueries-apply-label": "Crea un filtre",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Crear filtre predeterminat",
        "rcfilters-savedqueries-cancel-label": "Cancel·la",
        "rcfilters-savedqueries-add-new-title": "Desa els paràmetres de filtres actuals",
        "rcfilters-restore-default-filters": "Restaura els filtres per defecte",
        "rcfilters-clear-all-filters": "Esborra tots els filtres",
+       "rcfilters-show-new-changes": "Mostra els nous canvis",
        "rcfilters-search-placeholder": "Filtra els canvis recents (navegueu o comenceu a escriure)",
        "rcfilters-invalid-filter": "Filtre no vàlid",
        "rcfilters-empty-filter": "No hi ha cap filtre actiu. Es mostren totes les contribucions.",
        "rcfilters-filterlist-title": "Filtres",
        "rcfilters-filterlist-whatsthis": "Com funciona això?",
+       "rcfilters-filterlist-feedbacklink": "Comenta'ns què et semblen aquestes (noves) eines per filtrar",
        "rcfilters-highlightbutton-title": "Ressalta els resultats",
        "rcfilters-highlightmenu-title": "Selecciona un color",
        "rcfilters-highlightmenu-help": "Seleccioneu un color per ressaltar la propietat",
        "rcfilters-filterlist-noresults": "No s'ha trobat cap filtre",
        "rcfilters-noresults-conflict": "No s'ha trobat cap resultat perquè els criteris de cerca són en conflicte",
-       "rcfilters-state-message-fullcoverage": "Seleccionant tots els filtres en un grup és el mateix que no seleccionar-ne cap, de manera que aquest filtre no té cap efecte. El grup inclou: $1",
+       "rcfilters-state-message-subset": "Aquest filtre no te cap efecte perquè els seus resultats ja s'inclouen {{PLURAL:$2|al següent filtre|als següents filtres}} (podeu destacar els resultats per distingir-los): $1",
+       "rcfilters-state-message-fullcoverage": "Seleccionant tots els filtres en aquest grup és el mateix que no seleccionar-ne cap, de manera que aquest filtre no té cap efecte. El grup inclou: $1",
        "rcfilters-filtergroup-authorship": "Autoria de les contribucions",
        "rcfilters-filter-editsbyself-label": "Els vostres canvis",
        "rcfilters-filter-editsbyself-description": "Les vostres pròpies contribucions.",
        "rcfilters-filter-editsbyother-label": "Canvis d'altres",
        "rcfilters-filter-editsbyother-description": "Tots els canvis excepte els vostres.",
-       "rcfilters-filtergroup-userExpLevel": "Nivell d'experiència (només per a usuaris registrats)",
+       "rcfilters-filtergroup-userExpLevel": "Registre d'usuaris i experiència",
        "rcfilters-filter-user-experience-level-registered-label": "Registrats",
        "rcfilters-filter-user-experience-level-registered-description": "Editors que han iniciat sessió",
        "rcfilters-filter-user-experience-level-unregistered-label": "No registrats",
        "rcfilters-filter-user-experience-level-unregistered-description": "Editors que no han iniciat una sessió.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Novells",
-       "rcfilters-filter-user-experience-level-newcomer-description": "Menys de 10 edicions i 4 dies d'activitat.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Editors registrats amb menys de 10 edicions i 4 dies d'activitat.",
        "rcfilters-filter-user-experience-level-learner-label": "Aprenents",
-       "rcfilters-filter-user-experience-level-learner-description": "Més experiència que els 'novells' però menys que els 'usuaris experimentats'.",
+       "rcfilters-filter-user-experience-level-learner-description": "Editors registrats amb més experiència que els 'novells' però menys que els 'usuaris experimentats'.",
        "rcfilters-filter-user-experience-level-experienced-label": "Usuaris experimentats",
-       "rcfilters-filter-user-experience-level-experienced-description": "Més de 30 dies d'activitat i més de 500 edicions.",
+       "rcfilters-filter-user-experience-level-experienced-description": "Editors registrats amb més de 500 edicions i 30 dies d'activitat.",
        "rcfilters-filtergroup-automated": "Contribucions automatitzades",
        "rcfilters-filter-bots-label": "Bot",
        "rcfilters-filter-bots-description": "Modificacions fetes per eines automatitzades.",
        "rcfilters-filter-watchlist-watchednew-label": "Canvis nous a la llista de seguiment",
        "rcfilters-filter-watchlist-watchednew-description": "Canvis a les pàgines en seguiment que no heu visitat des que van ocórrer els canvis.",
        "rcfilters-filter-watchlist-notwatched-label": "No és a la llista de seguiment",
+       "rcfilters-filter-watchlist-notwatched-description": "Tot excepte canvis a les vostres pàgines seguides.",
+       "rcfilters-filtergroup-watchlistactivity": "Activitat de la llista de seguiment",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Canvis no vists",
+       "rcfilters-filter-watchlistactivity-unseen-description": "Canvis a les pàgines que no heu visitat des que van ocórrer els canvis.",
+       "rcfilters-filter-watchlistactivity-seen-label": "Canvis vists",
+       "rcfilters-filter-watchlistactivity-seen-description": "Canvis a les pàgines que heu visitat des que van ocórrer els canvis.",
        "rcfilters-filtergroup-changetype": "Tipus de canvi",
        "rcfilters-filter-pageedits-label": "Modificacions de pàgina",
        "rcfilters-filter-pageedits-description": "Modificacions al contingut del wiki, discussions, descripcions de categories…",
        "rcfilters-filter-lastrevision-description": "El canvi més recent a una pàgina.",
        "rcfilters-filter-previousrevision-label": "Revisions anteriors",
        "rcfilters-filter-excluded": "Exclòs",
+       "rcfilters-exclude-button-off": "Exclou els seleccionats",
+       "rcfilters-exclude-button-on": "Excloent els seleccionats",
+       "rcfilters-view-advanced-filters-label": "Filtres avançats",
+       "rcfilters-view-tags": "Canvis etiquetats",
+       "rcfilters-view-namespaces-tooltip": "Filtrar resultats per l'espai de noms",
+       "rcfilters-view-tags-tooltip": "Filtrar resultats usant etiquetes d'edició",
+       "rcfilters-view-return-to-default-tooltip": "Torna al menú de filtres principal",
+       "rcfilters-liveupdates-button": "Actualitzacions en viu",
+       "rcfilters-liveupdates-button-title-on": "Apaga les actualitzacions en viu",
+       "rcfilters-liveupdates-button-title-off": "Mostra els nous canvis al moment",
+       "rcfilters-watchlist-markseen-button": "Marca tots els canvis com a vistos",
+       "rcfilters-watchlist-edit-watchlist-button": "Editeu la vostra llista de pàgines seguides",
        "rcnotefrom": "A sota hi ha {{PLURAL:$5|el canvi|els canvis}} a partir de <strong>$3, $4</strong> (fins a <strong>$1</strong>).",
        "rclistfrom": "Mostra els canvis nous des de $3, $2",
        "rcshowhideminor": "$1 edicions menors",
        "recentchanges-page-removed-from-category": "[[:$1]] treta de la categoria",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]] treta de la categoria, [[Special:WhatLinksHere/$1|aquesta pàgina està inclosa en d'altres]]",
        "autochange-username": "Canvi automàtic del MediaWiki",
-       "upload": "Carregueu un fitxer",
+       "upload": "Pujar un fitxer",
        "uploadbtn": "Carrega un fitxer",
        "reuploaddesc": "Torna al formulari per apujar.",
        "upload-tryagain": "Envia la descripció del fitxer modificat",
        "tooltip-pt-login": "Us animem a registrar-vos, però no és obligatori",
        "tooltip-pt-login-private": "Cal que inicieu una sessió per a utilitzar aquest wiki",
        "tooltip-pt-logout": "Finalitza la sessió d'usuari",
-       "tooltip-pt-createaccount": "Us animem a què creeu un compte i inicieu sessió, encara que no és obligatori",
+       "tooltip-pt-createaccount": "Us animem a què creeu un compte i inicieu una sessió, encara que no és obligatori",
        "tooltip-ca-talk": "Discussió sobre el contingut d'aquesta pàgina",
        "tooltip-ca-edit": "Modifica aquesta pàgina",
        "tooltip-ca-addsection": "Comença una secció nova",
        "tooltip-search-fulltext": "Cerca aquest text a les pàgines",
        "tooltip-p-logo": "Visiteu la pàgina principal",
        "tooltip-n-mainpage": "Visiteu la pàgina principal",
-       "tooltip-n-mainpage-description": "Vegeu la pàgina principal",
-       "tooltip-n-portal": "Sobre el projecte, què podeu fer, on podeu trobar coses",
+       "tooltip-n-mainpage-description": "Visiteu la pàgina principal",
+       "tooltip-n-portal": "Sobre el projecte, què podeu fer, on trobareu les coses",
        "tooltip-n-currentevents": "Per trobar informació general sobre l'actualitat",
-       "tooltip-n-recentchanges": "Llista de canvis recents al wiki",
+       "tooltip-n-recentchanges": "Una llista dels canvis recents al wiki",
        "tooltip-n-randompage": "Carrega una pàgina a l’atzar",
-       "tooltip-n-help": "El lloc per saber més coses",
-       "tooltip-t-whatlinkshere": "Llista de totes les pàgines wiki que enllacen aquí",
+       "tooltip-n-help": "El lloc per saber més coses",
+       "tooltip-t-whatlinkshere": "Una llista de totes les pàgines wiki que enllacen amb aquesta",
        "tooltip-t-recentchangeslinked": "Canvis recents a pàgines enllaçades des d'aquesta pàgina",
        "tooltip-feed-rss": "Canal RSS d'aquesta pàgina",
        "tooltip-feed-atom": "Canal Atom d'aquesta pàgina",
        "tooltip-t-contributions": "Llista de les contribucions d'{{GENDER:$1|aquest usuari|aquesta usuària}}",
        "tooltip-t-emailuser": "Envia un correu a {{GENDER:$1|aquest usuari|aquesta usuària}}",
        "tooltip-t-info": "Més informació sobre aquesta pàgina",
-       "tooltip-t-upload": "Carregueu fitxers",
-       "tooltip-t-specialpages": "Llista de totes les pàgines especials",
+       "tooltip-t-upload": "Pujar alguns fitxers",
+       "tooltip-t-specialpages": "Llista totes les pàgines especials",
        "tooltip-t-print": "Versió per a impressió d'aquesta pàgina",
        "tooltip-t-permalink": "Enllaç permanent a aquesta versió de la pàgina",
        "tooltip-ca-nstab-main": "Vegeu el contingut de la pàgina",
index 2ae95cb..da370bb 100644 (file)
@@ -48,6 +48,7 @@
        "tog-watchlisthideminor": "Къайладаха кегийра нисдарш тергаме могӀам чура",
        "tog-watchlisthideliu": "Къайладаха бовзийтина болу декъашхойн нисдарш тергаме могӀам чура",
        "tog-watchlistreloadautomatically": "Литтарна хийцам хилча авто-карлабаккха тергаме могӀам (оьшу JavaScript)",
+       "tog-watchlistunwatchlinks": "Тергаме могӀаман тӀетоха дӀаяздарш юкъарадохуш йолу хьажоргаш (оьшу JavaScript)",
        "tog-watchlisthideanons": "Къайладаха къайлаха болу декъашхойн нисдарш тергаме могӀам чура",
        "tog-watchlisthidepatrolled": "Къайладаха хьаьжина долу нисдарш тергаме могӀам чура",
        "tog-watchlisthidecategorization": "АгӀонашна тӀе категореш тохар къайладаккха",
        "htmlform-no": "ХӀахӀа",
        "htmlform-yes": "ХӀаъ",
        "htmlform-chosen-placeholder": "Харжа кеп",
-       "htmlform-cloner-create": "ТÓ\80еÑ\82оÑ\85а ÐºÑ\85ин",
+       "htmlform-cloner-create": "Ð\9aÑ\85ин Ñ\82Ó\80еÑ\82оÑ\85а",
        "htmlform-cloner-delete": "ДӀаяккха",
        "htmlform-date-placeholder": "ШШШШ-ББ-ДД",
        "htmlform-time-placeholder": "СС:ММ:СС",
        "mw-widgets-dateinput-placeholder-day": "ШШШШ-ББ-ДД",
        "mw-widgets-dateinput-placeholder-month": "ШШШШ-ББ",
        "mw-widgets-titleinput-description-redirect": "ДӀасхьажорг $1 тӀе",
+       "mw-widgets-usersmultiselect-placeholder": "Кхин тӀетоха…",
        "date-range-from": "Терхьера:",
        "date-range-to": "Терхье:",
        "sessionprovider-generic": "$1 сесси",
index f181db7..44fc40c 100644 (file)
        "parser-template-loop-warning": "Nalezena smyčka šablon: [[$1]]",
        "template-loop-category": "Stránky se smyčkami šablon",
        "template-loop-category-desc": "Stránka obsahuje smyčku šablon, tj. šablonu, která je vložená sama do sebe.",
+       "template-loop-warning": "<strong>Upozornění:</strong> Tato stránka volá [[:$1]], což způsobuje smyčku šablon (nekonečné rekurzivní volání).",
        "parser-template-recursion-depth-warning": "Překročen limit hloubky rekurzivního vkládání šablon ($1)",
        "language-converter-depth-warning": "Překročen limit vnoření u jazykové konverze ($1)",
        "node-count-exceeded-category": "Stránky překračující počet uzlů",
        "timezoneregion-indian": "Indický oceán",
        "timezoneregion-pacific": "Tichý oceán",
        "allowemail": "Povolit e-mail od ostatních uživatelů",
+       "email-blacklist-label": "Znemožnit těmto uživatelům posílat mi e-maily:",
        "prefs-searchoptions": "Vyhledávání",
        "prefs-namespaces": "Jmenné prostory",
        "default": "implicitní",
        "rcfilters-watchlist-markseen-button": "Označit všechny změny jako zkontrolované",
        "rcfilters-watchlist-edit-watchlist-button": "Editovat seznam sledovaných stránek",
        "rcfilters-watchlist-showupdated": "Změny stránek, které jste od provedení změn nenavštívili, jsou zobrazeny <strong>tučně</strong> s vyplněnou značkou.",
+       "rcfilters-preference-label": "Skrýt vylepšenou verzi posledních změn",
+       "rcfilters-preference-help": "Zruší novou podobu rozhraní zavedenou v roce 2017 a všechny nástroje přidané od té doby.",
        "rcnotefrom": "Níže {{PLURAL:$5|je změna|jsou změny}} od <strong>$3, $4</strong> ({{PLURAL:$1|zobrazena|zobrazeny|zobrazeno}} nejvýše <strong>$1</strong>).",
        "rclistfromreset": "Obnovit výběr data",
        "rclistfrom": "Ukázat nové změny, počínaje od $2, $3",
        "uploadbtn": "Načíst soubor",
        "reuploaddesc": "Zrušit načítání a vrátit se do formuláře.",
        "upload-tryagain": "Uložit upravený popis souboru",
+       "upload-tryagain-nostash": "Odeslat znovunačtený soubor a upravený popis",
        "uploadnologin": "Nejste přihlášen(a)",
        "uploadnologintext": "Pro načtení souboru se musíte $1.",
        "upload_directory_missing": "Adresář pro nahrávání souborů ($1) chybí a webový server ho nedokáže vytvořit.",
        "file-deleted-duplicate-notitle": "Identický soubor k tomuto byl již dříve smazán a název byl utajen.\nPřed tím, než soubor znovu nahrajete, byste měli požádat někoho, kdo může prohlížet utajené soubory, aby situaci zkontroloval.",
        "uploadwarning": "Upozornění k načítání",
        "uploadwarning-text": "Prosíme, upravte popis souboru níže a zkuste to znovu.",
+       "uploadwarning-text-nostash": "Načtěte prosím soubor ještě jednou, upravte popis níže a zkuste to znovu.",
        "savefile": "Uložit soubor",
        "uploaddisabled": "Načítání souborů vypnuto.",
        "copyuploaddisabled": "Načítání souborů prostřednictvím URL je vypnuto.",
        "listfiles_size": "Velikost (bajtů)",
        "listfiles_description": "Popis",
        "listfiles_count": "Verze",
-       "listfiles-show-all": "Zahrnout staré verze obrázků",
+       "listfiles-show-all": "Zahrnout staré verze souborů",
        "listfiles-latestversion": "Aktuální verze",
        "listfiles-latestversion-yes": "Ano",
        "listfiles-latestversion-no": "Ne",
index c66fdf9..405e14f 100644 (file)
        "unwatch": "Òprzestôj ùzerac",
        "unwatchthispage": "Òprzestôj ùzerac ną starnã",
        "notanarticle": "To nie je artikel",
-       "watchlist-details": "Twòjô lësta ùzérónych starnów zamëkô w se {{PLURAL:$1|$1 pozycjã|$1 pozycje|$1 pozycjów}}, nie rechùjąc diskùsëjów.",
+       "watchlist-details": "{{PLURAL:$1|Starna je |$1 Starnë są}} na twòji lësce ùzérónych starnów (diskùsëji téż)",
        "wlheader-showupdated": "Artiklë jakczé òstałë zmienioné òd Twòji slédny wizytë są wëapratnioné <strong>pògrëbieniém</strong>",
        "wlnote": "Niżi môsz wëskrzënioné {{PLURAL:$1|slédną zmianã|<strong>$1</strong> slédnëch zmianów}} zrobioné òb {{PLURAL:$2|gòdzënã|<strong>$2</strong> gòdzënë/gòdzënów}}, rëchùjąc òd $3 dnia $4.",
        "wlshowlast": "Wëskrzëni zjinaczi z $1 gòdzënów $2 dni",
index 1f118bb..78195c8 100644 (file)
        "botpasswords-created-title": "Botkodeord oprettet",
        "botpasswords-created-body": "Robottens adgangskode for robotnavn »$1« for bruger »$2« blev oprettet.",
        "botpasswords-updated-title": "Bot kodeord opdateret",
+       "botpasswords-updated-body": "Robottens adgangskode for robotnavn »$1« for brugeren »$2« blev opdateret.",
        "botpasswords-deleted-title": "Bot kodeord slettet",
+       "botpasswords-deleted-body": "Robottens adgangskode for robotnavn »$1« for brugeren »$2« blev slettet.",
        "resetpass_forbidden": "Adgangskoder kan ikke ændres",
        "resetpass_forbidden-reason": "Adgangskoder kan ikke ændres: $1",
        "resetpass-no-info": "Du skal være logget på for at komme direkte til denne side.",
        "content-not-allowed-here": "\"$1\" indhold er ikke tilladt på siden [[$2]]",
        "editwarning-warning": "Hvis du forlader siden nu, risikerer du at miste alle ændringer, som du har lavet.\nDenne advarsel kan slås fra under \"{{int:prefs-editing}}\" i dine indstillinger.",
        "editpage-invalidcontentmodel-title": "Indholdsmodellen er ikke understøttet",
+       "editpage-invalidcontentmodel-text": "Indholdsmodellen »$1« er ikke understøttet.",
        "editpage-notsupportedcontentformat-title": "Indholdsformatet understøttes ikke",
        "editpage-notsupportedcontentformat-text": "Indholdsformatet $1 understøttes ikke af indholdsmodellen $2",
        "content-model-wikitext": "wikitekst",
        "post-expand-template-argument-warning": "Advarsel: Mindst en af skabelonparametrene på denne side fylder mere end det tilladte. Denne parameter er derfor udeladt.",
        "post-expand-template-argument-category": "Sider med udeladte skabelonparametre",
        "parser-template-loop-warning": "Skabelonløkke fundet: [[$1]]",
+       "template-loop-category": "Sider med skabelonløkker",
        "parser-template-recursion-depth-warning": "En skabelon er rekursivt inkluderet for mange gange ($1)",
        "language-converter-depth-warning": "Dybdegrænse for sprogkonvertering overskredet ($1)",
        "node-count-exceeded-category": "Sider hvor antal noder er overskredet",
        "rcfilters-savedqueries-unsetdefault": "Fravælg som grundindstilling",
        "rcfilters-savedqueries-remove": "Fjern",
        "rcfilters-savedqueries-new-name-label": "Navn",
+       "rcfilters-savedqueries-new-name-placeholder": "Beskriv formålet med filteret",
        "rcfilters-savedqueries-apply-label": "Opret filter",
        "rcfilters-savedqueries-apply-and-setdefault-label": "Opret standardfilter",
        "rcfilters-savedqueries-cancel-label": "Annullér",
        "rcfilters-invalid-filter": "Ugyldigt filter",
        "rcfilters-empty-filter": "Ingen aktive filtre. All bidrag vises.",
        "rcfilters-filterlist-title": "Filtre",
-       "rcfilters-filterlist-whatsthis": "Hvad er dette?",
-       "rcfilters-filterlist-feedbacklink": "Giv feedback på de nye (beta)filtre",
+       "rcfilters-filterlist-whatsthis": "Hvordan virker disse?",
+       "rcfilters-filterlist-feedbacklink": "Fortæl os hvad du synes om disse (nye) filtreringsværktøjer",
        "rcfilters-highlightbutton-title": "Fremhæv resultater",
        "rcfilters-highlightmenu-title": "Vælg en farve",
        "rcfilters-highlightmenu-help": "Vælg en farve for at fremhæve denne egenskab",
        "rcfilters-filterlist-noresults": "Ingen filtre fundet",
        "rcfilters-noresults-conflict": "Ingen resultater fundet fordi søgekriterierne er i konflikt",
+       "rcfilters-state-message-subset": "Dette filter har ingen effekt fordi dets resultater inkluderes i følgende, bredere {{PLURAL:$2|filter|filtre}} (prøv at fremhæve for at skille det ud): $1",
+       "rcfilters-state-message-fullcoverage": "Valg af alle filtre i denne gruppe er det samme som ikke at vælge nogen, så dette filter har ingen effekt. Gruppe inkluderer: $1",
        "rcfilters-filtergroup-authorship": "Bidragets forfatter",
        "rcfilters-filter-editsbyself-label": "Ændringer af dig",
        "rcfilters-filter-editsbyself-description": "Dine egne bidrag.",
        "rcfilters-filter-editsbyother-label": "Ændringer af andre",
        "rcfilters-filter-editsbyother-description": "Alle ændringer undtagen din egen.",
-       "rcfilters-filtergroup-userExpLevel": "Erfaringsniveau (kun for registrerede brugere)",
+       "rcfilters-filtergroup-userExpLevel": "Brugerregistrering og -erfaring",
        "rcfilters-filter-user-experience-level-registered-label": "Registrerede",
        "rcfilters-filter-user-experience-level-registered-description": "Indloggede brugere",
        "rcfilters-filter-user-experience-level-unregistered-label": "Uregistrerede",
        "rcfilters-view-advanced-filters-label": "Avancerede filtre",
        "rcfilters-view-tags": "Mærkede redigeringer",
        "rcfilters-view-namespaces-tooltip": "Filtrer resultater efter navnerum",
+       "rcfilters-watchlist-edit-watchlist-button": "Rediger din liste med overvågede sider",
+       "rcfilters-preference-label": "Skjul den forbedrede verson af Seneste ændringer",
        "rcnotefrom": "Nedenfor er op til '''$1''' {{PLURAL:$5|ændring|ændringer}} siden '''$2''' vist.",
        "rclistfromreset": "Nulstil datovalg",
        "rclistfrom": "Vis nye ændringer startende fra den $3 kl. $2",
        "pageswithprop-legend": "Sider med en sideegenskab",
        "pageswithprop-text": "Denne side viser en liste over sider, der har en bestemt sideegenskab.",
        "pageswithprop-prop": "Egenskabsnavn:",
+       "pageswithprop-reverse": "Sorter i omvendt rækkefølge",
        "pageswithprop-sortbyvalue": "Sorter efter egenskabsværdi",
        "pageswithprop-submit": "Vis",
        "pageswithprop-prophidden-long": "lang tekst værdi for egenskaben skjult ($1)",
        "apisandbox-submit": "Lav forespørgsel",
        "apisandbox-reset": "Ryd",
        "apisandbox-retry": "Forsøg igen",
+       "apisandbox-no-parameters": "Dette API-modul har ingen parametre.",
+       "apisandbox-helpurls": "Henvisninger til hjælp",
        "apisandbox-examples": "Eksempler",
        "apisandbox-dynamic-parameters": "Yderligere parametre",
        "apisandbox-dynamic-parameters-add-label": "Tilføj parameter:",
        "apisandbox-results": "Resultater",
        "apisandbox-sending-request": "Sender API-forespørgsel ...",
        "apisandbox-loading-results": "Modtager API-resultater ...",
+       "apisandbox-request-format-url-label": "Adresseforepørgselsstreng",
        "apisandbox-request-url-label": "Forespurgt URL:",
        "apisandbox-request-time": "Forespørgselstid: {{PLURAL:$1|$1 ms}}",
        "apisandbox-alert-page": "Felter på denne side er ugyldige.",
        "scarytranscludefailed-httpstatus": "[Hentning af skabelon for $1 mislykkedes: HTTP $2]",
        "scarytranscludetoolong": "[URL'en er for lang]",
        "deletedwhileediting": "'''Advarsel:''' Denne side er blevet slettet efter du begyndte at redigere den!\nKig i [{{fullurl:Special:Log|type=delete&page=}}{{FULLPAGENAMEE}} slette-loggen],\nhvorfor siden blev slettet. Hvis du gemmer siden bliver den oprettet igen.",
-       "confirmrecreate": "Brugeren [[User:$1|$1]] ([[User talk:$1|Diskussion]]) har slettet denne side, efter at du begyndte at redigere den. Begrundelsen lyder:\n: ''$2''\nBekræft venligst, at du virkelig vil oprette denne side igen.",
-       "confirmrecreate-noreason": "[[User:$1|$1]] ([[User talk:$1|diskussion]]) har slettet denne side, efter du begyndte at redigere. Bekræft venligst, at du gerne vil genoprette siden.",
+       "confirmrecreate": "Brugeren [[User:$1|$1]] ([[User talk:$1|Diskussion]]) har {{GENDER:$1|slettet}} denne side, efter at du begyndte at redigere den. Begrundelsen lyder:\n: <em>$2</em>\nBekræft venligst, at du virkelig vil oprette denne side igen.",
+       "confirmrecreate-noreason": "[[User:$1|$1]] ([[User talk:$1|diskussion]]) har {{GENDER:$1|slettet}} denne side, efter du begyndte at redigere. Bekræft venligst, at du gerne vil genoprette siden.",
        "recreate": "Genopret",
+       "confirm-purge-title": "Fjern denne side",
        "confirm_purge_button": "O.k.",
        "confirm-purge-top": "Slet denne side fra serverens mellemlager (''cache'')?",
        "confirm-purge-bottom": "Rensning af en side sletter mellemlageret og fremtvinger den nyeste version.",
        "confirm-unwatch-button": "OK",
        "confirm-unwatch-top": "Fjern denne side fra din overvågningsliste?",
        "confirm-rollback-button": "OK",
+       "confirm-rollback-top": "Omgør redigering på denne side?",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← forrige side",
        "imgmultipagenext": "næste side →",
        "version-ext-colheader-credits": "Forfattere",
        "version-license-title": "Licens for $1",
        "version-license-not-found": "Ingen detaljerede licensoplysninger blev fundet for denne udvidelse.",
+       "version-credits-not-found": "Ingen detaljeret information om bidragyderen blev fundet for denne udvidelse.",
        "version-poweredby-credits": "Denne wiki er drevet af '''[https://www.mediawiki.org/ MediaWiki]''', copyright © 2001-$1 $2.",
        "version-poweredby-others": "andre",
        "version-poweredby-translators": "translatewiki.net oversættere",
        "tags-activate": "aktiver",
        "tags-deactivate": "deaktiver",
        "tags-hitcount": "{{PLURAL:$1|en ændring|$1 ændringer}}",
+       "tags-create-heading": "Opret et nyt mærke",
+       "tags-create-explanation": "Som standard vil nye mærker blive gjort tilgængelige for brugere og robotter.",
        "tags-create-tag-name": "Mærkenavn:",
        "tags-create-reason": "Årsag:",
        "tags-create-submit": "Opret",
        "tags-create-no-name": "Du skal angive et mærkenavn.",
+       "tags-create-invalid-chars": "Mærkenavne må ikke indeholde (<code>,</code>), lodrette streger (<code>|</code>), eller forudstillet skråstreg (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Mærkenavn må ikke indeholde tegn, som ikke kan bruges i sidetitler.",
        "tags-create-already-exists": "Mærket »$1« findes allerede.",
        "tags-delete-title": "Slet mærke",
        "tags-delete-explanation-initial": "Du er ved at slette mærket »$1« fra databasen.",
index e0a83eb..972a1ff 100644 (file)
        "parser-template-loop-warning": "Vorlagenschleife entdeckt: [[$1]]",
        "template-loop-category": "Seiten mit Vorlagenschleifen",
        "template-loop-category-desc": "Die Seite enthält eine Vorlagenschleife, z.&nbsp;B. eine Vorlage, die sich selbst rekursiv aufruft.",
+       "template-loop-warning": "<strong>Warnung:</strong> Diese Seite ruft [[:$1]] auf, die eine Vorlagenschleife verursacht (ein unendlicher rekursiver Aufruf).",
        "parser-template-recursion-depth-warning": "Vorlagenrekursionstiefengrenze überschritten ($1)",
        "language-converter-depth-warning": "Sprachkonvertertiefenlimit überschritten ($1)",
        "node-count-exceeded-category": "Seiten, die die Knotenanzahl überschritten haben",
        "timezoneregion-indian": "Indischer Ozean",
        "timezoneregion-pacific": "Pazifischer Ozean",
        "allowemail": "E-Mail-Empfang von anderen Benutzern ermöglichen",
+       "email-blacklist-label": "Diesen Benutzern das Versenden von E-Mails an mich verbieten:",
        "prefs-searchoptions": "Suche",
        "prefs-namespaces": "Namensräume",
        "default": "Voreinstellung",
        "prefs-editor": "Bearbeitungsprogramm",
        "prefs-preview": "Vorschau",
        "prefs-advancedrc": "Erweiterte Optionen",
+       "prefs-opt-out": "Von den Verbesserungen abmelden",
        "prefs-advancedrendering": "Erweiterte Optionen",
        "prefs-advancedsearchoptions": "Erweiterte Optionen",
        "prefs-advancedwatchlist": "Erweiterte Optionen",
        "rcfilters-restore-default-filters": "Standardfilter wiederherstellen",
        "rcfilters-clear-all-filters": "Alle Filter löschen",
        "rcfilters-show-new-changes": "Neueste Änderungen ansehen",
-       "rcfilters-search-placeholder": "Letzte Änderungen filtern (durchsuchen oder beginne mit der Eingabe)",
+       "rcfilters-search-placeholder": "Hauptfiltermenü",
        "rcfilters-invalid-filter": "Ungültiger Filter",
        "rcfilters-empty-filter": "Keine aktiven Filter. Es werden alle Beiträge angezeigt.",
        "rcfilters-filterlist-title": "Filter",
        "rcfilters-watchlist-markseen-button": "Alle Änderungen als gesehen markieren",
        "rcfilters-watchlist-edit-watchlist-button": "Deine Liste der beobachteten Seiten bearbeiten",
        "rcfilters-watchlist-showupdated": "Änderungen an Seiten, die du seit ihrem Auftreten nicht besucht hast, sind <strong>fett</strong> markiert.",
+       "rcfilters-preference-label": "Die verbesserte Version der Letzten Änderungen ausblenden",
+       "rcfilters-preference-help": "Macht die Neugestaltung der Oberfläche aus dem Jahr 2017 und alle seitdem hinzugefügten Werkzeuge wieder rückgängig.",
        "rcnotefrom": "Angezeigt {{PLURAL:$5|wird die Änderung|werden die Änderungen}} seit <strong>$3, $4</strong> (max. <strong>$1</strong> Einträge).",
        "rclistfromreset": "Datumsauswahl zurücksetzen",
        "rclistfrom": "Nur Änderungen seit $3, $2 Uhr zeigen.",
        "uploadbtn": "Datei hochladen",
        "reuploaddesc": "Abbrechen und zurück zur Hochladen-Seite",
        "upload-tryagain": "Geänderte Dateibeschreibung abschicken",
+       "upload-tryagain-nostash": "Erneut hochgeladene Datei und veränderte Beschreibung übermitteln",
        "uploadnologin": "Nicht angemeldet",
        "uploadnologintext": "Du musst dich $1, um Dateien hochladen zu können.",
        "upload_directory_missing": "Das Upload-Verzeichnis ($1) fehlt und konnte durch den Webserver auch nicht erstellt werden.",
        "file-deleted-duplicate-notitle": "Eine identische Datei wurde kürzlich gelöscht und der Titel wurde unterdrückt.\nDu solltest jemanden fragen, der die Möglichkeit hat, die unterdrückten Dateidaten anzusehen, um die Situation vor dem erneuten Hochladen zu überprüfen.",
        "uploadwarning": "Warnung",
        "uploadwarning-text": "Bitte ändere unten die Dateibeschreibung und versuche es erneut.",
+       "uploadwarning-text-nostash": "Bitte lade die Datei erneut hoch, ändere unten die Beschreibung und versuche es erneut.",
        "savefile": "Datei speichern",
        "uploaddisabled": "Hochladen deaktiviert",
        "copyuploaddisabled": "Das Hochladen von URLs ist deaktiviert",
        "listfiles_size": "Größe",
        "listfiles_description": "Beschreibung",
        "listfiles_count": "Versionen",
-       "listfiles-show-all": "Alte Bildversionen einschließen",
+       "listfiles-show-all": "Alte Dateiversionen einschließen",
        "listfiles-latestversion": "Aktuelle Version",
        "listfiles-latestversion-yes": "Ja",
        "listfiles-latestversion-no": "Nein",
index 9994f62..cfbe766 100644 (file)
        "anontalk": "Werênayış",
        "navigation": "Pusula",
        "and": "&#32;u",
-       "qbfind": "Bıvin",
-       "qbbrowse": "Çım ra viyarne",
-       "qbedit": "Bıvırne",
-       "qbpageoptions": "Na perrer",
-       "qbmyoptions": "Perrê mı",
        "faq": "PVP",
-       "faqpage": "Project: PVP",
        "actions": "Hereketi",
        "namespaces": "Heruna naman",
        "variants": "Varyanti",
        "edit-local": "Şınasnayışê lokali bıvurne",
        "create": "Vıraze",
        "create-local": "Şınasnayışê lokali cı ke",
-       "editthispage": "Na perrer bıvurne",
-       "create-this-page": "Na perer bıvıraz",
        "delete": "Bestern",
-       "deletethispage": "Na perrer bestern",
-       "undeletethispage": "Na perer mebesterne",
        "undelete_short": "{{PLURAL:$1|Yew vırnayışi|$1 Vırnayışan}} mestere",
        "viewdeleted_short": "{{PLURAL:$1|Jew vurnayış esternayi|$1 Vurnayışanê esternayan}} bımotne",
        "protect": "Bıstarnê",
        "protect_change": "bıvırne",
-       "protectthispage": "Ena perre şeveknê",
        "unprotect": "Starnayışi bıvurne",
-       "unprotectthispage": "Şeveknayışê ena perre bıvırne",
        "newpage": "Perra newi",
-       "talkpage": "Na per dı vatan kew",
        "talkpagelinktext": "Mesac",
        "specialpage": "Perra xısusiye",
        "personaltools": "Hacetê şexsiy",
-       "articlepage": "Pera zerreki bıvin",
        "talk": "Werênayış",
        "views": "Asayışi",
        "toolbox": "Haceti",
        "tool-link-userrights": "Grubanê {{GENDER:$1|karberi}} bıvırnë",
        "tool-link-userrights-readonly": "Grubanê {{GENDER:$1|karberi}} bıvin",
        "tool-link-emailuser": "E-posta ya në {{GENDER:$1|karberi}}",
-       "userpage": "Perra karberi bıvin",
-       "projectpage": "Perra proji bıvin",
        "imagepage": "Pera dosye bımotné",
        "mediawikipage": "Pera mesaji bımotné",
        "templatepage": "Pera şabloni bımotné",
        "movepage-page-moved": "pelê $1i kırışiya pelê $2i.",
        "movepage-page-unmoved": "pelê $1i nêkırışiyeno sernameyê $2i.",
        "movepage-max-pages": "tewr ziyed $1 {{PLURAL:$1|peli|peli}} kırışiya u hıni ziyedê ıney otomotikmen nêkırışiyeno.",
-       "movelogpage": "Qeydê wegrotışi",
+       "movelogpage": "Qeydê berdışi",
        "movelogpagetext": "Cêr de listê da kırşiyayışanê perran pêrıne esta.",
        "movesubpage": "{{PLURAL:$1|Subpage|pelê bınıni}}",
        "movesubpagetext": "{{PLURAL:$1|pelê bınıni yê|pelê bınıni yê}} no $1 peli cer de yo.",
        "fileduplicatesearch-noresults": "Ebe namey \"$1\" ra dosya nêdiyayê.",
        "specialpages": "Perrê xısusiy",
        "specialpages-note-top": "Kıtabek",
-       "specialpages-note": "* Pelê xasê normali.\n* <span class=\"mw-specialpagerestricted\">Pelê xasê nımıtey.</span>",
        "specialpages-group-maintenance": "Raporê pawıtışi",
        "specialpages-group-other": "Pelê xısusiyê bini",
        "specialpages-group-login": "Dekew / hesab vıraz",
        "compare-invalid-title": "Sernameyo ke şımayê vanê ravêrde niyo.",
        "compare-title-not-exists": "Sernameyo ke şımayê vanê mewcud niyo.",
        "compare-revision-not-exists": "Revizyono ke şımaye vanê mewcud niyo.",
+       "diff-form": "yew '''form'''",
        "dberr-problems": "Mayê muxulêm! Ena sita dı newke xırabiya teknik esta.",
        "dberr-again": "Dı-rê deqiqeyi vınde û heni bar ke.",
        "dberr-info": "(Erzmelumati ra xızmetkari nêreseno: $1)",
index 4b01132..47e6205 100644 (file)
        "parser-template-loop-warning": "Template loop detected: [[$1]]",
        "template-loop-category": "Pages with template loops",
        "template-loop-category-desc": "The page contains a template loop, ie. a template which calls itself recursively.",
+       "template-loop-warning": "<strong>Warning:</strong> This page calls [[:$1]] which causes a template loop (an infinite recursive call).",
        "parser-template-recursion-depth-warning": "Template recursion depth limit exceeded ($1)",
        "language-converter-depth-warning": "Language converter depth limit exceeded ($1)",
        "node-count-exceeded-category": "Pages where node count is exceeded",
        "timezoneregion-indian": "Indian Ocean",
        "timezoneregion-pacific": "Pacific Ocean",
        "allowemail": "Enable email from other users",
+       "email-blacklist-label": "Prohibit these users from sending emails to me:",
        "prefs-searchoptions": "Search",
        "prefs-namespaces": "Namespaces",
        "default": "default",
        "prefs-editor": "Editor",
        "prefs-preview": "Preview",
        "prefs-advancedrc": "Advanced options",
+       "prefs-opt-out": "Opt out of improvements",
        "prefs-advancedrendering": "Advanced options",
        "prefs-advancedsearchoptions": "Advanced options",
        "prefs-advancedwatchlist": "Advanced options",
        "rcfilters-watchlist-markseen-button": "Mark all changes as seen",
        "rcfilters-watchlist-edit-watchlist-button": "Edit your list of watched pages",
        "rcfilters-watchlist-showupdated": "Changes to pages you haven't visited since the changes occurred are in <strong>bold</strong>, with solid markers.",
+       "rcfilters-preference-label": "Hide the improved version of Recent Changes",
+       "rcfilters-preference-help": "Rolls back the 2017 interface redesign and all tools added then and since.",
        "rcnotefrom": "Below {{PLURAL:$5|is the change|are the changes}} since <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfromreset": "Reset date selection",
        "rclistfrom": "Show new changes starting from $2, $3",
        "uploadbtn": "Upload file",
        "reuploaddesc": "Cancel upload and return to the upload form",
        "upload-tryagain": "Submit modified file description",
+       "upload-tryagain-nostash": "Submit re-uploaded file and modified description",
        "uploadnologin": "Not logged in",
        "uploadnologintext": "Please $1 to upload files.",
        "upload_directory_missing": "The upload directory ($1) is missing and could not be created by the webserver.",
        "file-deleted-duplicate-notitle": "A file identical to this file has previously been deleted, and the title has been suppressed.\nYou should ask someone with the ability to view suppressed file data to review the situation before proceeding to re-upload it.",
        "uploadwarning": "Upload warning",
        "uploadwarning-text": "Please modify the file description below and try again.",
+       "uploadwarning-text-nostash": "Please re-upload the file, modify the description below and try again.",
        "savefile": "Save file",
        "uploadedimage": "uploaded \"[[$1]]\"",
        "overwroteimage": "uploaded a new version of \"[[$1]]\"",
        "listfiles_size": "Size",
        "listfiles_description": "Description",
        "listfiles_count": "Versions",
-       "listfiles-show-all": "Include old versions of images",
+       "listfiles-show-all": "Include old versions of files",
        "listfiles-latestversion": "Current version",
        "listfiles-latestversion-yes": "Yes",
        "listfiles-latestversion-no": "No",
index 2ccddbf..da6b360 100644 (file)
        "rcfilters-empty-filter": "Aktiivsed filtrid puuduvad. Näidatakse kogu kaastööd.",
        "rcfilters-filterlist-title": "Filtrid",
        "rcfilters-filterlist-whatsthis": "Kuidas see töötab?",
-       "rcfilters-filterlist-feedbacklink": "Anna uute filtrite beetaversiooni kohta tagasisidet",
+       "rcfilters-filterlist-feedbacklink": "Ütle meile, mida arvad neist uutest filtririistadest.",
        "rcfilters-highlightbutton-title": "Tulemuste esiletõst",
        "rcfilters-highlightmenu-title": "Vali värvus",
        "rcfilters-highlightmenu-help": "Vali värvus, et see atribuut esile tõsta",
        "rcfilters-liveupdates-button-title-on": "Lülita reaalajas uuendamine välja",
        "rcfilters-liveupdates-button-title-off": "Näita uusi muudatusi kohe nende tegemise järel",
        "rcfilters-watchlist-markseen-button": "Märgi kõik muudatused nähtuks",
+       "rcfilters-watchlist-edit-watchlist-button": "Muuda jälgimisloendit",
+       "rcfilters-watchlist-showupdated": "Muudatused lehekülgedel, mida sa pole pärast muudatuste tegemist külastanud, on <strong>rasvases</strong> kirjas ja tähistatud täidetud punktiga.",
        "rcnotefrom": "Allpool on toodud {{PLURAL:$5|muudatus|muudatused}} alates: <strong>$3, kell $4</strong> (näidatakse kuni <strong>$1</strong> muudatust)",
        "rclistfromreset": "Lähtesta kuupäeva valik",
        "rclistfrom": "Näita muudatusi alates: $3, kell $2",
        "sp-contributions-newonly": "Näita ainult uute lehekülgedega alustamist",
        "sp-contributions-hideminor": "Peida pisimuudatused",
        "sp-contributions-submit": "Otsi",
+       "sp-contributions-outofrange": "Ei õnnestu näidata ühtegi tulemust. Päritud IP-aadressivahemik on suurem kui CIDR-vahemiku piirang /$1.",
        "whatlinkshere": "Lingid siia",
        "whatlinkshere-title": "Leheküljed, mis viitavad lehele \"$1\"",
        "whatlinkshere-page": "Lehekülg:",
index d376427..8a23aaf 100644 (file)
        "parser-template-loop-warning": "حلقه در الگو پیدا شد: [[$1]]",
        "template-loop-category": "صفحه‌های دارای حلقه در الگو",
        "template-loop-category-desc": "صفحه دارای حلقه در الگو، مثلا الگویی که از خودش درون خودش استفاده‌کرده‌است.",
+       "template-loop-warning": "<strong>هشدار:</strong> این صفحه [[:$1]] را صدا می‌کند که باعث می‌شود در حلقه بسته فراخوانی بیفتد (فراخوانی بی‌پایان)",
        "parser-template-recursion-depth-warning": "محدودیت عمق بازگشت الگو رد شد ($1)",
        "language-converter-depth-warning": "محدودیت عمق مبدل زبانی رد شد ($1)",
        "node-count-exceeded-category": "صفحه‌هایی که از حداکثر تعداد گره تجاوز کرده‌اند",
        "timezoneregion-indian": "اقیانوس هند",
        "timezoneregion-pacific": "اقیانوس آرام",
        "allowemail": "دریافت ایمیل از دیگر کاربران ممکن باشد",
+       "email-blacklist-label": "این کاربران را از فرستادن رایانامه به من منع کن:",
        "prefs-searchoptions": "جستجو",
        "prefs-namespaces": "فضاهای نام",
        "default": "پیش‌فرض",
        "rcfilters-filter-watchlistactivity-unseen-label": "تغییرات دیده نشده",
        "rcfilters-filter-watchlistactivity-unseen-description": "تغییرات در صفحاتی که شما تغییرات رخ داده در آنها را مشاهده نکردید.",
        "rcfilters-filter-watchlistactivity-seen-label": "تغییرات دیده‌شده",
+       "rcfilters-filter-watchlistactivity-seen-description": "تغییرات صفحاتی که شما بازدید کردید از زمانی که تغییرات اعمال شده‌است.",
        "rcfilters-filtergroup-changetype": "نوع تغییرات",
        "rcfilters-filter-pageedits-label": "ویرایش‌های صفحه",
        "rcfilters-filter-pageedits-description": "ویرایش‌های محتوای ویکی، بحث‌ها، توضیحات رده...",
        "rcfilters-liveupdates-button-title-off": "نمایش تغییرات جدید همچنان که رخ می‌دهند",
        "rcfilters-watchlist-markseen-button": "نشانه‌گذاری تمام تغییرات به‌عنوان خوانده‌شده",
        "rcfilters-watchlist-edit-watchlist-button": "ویرایش فهرست صفحه‌های پی‌گیری‌هایتان",
+       "rcfilters-watchlist-showupdated": "تغییرات صفحاتی که شما بازدید نکردید از زمانی که تغییرات رخ داده به صورت <strong>پررنگ</strong>، با نشانگر توپر.",
+       "rcfilters-preference-label": "مخفی کردن نسخه بهبود یافته تغییرات اخیر",
+       "rcfilters-preference-help": "تغییرات رابط کاربری که در سال ۲۰۱۷ اضافه شده است را بر می‌گرداند.",
        "rcnotefrom": "در زیر تغییرات از <strong>$3, $4</strong> (تا <strong>$1</strong> {{PLURAL:$5|نشان داده شده‌است|نشان داده شده‌اند}}).",
        "rclistfromreset": "از نو کردن انتخاب تاریخ",
        "rclistfrom": "نمایش تغییرات تازه با شروع از $3 $2",
        "uploadbtn": "بارگذاری پرونده",
        "reuploaddesc": "بازگشت به فرم بارگذاری",
        "upload-tryagain": "ارسال توضیحات تغییر یافته پرونده",
+       "upload-tryagain-nostash": "فرستادن پرونده دوباره بارگذاری شده و توضیحات تغییر یافته",
        "uploadnologin": "به سامانه وارد نشده‌اید",
        "uploadnologintext": "برای بارگذاری پرونده باید $1.",
        "upload_directory_missing": "شاخهٔ بارگذاری ($1) وجود ندارد و قابل ایجاد نیست.",
        "file-deleted-duplicate-notitle": "یک پرونده یکسان بااین پرونده قبلاً حذف شده است و عنوان متوقف شده‌است.\nشما باید از کسی که دسترسی مشاهدهٔ پرونده متوقف شده را دارد، درخواست کنید تا شرایط را قبل از بارگذاری مجدد بررسی کند.",
        "uploadwarning": "هشدار بارگذاری",
        "uploadwarning-text": "لطفاً توضیحات پرونده را در زیر تغییر دهید و دوباره تلاش کنید.",
+       "uploadwarning-text-nostash": "لطفا پرونده را دوباره بارگذاری کنید، توضیحات را تغییر دهید و دوباره سعی کنید.",
        "savefile": "ذخیرهٔ پرونده",
        "uploaddisabled": "بارگذاری غیرفعال است.",
        "copyuploaddisabled": "بارگذاری از طریق نشانی اینترنتی غیرفعال است.",
        "listfiles_size": "اندازه",
        "listfiles_description": "توضیح",
        "listfiles_count": "نسخه‌ها",
-       "listfiles-show-all": "شامل نسخه‌های قدیمی عکس‌ها",
+       "listfiles-show-all": "شامل نسخه‌های قدیمی پرونده‌ها",
        "listfiles-latestversion": "نسخهٔ فعلی",
        "listfiles-latestversion-yes": "بله",
        "listfiles-latestversion-no": "خیر",
        "sp-contributions-newonly": "فقط نمایش ویرایش‌هایی که ایجاد صفحه هستند",
        "sp-contributions-hideminor": "پنهان کردن ویرایش‌های جزئی",
        "sp-contributions-submit": "جستجو",
+       "sp-contributions-outofrange": "قادر به نمایش نتیجه‌ای نیست. محدوده IP درخواست شده بزرگتر از حد CIDR /$1 است.",
        "whatlinkshere": "پیوندها به این صفحه",
        "whatlinkshere-title": "صفحه‌هایی که به «$1» پیوند دارند",
        "whatlinkshere-page": "صفحه:",
index 3dcb491..e380f0f 100644 (file)
        "rcfilters-empty-filter": "Ei aktiivisia suodattimia. Kaikki muutokset näytetään.",
        "rcfilters-filterlist-title": "Suodattimet",
        "rcfilters-filterlist-whatsthis": "Miten nämä toimivat?",
-       "rcfilters-filterlist-feedbacklink": "Anna palautetta uusista (beta) suodattimista",
+       "rcfilters-filterlist-feedbacklink": "Kerro mielipiteesi (uusista) suodattimista",
        "rcfilters-highlightbutton-title": "Korosta tulokset",
        "rcfilters-highlightmenu-title": "Valitse väri",
        "rcfilters-highlightmenu-help": "Valitse korostusväri tälle ominaisuudelle",
        "rcfilters-filter-lastrevision-label": "Viimeisin versio",
        "rcfilters-filter-lastrevision-description": "Vain viimeisin muutos sivulle.",
        "rcfilters-filter-previousrevision-label": "Ei viimeisin muutos",
+       "rcfilters-filter-excluded": "Poissuljettu",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:ei</strong> $1",
+       "rcfilters-exclude-button-off": "Poissulje valitut",
+       "rcfilters-exclude-button-on": "Poissuljetaan valitut",
        "rcfilters-view-advanced-filters-label": "Kehittyneet suodattimet",
        "rcfilters-view-namespaces-tooltip": "Suodata tuloksia nimiavaruuden mukaan",
        "rcnotefrom": "Alla ovat muutokset <strong>$3, $4</strong> lähtien. (Enintään <strong>$1</strong> näytetään.)",
        "listfiles_size": "Koko",
        "listfiles_description": "Kuvaus",
        "listfiles_count": "Versioita",
-       "listfiles-show-all": "Näytä myös kuvien vanhemmat versiot",
+       "listfiles-show-all": "Näytä myös tiedostojen vanhemmat versiot",
        "listfiles-latestversion": "Uusin versio",
        "listfiles-latestversion-yes": "Kyllä",
        "listfiles-latestversion-no": "Ei",
        "tags-create-reason": "Syy:",
        "tags-create-submit": "Luo",
        "tags-create-no-name": "Sinun täytyy antaa merkkaukselle nimi.",
-       "tags-create-invalid-chars": "Merkkausten nimissä ei saa olla pilkkuja (<code>,</code>) tai kauttaviivoja (<code>/</code>).",
+       "tags-create-invalid-chars": "Merkkausten nimissä ei saa olla pilkkuja (<code>,</code>), putkia (<code>|</code>) tai kauttaviivoja (<code>/</code>).",
        "tags-create-invalid-title-chars": "Merkkausten nimissä ei saa olla sellaisia merkkejä, joita ei voida käyttää sivujen nimissä.",
        "tags-create-already-exists": "Merkkaus \"$1\" on jo olemassa.",
        "tags-create-warnings-above": "{{PLURAL:$2|Seuraava varoitus|Seuraavat varoitukset}} ilmenivät, kun yritettiin luoda merkkausta \"$1\":",
index 29ad4a4..d0db1c0 100644 (file)
        "returnto": "Revenir à la page $1.",
        "tagline": "De {{SITENAME}}",
        "help": "Aide",
-       "search": "Chercher",
+       "search": "Rechercher",
        "search-ignored-headings": " #<!-- ne pas modifier cette ligne --><pre>\n# Titres des sections qui seront ignorés par la recherche.\n# Les changements effectués ici prennent effet dès lors que la page avec le titre est indexée.\n# Vous pouvez forcer la réindexation de la page en effectuant une modification vide.\n# La syntaxe est la suivante :\n#   * Toute ce qui suit un « # » jusqu’à la fin de la ligne est un commentaire.\n#   * Toute ligne non-vide est le titre exact à ignorer, casse comprise.\nRéférences\nLiens externes\nVoir aussi\n #</pre><!-- ne pas modifier cette ligne -->",
-       "searchbutton": "Chercher",
+       "searchbutton": "Rechercher",
        "go": "Consulter",
        "searcharticle": "Continuer",
        "history": "Historique de la page",
        "pool-servererror": "Le service de réservation n’est pas disponible ($1).",
        "poolcounter-usage-error": "Erreur d’utilisation : $1",
        "aboutsite": "À propos de {{SITENAME}}",
-       "aboutpage": "Project: À propos de",
+       "aboutpage": "Project:À propos de",
        "copyright": "Le contenu est disponible sous licence $1 sauf mention contraire.",
        "copyrightpage": "{{ns:project}}:Copyrights",
        "currentevents": "Actualités",
        "botpasswords-no-provider": "BotPasswordsSessionProvider n’est pas disponible.",
        "botpasswords-restriction-failed": "Les restrictions de mot de passe de robots empêchent cette connexion.",
        "botpasswords-invalid-name": "Le nom d’utilisateur spécifié ne contient pas de séparateur de mot de passe de robots (« $1 »).",
-       "botpasswords-not-exist": "L’{{GENDER:$1|utilisateur|utilisatrice}} « $1 » n’a pas de mot de passe de robots intitulé « $2 ».",
+       "botpasswords-not-exist": "L’{{GENDER:$1|utilisateur|utilisatrice}} « $1 » n’a pas de mot de passe de robot nommé « $2 ».",
        "resetpass_forbidden": "Les mots de passe ne peuvent pas être changés",
        "resetpass_forbidden-reason": "Les mots de passe ne peuvent pas être modifiés : $1",
        "resetpass-no-info": "Vous devez être connecté pour avoir accès directement à cette page.",
        "parser-template-loop-warning": "Modèle en boucle détecté : [[$1]]",
        "template-loop-category": "Pages avec des boucles de modèle",
        "template-loop-category-desc": "La page contient une boucle dans le modèle, c.à.d. un modèle qui s’appelle lui-même récursivement.",
+       "template-loop-warning": "<strong>Avertissement :</strong> Cette page appelle [[:$1]] ce qui provoque une boucle de modèles (un appel récursif infini).",
        "parser-template-recursion-depth-warning": "Limite de profondeur des appels récursifs de modèles dépassée ($1)",
        "language-converter-depth-warning": "Limite de profondeur du convertisseur de langue dépassée ($1)",
        "node-count-exceeded-category": "Pages dépassant le nombre de nœuds maximal",
        "timezoneregion-indian": "Océan indien",
        "timezoneregion-pacific": "Océan pacifique",
        "allowemail": "Autoriser l'envoi de courriels venant d'autres utilisateurs",
+       "email-blacklist-label": "Empêcher ces utilisateurs de m'envoyer des courriels :",
        "prefs-searchoptions": "Recherche",
        "prefs-namespaces": "Espaces de noms",
        "default": "défaut",
        "rcfilters-watchlist-markseen-button": "Marquer toutes les modifications comme vues",
        "rcfilters-watchlist-edit-watchlist-button": "Modifier votre liste de pages suivies",
        "rcfilters-watchlist-showupdated": "Les modifications faites aux pages que vous n’avez pas visitées depuis qu’elles ont été modifiées sont en <strong>gras</strong>, avec des balises unies.",
+       "rcfilters-preference-label": "Masquer la version améliorée des modifications récentes",
+       "rcfilters-preference-help": "Restitue la version 2017 de l'interface ainsi que de tous les outils ajoutés alors et depuis.",
        "rcnotefrom": "Ci-dessous {{PLURAL:$5|la modification effectuée|les modifications effectuées}} depuis le <strong>$3, $4</strong> (affichées jusqu’à <strong>$1</strong>).",
        "rclistfromreset": "Réinitialiser la sélection de la date",
        "rclistfrom": "Afficher les nouvelles modifications depuis le $3 à $2",
        "uploadbtn": "Importer le fichier",
        "reuploaddesc": "Annuler l'importation et retourner au formulaire d'import",
        "upload-tryagain": "Envoyer la description du fichier modifiée",
+       "upload-tryagain-nostash": "Soumettre un fichier téléchargé de nouveau et une description modifiée",
        "uploadnologin": "Non connecté",
        "uploadnologintext": "Vous devez vous $1 pour importer des fichiers.",
        "upload_directory_missing": "Le répertoire d’import de fichier ($1) est introuvable et n’a pas pu être créé par le serveur web.",
        "file-deleted-duplicate-notitle": "Un fichier identique à ce fichier a déjà été supprimé ainsi que le titre. \nVous devriez demander à quelqu'un la possibilité de vérifier le journal de ce fichier supprimé afin d'examiner la situation  avant de l'importer à nouveau.",
        "uploadwarning": "Attention !",
        "uploadwarning-text": "Modifiez la description du fichier et essayez de nouveau.",
+       "uploadwarning-text-nostash": "Veuillez télécharger de nouveau le fichier, modifier la description ci-dessous et réessayer.",
        "savefile": "Sauvegarder le fichier",
        "uploaddisabled": "Désolé, l’import de fichiers est désactivé.",
        "copyuploaddisabled": "Import de fichier par URL désactivé.",
        "listfiles_size": "Taille",
        "listfiles_description": "Description",
        "listfiles_count": "Versions",
-       "listfiles-show-all": "Inclure les anciennes versions des images",
+       "listfiles-show-all": "Inclure les anciennes versions des fichiers",
        "listfiles-latestversion": "Version actuelle",
        "listfiles-latestversion-yes": "Oui",
        "listfiles-latestversion-no": "Non",
        "tooltip-pt-login": "Vous êtes encouragé à vous connecter ; ce n’est cependant pas obligatoire.",
        "tooltip-pt-login-private": "Vous devez vous connecter pour utiliser ce wiki",
        "tooltip-pt-logout": "Se déconnecter",
-       "tooltip-pt-createaccount": "Vous êtes encouragé à créer un compte utilisateur pour vous connecter ; ce n’est cependant pas obligatoire.",
+       "tooltip-pt-createaccount": "Vous êtes encouragé à créer un compte utilisateur et vous connecter; ce n’est cependant pas obligatoire.",
        "tooltip-ca-talk": "Discussion au sujet de cette page de contenu",
        "tooltip-ca-edit": "Modifier le wikicode",
        "tooltip-ca-addsection": "Commencer une nouvelle section",
        "tooltip-t-contributions": "Voir la liste des contributions de {{GENDER:$1|cet utilisateur|cette utilisatrice}}",
        "tooltip-t-emailuser": "Envoyer un courriel à {{GENDER:$1|cet utilisateur|cette utilisatrice}}",
        "tooltip-t-info": "Plus d’information sur cette page",
-       "tooltip-t-upload": "Importer des fichiers",
+       "tooltip-t-upload": "Téléverser des fichiers",
        "tooltip-t-specialpages": "Liste de toutes les pages spéciales",
        "tooltip-t-print": "Version imprimable de cette page",
        "tooltip-t-permalink": "Adresse permanente de cette version de la page",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Catégorie cachée|Catégories cachées}} ($1)",
        "pageinfo-templates": "{{PLURAL:$1|Modèle inclu|Modèles inclus}} ($1)",
        "pageinfo-transclusions": "{{PLURAL:$1|Page dans laquelle|Pages dans lesquelles}} cette page est incluse ($1)",
-       "pageinfo-toolboxlink": "Plus d’informations",
+       "pageinfo-toolboxlink": "Information sur la page",
        "pageinfo-redirectsto": "Rediriger vers",
        "pageinfo-redirectsto-info": "info",
        "pageinfo-contentpage": "Comptée comme page de contenu",
        "exif-relatedsoundfile": "Fichier audio associé",
        "exif-datetimeoriginal": "Date de la prise originelle",
        "exif-datetimedigitized": "Date de la numérisation",
-       "exif-subsectime": "Date de modification",
+       "exif-subsectime": "Date en fraction de seconde",
        "exif-subsectimeoriginal": "Date de la prise originelle",
        "exif-subsectimedigitized": "Date de la numérisation",
        "exif-exposuretime": "Temps d'exposition",
index 486fd64..f9b0f21 100644 (file)
        "category-empty": "<em>Yn dizze kategory binne gjin siden of triemmen opnaam.</em>",
        "hidden-categories": "Ferburgen {{PLURAL:$1|kategory|kategoryen}}",
        "hidden-category-category": "Ferburgen kategoryen",
-       "category-subcat-count": "{{PLURAL:$2|Dizze kategory hat allinne de folgjende ûnderkategory.|Dizze kategory hat de folgjende {{PLURAL:$1|ûnderkategory|$1 ûnderkategoryen}}, fan in totaal fan $2.}}",
+       "category-subcat-count": "{{PLURAL:$2|Dizze kategory hat allinne de folgjende ûnderkategory.|Dizze kategory hat de folgjende {{PLURAL:$1|ûnderkategory|$1 ûnderkategoryen}}, fan yn totaal $2.}}",
        "category-subcat-count-limited": "Dizze kategory hat de folgjende {{PLURAL:$1|ûnderkategory|$1 ûnderkategoryen}}.",
        "category-article-count": "{{PLURAL:$2|Dizze kategory befettet allinne de folgjende side.|De folgjende {{PLURAL:$1|side is|$1 siden binne}} yn dizze kategory, fan yn totaal $2.}}",
        "category-article-count-limited": "De folgjende {{PLURAL:$1|side is|$1 siden binne}} yn dizze kategory.",
        "fileduplicatesearch-result-n": "De triem \"$1\" hat {{PLURAL:$2|1 duplikaat|$2 duplikaten}}.",
        "specialpages": "Bysûndere siden",
        "specialpages-note-top": "Leginda",
-       "specialpages-note": "* Normale bysûndere siden.\n* <strong class=\"mw-specialpagerestricted\">Beheinde bysûndere siden.</strong>",
        "specialpages-group-maintenance": "Underhâld siden",
        "specialpages-group-other": "Oare bysûndere siden",
        "specialpages-group-login": "Oanmelde / registrearje",
        "compare-rev2": "Refyzje 2",
        "compare-submit": "Ferlykje",
        "compare-invalid-title": "Unjildige titel.",
+       "diff-form": "in '''formulier'''",
        "htmlform-submit": "Ferstjoere",
        "htmlform-no": "Nee",
        "htmlform-yes": "Ja",
index 8b7357d..5b6a3df 100644 (file)
        "parser-template-loop-warning": "Detectouse un modelo en bucle: [[$1]]",
        "template-loop-category": "Páxinas con bucles de modelo",
        "template-loop-category-desc": "A páxina contén un bucle de modelo, por exemplo, un modelo que se chama a si mesmo recursivamente.",
+       "template-loop-warning": "<strong>Aviso:</strong> Esta páxina chama [[:$1]] o que causa un ciclo infinito de modelo (unha chamada recursiva sen fin).",
        "parser-template-recursion-depth-warning": "Excedeuse o límite de profundidade de recursión do modelo ($1)",
        "language-converter-depth-warning": "Excedeuse o límite de profundidade do convertedor de lingua ($1)",
        "node-count-exceeded-category": "Páxinas nas que se supera o número de nodos",
        "timezoneregion-indian": "Océano Índico",
        "timezoneregion-pacific": "Océano Pacífico",
        "allowemail": "Admitir mensaxes de correo electrónico doutros usuarios",
+       "email-blacklist-label": "Prohibir a eses usuarios enviarme correos electrónicosː",
        "prefs-searchoptions": "Procura",
        "prefs-namespaces": "Espazos de nomes",
        "default": "predeterminado",
        "rcfilters-watchlist-markseen-button": "Marcar tódolos cambios como xa vistos",
        "rcfilters-watchlist-edit-watchlist-button": "Editar a súa lista de páxinas vixiadas",
        "rcfilters-watchlist-showupdated": "Os cambios feitos en páxinas que non visitou dende que se efectuaron aparecen en <strong>grosas</strong>, acompañados de marcadores sólidos.",
+       "rcfilters-preference-label": "Ocultar a versión mellorada de cambios recentes",
+       "rcfilters-preference-help": "Reverte o redeseño da interface de 2017 e tódalas ferramentas engadidas dende entón.",
        "rcnotefrom": "A continuación {{PLURAL:$5|móstrase o cambio feito|móstranse os cambios feitos}} desde o <strong>$3</strong> ás <strong>$4</strong> (móstranse <strong>$1</strong> como máximo).",
        "rclistfromreset": "Reinicializar a selección da data",
        "rclistfrom": "Mostrar os cambios novos desde o $3 ás $2",
        "listfiles_size": "Tamaño",
        "listfiles_description": "Descrición",
        "listfiles_count": "Versións",
-       "listfiles-show-all": "Incluír as versións vellas das imaxes",
+       "listfiles-show-all": "Incluír as versións vellas dos ficheiros",
        "listfiles-latestversion": "Versión actual",
        "listfiles-latestversion-yes": "Si",
        "listfiles-latestversion-no": "Non",
index d521606..0cbdff4 100644 (file)
        "template-semiprotected": "(نيمه بپأسه)",
        "hiddencategories": "اي ولگ {{PLURAL:$1|ىکته جخۊته جرگه|$1 جخۊته جرگه}} مئن دره:",
        "moveddeleted-notice": "اي ولگ حذفأبؤکه.\nحذف ؤ اينتقالˇ سياهه اي ولگˇ ويسين اي بۊن نۊشؤن بدأکه.",
+       "content-model-wikitext": "ويکي-وؤت",
        "viewpagelogs": "اي ولگˇ سياهه'نه دئن",
        "currentrev-asof": "هسأىي نۊسخه تا $1",
        "revisionasof": "نۊسخه $1",
        "currentrevisionlink": "هسأىى نۊسخهٰ نۊشؤن دأن",
        "cur": "ألؤن",
        "last": "دأميشکي",
+       "history-feed-title": "دچينواچينؤنˇ تاريخچه",
        "rev-deleted-user": "(کارگيري نؤم حذفأبؤ)",
        "rev-delundel": "نۊشؤن دأن/جۊخۊسانئن",
        "revdelete-hide-user": "کارگيري نؤم/آى.پي",
        "revdelete-reason-dropdown": "*حذفˇ هرماله دليلؤن\n** چاکۊدنحقه نقض گۊدن\n** نظر ىا اطلاعاتي که مؤناسب نيه\n** کارگيري نؤمي که مؤناسب نيه\n** اطلاعاتي که اۊنˇ مئن تؤهمت دره",
+       "mergelog": "ادغامˇ سياهه",
        "history-title": "\"$1\"ˇ واگرداني تارئخ",
        "difference-title": "$1: نۊسخه'نˇ تؤفير",
        "lineno": "رچ $1:",
        "right-sendemail": "باخي کارگيرؤنه ايمىل بخسأن",
        "newuserlogpage": "کارگير چاگۊدنˇ سياهه",
        "newuserlogpagetext": "اي ىکته سياهه' کارگير چاگۊدنؤنˇ جي",
+       "rightslog": "کارگيرˇ اختياراتˇ سياهه",
        "action-edit": "اي ولگه دچينواچين بکۊن",
        "action-createaccount": "اي کارگيري حيسابه چاکۊن",
        "action-move-categorypages": "جرگه ولگؤنه جابجا گۊدن",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|کارگير}} پىگير]",
        "rc-change-size-new": "$1 {{PLURAL:$1|باىت}} تغييرˇ پسي",
        "recentchangeslinked": "مۊرتبطˇ تغىيرؤن",
+       "recentchangeslinked-feed": "مۊرتبطˇ تغييرؤن",
        "recentchangeslinked-toolbox": "مۊرتبطˇ تغىيرؤن",
        "recentchangeslinked-title": "\"$1\"ˇ مۊرتبط تغييرؤن",
        "recentchangeslinked-summary": "اي جير، ىکته ليسته تينين بىنين آخري تغييرؤن أجي اۊ ولگؤنˇ مئن کي اي ولگˇ جي خال ببؤن (ىا جرگهٔ مؤردˇ نظرˇ جي). اۊ ولگؤني که [[Special:Watchlist|شيمئه پىگيري ليست]]۱ميئن دبۊن پۊررنگ نۊشؤن بدأبۊنن.",
        "upload-file-error-text": "وختي حقسأى بؤدبۊ که سرورˇ مئن ىکته مؤوقتي فاىل چاگۊده بۊبۊن، سأب بۊبؤ.\n\nىکته [[Special:ListUsers/sysop|کيا]] أمرأ تماس بگيرين.",
        "upload-misc-error-text": "جيرأکشئنˇ زمت، ىکته سأب بۊبؤ که مألۊم نيه چيسه.\nلؤطف بکۊنين بىنين اينترنتي نۊشؤني مؤعتبر ؤ دسفأرس ايسه ؤ هندئه حقسأى بکۊنين.\n\nأگه هندئه دۊرۊسأنۊبؤ، ىکته [[Special:ListUsers/sysop|کيا'ن]] أمرأ تماس بگيرين.",
        "img-auth-accessdenied": "شيمئه دسفأرس نيه",
+       "license": "جواز نؤمه:",
        "license-header": "جواز",
        "license-nopreview": "(پيشادئن ئبه هيچي ننأ)",
        "listfiles-userdoesnotexist": "\"$1\" کارگيري حيساب ثبت نۊبؤ.",
        "suppress": "دۊخۊسانگري",
        "booksources": "کيتابˇ سربسؤن",
        "booksources-search": "وامج",
+       "specialloguserlabel": "مۊجري:",
        "log": "سياههٰ‌ن",
+       "all-logs-page": "همته عۊمۊمي سياهه'ن",
+       "allpages": "همته ولگؤن",
        "allarticles": "همته ولگؤن",
        "allpagessubmit": "بۊشۊ",
        "categories": "جرگه'ن",
        "emailuser-title-target": "اي {{GENDER:$1|کارگيره}} ايمىل بخسأن.",
        "usermaildisabled": "نشأنه کارگير ئبه ايمىل خسأنئن.",
        "usermaildisabledtext": "شمه اي ويکي مئن مننين باخي کارگيرؤنه ايمىل بخسأنين",
+       "usermessage-editor": "سيستمˇ پيغؤم-رسؤن",
+       "watchlist": "پىگيتنؤنˇ ليست",
        "mywatchlist": "پىگيتنؤنˇ ليست",
        "watch": "پىگيتن",
        "wlheader-enotif": "فأندرˇ ايمىل کار کؤنه.",
        "alreadyrolled": "نشأنه [[:$1]]ˇ آخري دچينواچينه که [[User:$2|$2]] ([[User talk:$2|talk]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); بؤده، پساوگردانئن؛ اينˇ پيشي، ىک نفر وانيويسه دچينواچين ىا پساوگردان بؤده.\n\nولگˇ آخري دچينواچينه [[User:$3|$3]] ([[User talk:$3|talk]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]) بؤده.",
        "protectlogpage": "پأسنˇ سياهه",
        "protect-level-sysop": "فقط کيا'ن",
+       "restriction-edit": "دچينواچين",
+       "restriction-move": "جابجا گۊدن",
        "restriction-level-sysop": "قاىم بپأسه",
        "undeletehistorynoadmin": "اي ولگ حذفأبؤ.\nاي ولگˇ حذفأبؤنˇ دليل باني اۊ کارگيرؤنˇ نۊشؤني که حذفˇ پيشي اي ولگه دچينواچين بؤده بؤن، جيري فيچالˇ مئن بمأ.\nاي حذفأبؤ دچينواچينؤنˇ أصلˇ وؤت خالي کيا'نˇ دسفأرسه.",
        "namespace": "نؤمفضا:",
        "contributions": "{{GENDER:$1|کارگير}}ˇ مۊشارکتؤن",
        "mycontris": "مۊشارکتؤن",
        "anoncontribs": "مۊشارکتؤن",
+       "contribsub2": "{{GENDER:$3|$1}} ($2)ˇ ويسين",
+       "uctop": "(ألؤنˇ نۊسخه)",
        "month": "اي ماه مئن (ؤ دأميشک):",
        "year": "اي سالˇ مئن (ؤ دأميشک):",
+       "sp-contributions-blocklog": "دبۊستنˇ سياهه'ن",
        "sp-contributions-uploads": "جؤرأکشئنؤن",
+       "sp-contributions-logs": "سياههٰ‌ن",
        "sp-contributions-talk": "گب",
+       "sp-contributions-search": "مۊشارکتؤنˇ وامج",
+       "sp-contributions-username": "آى-پيˇ آدرس يا کارگيري نؤم:",
        "sp-contributions-submit": "وامج",
        "whatlinkshere": "هرچي خال ببؤ ائره",
        "whatlinkshere-title": "ولگؤني گه «$1»ˇ أمرأ خال دأنن",
        "contribslink": "ياوري‌ئن",
        "block-log-flags-nousertalk": "مننه خۊ گبˇ ولگه دچينواچين بکۊنه",
        "block-log-flags-hiddenname": "دۊخۊسانئه کارگيري نؤم",
+       "proxyblocker": "پراکسي دبۊستنچي",
        "movecategorypage-warning": "<strong>اخظار:</strong> شمه جرگه ولگه جابجا کأدرين. شيمه حواس بمؤنه کي فقط ولگ جابجا بنه ؤ ولگؤن قديمي جرگه مئن مؤنن ؤ تازه جرگه مئن <em>نشنن</em>.",
        "cant-move-category-page": "شمه اجازه ندأنين جرگهٰ‌نˇ ولگه جابجا بکۊنين.",
        "cant-move-to-category-page": "شمه ايجازه ندأنين ىکته ولگه ببرين ىکته جرگه ولگˇ مئن.",
        "tooltip-summary": "فيچالسه وارد بکۊنين",
        "pageinfo-header-edits": "تاريخچهٰ دچينواچين گۊدن",
        "pageinfo-header-restrictions": "ولگه پأسن",
+       "pageinfo-header-properties": "ولگˇ ويژگيئن",
+       "pageinfo-display-title": "تيتره نۊشؤن دأن",
+       "pageinfo-article-id": "ولگˇ شناسه",
        "pageinfo-robot-index": "مؤجاز",
        "pageinfo-firstuser": "ولگˇ چاکۊنکس",
+       "pageinfo-firsttime": "ولگˇ چاگۊدنˇ زمت",
+       "pageinfo-lastuser": "آخري دچينواچين گۊدنکس",
+       "pageinfo-lasttime": "آخري دچينواچينˇ تاريخ",
+       "pageinfo-edits": "همته دچينواچينؤنˇ تعداد",
+       "pageinfo-recent-edits": "آخري دچينواچينؤنˇ تعداد ($1 ˇ أخيرˇ ميئن)",
+       "pageinfo-recent-authors": "آخري تنها نويشتنکسؤنˇ تعداد",
        "pageinfo-hidden-categories": "جخۊته {{PLURAL:$1| جرگه|جرگه}} ( $1 )",
        "pageinfo-toolboxlink": "ولگˇ اطلاعات",
+       "pageinfo-contentpage-yes": "أهأ",
        "pageinfo-category-info": "جرگه اطلاعات",
+       "patrol-log-page": "گشتˇ سياهه",
        "previousdiff": "→ قديمي‌ترˇ دچينواچين",
        "nextdiff": "تازه‌ترˇ دچينواچين ←",
        "file-info-size": "<span dir=\"ltr\">$1 × $2</span> پیکسل، فاىلˇ واويراز: $3، نوع MIME فاىل: $4",
        "monthsall": "همه",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|گب]])",
        "redirect-submit": "بۊشۊ",
+       "redirect-lookup": "وامج:",
+       "redirect-value": "مقدار:",
+       "redirect-user": "کارگيرˇ شناسه",
+       "redirect-page": "ولگˇ شناسه",
+       "redirect-revision": "ولگˇ نۊسخه",
        "redirect-file": "فايلˇ نؤم",
        "specialpages": "خاصˇ ولگؤن",
        "specialpages-group-login": "ديرين/ثبتˇ نؤم",
        "logentry-newusers-create": "کارگيري حساب $1 {{GENDER:$2|چاگۊده-بۊبؤ}}",
        "logentry-upload-upload": "$1 $3 {{GENDER:$2|جؤرأکشئه}}",
        "searchsuggest-search": "{{SITENAME}} مئن وامج",
+       "duration-days": "$1 رۊز",
        "expand_templates_preview": "پيشادئن",
        "default-skin-not-found": "اؤخ! پيشفرضˇ قالبي که شيمه ويکي ئبه <code dir=\"ltr\"<$wgDefaultSkin</code> مئن تعريف ببؤ به عنوانˇ <code>$1</code>، دسفرس نيه.\n\nبه نظر می‌آید نصب شما شامل پوسته‌های زیر می‌شود. [https://www.mediawiki.org/wiki/Manual:Skin_configuration راهنما: تنظیمات پوسته] را برای کسب اطلاعات در باره چگونگی فعال‌ساختن آن‌ها و انتخاب پیش‌فرض ببینید.\n\n$2\n\n; اگر اخیراً مدیاویکی را نصب کرده‌اید:\n: احتمالاً از گیت، یا به طور مستقیم از کد مبدأ که از چند متد دیگر استفاده می‌کند نصب کردید. انتظار می‌رود. چند {{PLURAL:$4|پوسته|پوسته}} از [https://www.mediawiki.org/wiki/Category:All_skins فهرست پوسته mediawiki.org] نصب کنید، که همراه چندین پوسته و افزونه هستند. شما می‌توانید شاخه <code>skins/</code> را از آن نسخه‌برداری کرده و بچسبانید.\n\n:* [https://www.mediawiki.org/wiki/Download_from_Git#Using_Git_to_download_MediaWiki_skins استفاده از گیت برای دریافت پوسته‌ها].\n: انجام این کار با مخزن گیت‌تان تداخل نمی‌کند اگر توسعه‌دهنده مدیاویکی هستید.\n\n; اگر اخیراً مدیاویکی را ارتقاء دادید:\n: مدیاویکی ۱٫۲۴ و تازه‌تر دیگر به طور خودکار پوسته‌های نصب‌شده را فعال نمی‌کند ([https://www.mediawiki.org/wiki/Manual:Skin_autodiscovery راهنما: کشف خودکار پوسته] را ببینید). شما می‌توانید خطوط زیر را به داخل <code>LocalSettings.php</code> بچسبانید تا {{PLURAL:$5|همه|همه}} پوسته‌های نصب‌شده را فعال کنید:\n\n<pre dir=\"ltr\">$3</pre>\n\n; اگر اخیراً <code>LocalSettings.php</code> را تغییر دادید:\n: نام پوسته‌ها را برای غلط املایی دوباره بررسی کنید."
 }
index c317226..d848eec 100644 (file)
@@ -78,6 +78,7 @@
        "category_header": "𐌻𐌰𐌿𐌱𐍉𐍃 𐌹𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"",
        "subcategories": "𐌼𐌹𐌽𐌽𐌹𐌶𐍉𐌽𐌰 𐌺𐌿𐌽𐌾𐌰",
        "category-media-header": "𐌼𐌴𐌳𐌾𐌰 𐌹𐌽 𐌺𐌿𐌽𐌾𐌰 \"$1\"",
+       "category-empty": "<em>𐌸𐌰𐍄𐌰 𐌺𐌿𐌽𐌹 𐌽𐌿 𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐌸 𐌻𐌰𐌿𐌱𐌰𐌽𐍃 𐌸𐌰𐌿 𐌼𐌰𐌹𐌳𐌾𐌰.</em>",
        "hidden-categories": "{{PLURAL:$1|𐌰𐍆𐍆𐌹𐌻𐌷𐌰𐌽 𐌺𐌿𐌽𐌹|𐌰𐍆𐍆𐌹𐌻𐌷𐌰𐌽𐌰 𐌺𐌿𐌽𐌾𐌰}}",
        "hidden-category-category": "𐌰𐍆𐍆𐌹𐌻𐌷𐌰𐌽𐌰 𐌺𐌿𐌽𐌾𐌰",
        "category-subcat-count": "{{PLURAL:$2|𐌸𐌰𐍄𐌰 𐌺𐌿𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐌸 𐌸𐌰𐍄𐌴𐌹𐌽𐌴𐌹 𐌹𐍆𐍄𐌿𐌼 𐌼𐌹𐌽𐌽𐌹𐌶𐍉𐌽 𐌺𐌿𐌽𐌹|𐌸𐌰𐍄𐌰 𐌺𐌿𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐌸 {{PLURAL:$1|𐌼𐌹𐌽𐌽𐌹𐌶𐍉𐌽 𐌺𐌿𐌽𐌹|𐌹𐍆𐍄𐌿𐌼𐌰 $1 𐌼𐌹𐌽𐌽𐌹𐌶𐍉𐌽𐌰 𐌺𐌿𐌽𐌾𐌰}}, 𐌰𐌻𐌻𐌰𐌹𐌶𐌴 $2 𐌺𐌿𐌽𐌾𐌴.}}",
        "protect_change": "𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹",
        "unprotect": "𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹 𐌼𐌿𐌽𐌳",
        "newpage": "𐌽𐌹𐌿𐌾𐌹𐍃 𐌻𐌰𐌿𐍆𐍃",
-       "talkpagelinktext": "ð\90\8c²ð\90\8c°ð\90\8d\85ð\90\8c°ð\90\8c¿ð\90\8d\82ð\90\8c³ð\90\8c¾ð\90\8c°",
+       "talkpagelinktext": "ð\90\8c²ð\90\8c°ð\90\8d\85ð\90\8c°ð\90\8c¿ð\90\8d\82ð\90\8c³ð\90\8c¹",
        "specialpage": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃 𐌻𐌰𐌿𐍆𐍃",
        "personaltools": "𐍃𐍅𐌴𐍃𐌰𐌹 𐍃𐌰𐍂𐍅𐌰𐌽𐍃",
-       "talk": "ð\90\8c²ð\90\8c°ð\90\8d\85ð\90\8c°ð\90\8c¿ð\90\8d\82ð\90\8c³ð\90\8c¾ð\90\8c°",
+       "talk": "ð\90\8c²ð\90\8c°ð\90\8d\85ð\90\8c°ð\90\8c¿ð\90\8d\82ð\90\8c³ð\90\8c¹",
        "views": "𐍃𐌹𐌿𐌽𐌴𐌹𐍃",
        "toolbox": "𐍃𐌰𐍂𐍅𐌰𐌽𐍃",
        "mediawikipage": "𐌰𐌽𐌳𐌷𐌿𐌻𐌴𐌹 𐍅𐌰𐌿𐍂𐌳𐌰𐌻𐌰𐌿𐍆",
        "confirmable-yes": "𐌾𐌰",
        "confirmable-no": "𐌽𐌴",
        "site-rss-feed": "$1 RSS 𐍂𐌹𐌽𐌽𐍉",
-       "site-atom-feed": "$1 ð\90\8c°ð\90\8d\84ð\90\8d\89𐌼 𐍂𐌹𐌽𐌽𐍉",
+       "site-atom-feed": "$1 ð\90\8c°ð\90\8d\84ð\90\8c°ð\90\8c¿𐌼 𐍂𐌹𐌽𐌽𐍉",
        "page-atom-feed": "\"$1\" 𐌰𐍄𐍉𐌼 𐍂𐌹𐌽𐌽𐍉",
        "red-link-title": "$1 (𐌻𐌰𐌿𐍆𐍃 𐌽𐌹𐍃𐍄)",
        "nstab-main": "𐌻𐌰𐌿𐍆𐍃",
        "nstab-user": "𐌱𐍂𐌿𐌺𐌾𐌰𐌻𐌰𐌿𐍆𐍃",
        "nstab-special": "𐌿𐍃𐍃𐌹𐌽𐌳𐍃 𐌻𐌰𐌿𐍆𐍃",
        "nstab-project": "𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐌰𐌻𐌰𐌿𐍆𐍃",
-       "nstab-image": "ð\90\8d\86ð\90\8c°ð\90\8c´ð\90\8c¹𐌻",
+       "nstab-image": "ð\90\8d\86ð\90\8c°ð\90\8c¾𐌻",
        "nstab-mediawiki": "𐍅𐌰𐌿𐍂𐌳",
        "nstab-template": "𐍃𐌺𐌴𐌹𐍂𐌴𐌹𐌽𐌹𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐍃",
        "nstab-help": "𐌷𐌹𐌻𐍀𐌰𐌻𐌰𐌿𐍆𐍃",
        "nstab-category": "𐌺𐌿𐌽𐌹",
        "mainpage-nstab": "𐌰𐌽𐌰𐍃𐍄𐍉𐌳𐌴𐌹𐌽𐌹𐌻𐌰𐌿𐍆𐍃",
+       "nosuchspecialpage": "𐌽𐌹𐍃𐍄 𐍃𐍅𐌰𐌻𐌴𐌹𐌺𐍃 𐌿𐍃𐍃𐌹𐌽𐌳𐍃 𐌻𐌰𐌿𐍆𐍃",
        "error": "𐌰𐌹𐍂𐌶𐌴𐌹",
        "databaseerror-error": "𐌰𐌹𐍂𐌶𐌴𐌹: $1",
        "missing-article": "𐌳𐌰𐍄𐌰𐌱𐌴𐍃 𐌽𐌹 𐌱𐌹𐌲𐌰𐍄 𐌱𐍉𐌺𐍉𐍃 𐌻𐌰𐌿𐌱𐌹𐍃 𐌸𐌹𐌶𐌴𐌹 𐍃𐌺𐌿𐌻𐌳𐌴𐌳𐌹 𐌱𐌹𐌲𐌹𐍄𐌰𐌽, 𐌷𐌰𐌹𐍄𐌰𐌽𐍃 \"$1\" $2. \n\n𐌸𐌰𐍄𐌰 𐌿𐍆𐍄𐌰 𐍅𐌰𐌹𐍂𐌸𐌹𐌸 𐌾𐌰𐌱𐌰𐌹 𐌻𐌰𐌹𐍃𐍄𐌾𐌰𐌳𐌰 𐍆𐌰𐌹𐍂𐌽𐌾𐌰 𐌳𐌹𐍆𐍆 𐌸𐌰𐌿 𐍃𐍀𐌹𐌻𐌻𐌰𐌲𐌰𐍅𐌹𐍃𐍃 𐍃𐌴𐌹 𐍆𐍂𐌰𐌵𐌹𐍃𐍄𐌹𐌳𐌰 𐌹𐍃𐍄. 𐌽𐌹𐌱𐌰𐌹 𐌹𐍃𐍄, 𐌼𐌰𐌷𐍄𐍃 𐌹𐍃𐍄 𐌴𐌹 𐌱𐌹𐌲𐌴𐍄𐌴𐌹𐍃 𐌰𐌹𐍂𐌶𐌴𐌹𐌽 𐌹𐌽 𐍃𐌰𐌿𐍆𐍄𐍅𐌰𐌹𐍂𐌰. \n\n𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺, 𐌼𐌴𐍂𐌴𐌹 𐌸𐌰𐍄𐌰 𐌳𐌿 [[Special:ListUsers/sysop\n|𐍂𐌴𐌹𐌺]] 𐌲𐌹𐍆𐌿𐌷 𐌲𐌰𐍅𐌹𐍃𐍃.",
        "savearticle": "𐌲𐌰𐍆𐌰𐍃𐍄 𐌻𐌰𐌿𐍆",
        "publishpage": "𐌼𐌴𐍂𐌴𐌹 𐌻𐌰𐌿𐍆",
        "preview": "𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽𐍃",
-       "showpreview": "ð\90\8c°ð\90\8d\84ð\90\8c°ð\90\8c¿ð\90\8c²𐌴𐌹 𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽",
-       "showdiff": "ð\90\8c°ð\90\8d\84ð\90\8c°ð\90\8c¿ð\90\8c²𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌹𐌽𐌹𐌽𐍃",
+       "showpreview": "ð\90\8c±ð\90\8c°ð\90\8c½ð\90\8c³ð\90\8d\85𐌴𐌹 𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽",
+       "showdiff": "ð\90\8c±ð\90\8c°ð\90\8c½ð\90\8c³ð\90\8d\85𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌹𐌽𐌹𐌽𐍃",
        "loginreqlink": "𐌰𐍄𐌲𐌰𐌲𐌲",
        "newarticle": "(𐌽𐌹𐍅𐌹)",
        "newarticletext": "𐌻𐌰𐌹𐍃𐍄𐌹𐌳𐌴𐍃 𐌲𐌰𐍅𐌹𐍃 𐌳𐌿 𐌻𐌰𐌿𐌱𐌰 𐍃𐌰𐌴𐌹 𐌽𐌹𐍃𐍄. 𐌳𐌿 𐍃𐌺𐌰𐍀𐌾𐌰𐌽 𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆, 𐌰𐌽 𐌰𐍃𐍄𐍉𐌳𐌴𐌹 𐌼𐌴𐌻𐌾𐌰𐌽 𐌹𐌽 𐌰𐍂𐌺𐌰𐌹 𐌿𐍆 (𐍃𐌰𐌹𐍈 [$1 𐌷𐌹𐌻𐍀𐌰𐌻𐌰𐌿𐍆] 𐌼𐌰𐌽𐌰𐌲𐌹𐌶𐌹𐌽 𐌺𐌿𐌽𐌸𐌾𐌰). 𐌾𐌰𐌱𐌰𐌹 𐌹𐍃 𐌷𐌴𐍂 𐌹𐌽 𐌰𐌹𐍂𐌶𐌴𐌹𐌽𐍃, 𐌲𐌰𐌲𐌲 𐌳𐌿 <𐍃𐍄𐍂𐍉𐌽𐌲>𐌹𐌱𐌿𐌺𐌰𐌷𐌰𐌿𐌱𐌹𐌳𐌹𐌻𐍉𐌽.",
        "noarticletext-nopermission": "𐌽𐌿 𐌽𐌹 𐍃𐌹𐌽𐌳 𐌱𐍉𐌺𐍉𐍃 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰.\n𐌼𐌰𐌲𐍄 [[Special:Search/{{PAGENAME}}|𐍃𐍉𐌺𐌾𐌰𐌽 𐌸𐌰𐍄𐌰 𐌻𐌰𐌿𐌱𐌰-𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌹]] 𐌹𐌽 𐌰𐌽𐌸𐌰𐍂𐌰𐌹𐌼 𐌻𐌰𐌿𐌱𐌰𐌼, 𐌸𐌰𐌿 <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} 𐍃𐍉𐌺𐌾𐌰𐌽 𐌲𐌰𐌷𐌰𐌷𐌾𐍉 𐌲𐌰𐍆𐌰𐍃𐍄𐍉𐍃]</span>, 𐌹𐌸 𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐍃 𐌰𐌽𐌳𐌻𐌴𐍄 𐍃𐌺𐌰𐍀𐌾𐌰𐌽 𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆.",
        "updated": "(𐌰𐌽𐌰𐌽𐌹𐍅𐌹𐌸)",
        "previewnote": "<strong>𐌲𐌰𐌼𐌹𐌽𐌸𐌴𐌹 𐌸𐌰𐍄𐌴𐌹 𐌸𐌰𐍄𐌰 𐌹𐍃𐍄 𐌸𐌰𐍄𐌰𐌹𐌽𐌴𐌹 𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽𐍃.</strong>\n𐌸𐌴𐌹𐌽𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐌽𐌰𐌿𐌷 𐌽𐌹 𐌲𐌰𐍆𐌰𐍃𐍄𐌰𐌽𐍉𐍃 𐍃𐌹𐌽𐌳!",
+       "continue-editing": "𐌲𐌰𐌲𐌲 𐌳𐌿 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐍃𐍄𐌰𐌳𐌰",
        "editing": "{{GENDER:𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐌳𐍃|𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐌳𐌴𐌹|𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐌳𐍃}} $1",
        "creating": "{{GENDER:𐍃𐌺𐌰𐍀𐌾𐌰𐌽𐌳𐍃|𐍃𐌺𐌰𐍀𐌾𐌰𐌽𐌳𐌴𐌹|𐍃𐌺𐌰𐍀𐌾𐌰𐌽𐌳𐍃\n}} $1",
        "editingsection": "{{GENDER:𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐌳𐍃|𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐌳𐌴𐌹}} $1 (𐌳𐌰𐌹𐌻)",
        "template-protected": "(𐌷𐌰𐌱𐌰𐌹𐌸 𐌼𐌿𐌽𐌳)",
        "template-semiprotected": "(𐌷𐌰𐌱𐌰𐌹𐌸 𐌷𐌰𐌻𐌱𐌰𐌼𐌿𐌽𐌸)",
        "hiddencategories": "𐍃𐌰 𐌻𐌰𐌿𐍆𐍃 𐌹𐍃𐍄 𐌲𐌰𐌳𐌰𐌹𐌻𐌰 {{PLURAL:$1|1 𐌰𐌽𐌰𐌻𐌰𐌿𐌲𐌽𐌹𐍃 𐌺𐌿𐌽𐌾𐌹𐍃|$1 𐌰𐌽𐌰𐌻𐌰𐌿𐌲𐌽𐌰𐌹𐌶𐌴 𐌺𐌿𐌽𐌾𐌴}}:‎",
+       "permissionserrors": "𐌰𐌹𐍂𐌶𐌴𐌹 𐌰𐌽𐌳𐌻𐌴𐍄𐌹𐍃",
        "permissionserrorstext-withaction": "𐌽𐌹 𐌷𐌰𐌱𐌰𐌹𐍃 𐌰𐌽𐌳𐌻𐌴𐍄 𐌳𐌿 $2, 𐌹𐌽 {{PLURAL:$1|𐌹𐍆𐍄𐌿𐌼𐌰𐌹𐌶𐍉𐍃 𐍅𐌰𐌹𐌷𐍄𐌰𐌹𐍃|𐌹𐍆𐍄𐌿𐌼𐌰𐌹𐌶𐍉 𐍅𐌰𐌹𐌷𐍄𐌴}}:",
        "moveddeleted-notice": "𐍃𐌰 𐌻𐌰𐌿𐍆𐍃 𐌿𐍃𐌽𐌿𐌼𐌰𐌽𐍃 𐌹𐍃𐍄. 𐌿𐍃𐌽𐌿𐌼𐍄𐍃 𐌾𐌰𐌷 𐌲𐌰𐍆𐌰𐍃𐍄𐌰𐌹𐌽𐍃 𐌼𐌹𐌸𐍃𐌰𐍄𐌴𐌹𐌽𐌰𐌹𐍃 𐌿𐍆 𐍃𐌹𐌽𐌳 𐌿𐍃𐍄𐌰𐌹𐌺𐌽𐌴𐌹𐌽𐌰𐌹.",
        "postedit-confirmation-created": "𐌻𐌰𐌿𐍆𐍃 𐌲𐌰𐍃𐌺𐌰𐍀𐌰𐌽𐍃 𐌹𐍃𐍄.",
        "nextn": "𐌹𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|$1}}",
        "prevn-title": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄(𐌰) $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐍉𐌾𐌰}}",
        "nextn-title": "𐌰𐍆𐍄𐌿𐌼(𐌰) $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐍉𐌾𐌰}}",
-       "shown-title": "ð\90\8c°ð\90\8d\84ð\90\8c°ð\90\8c¿ð\90\8c²𐌴𐌹 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐍉𐌾𐌰}} 𐍈𐌰𐍂𐌾𐌰𐌼𐌼𐌴𐌷 𐌻𐌰𐌿𐌱𐌰.",
+       "shown-title": "ð\90\8c±ð\90\8c°ð\90\8c½ð\90\8c³ð\90\8d\85𐌴𐌹 $1 {{PLURAL:$1|𐍄𐌰𐌿𐌹|𐍄𐍉𐌾𐌰}} 𐍈𐌰𐍂𐌾𐌰𐌼𐌼𐌴𐌷 𐌻𐌰𐌿𐌱𐌰.",
        "viewprevnext": "𐍃𐌹𐌿𐌽𐌴𐌹𐍃 ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "<strong>𐍃𐌺𐌰𐍀𐌴𐌹 𐌻𐌰𐌿𐍆 \"[[:$1]]\" 𐌰𐌽𐌰 𐌸𐌹𐌶𐌰𐌹 𐍅𐌹𐌺𐌹!</strong> {{{{PLURAL:$2|0=|𐍃𐌰𐌹 𐌾𐌰𐌷 𐌻𐌰𐌿𐍆 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐌰 𐌸𐌴𐌹𐌽𐌰𐌹 𐍃𐍉𐌺𐌴𐌹𐌽𐌰𐌹.|𐍃𐌰𐌹 𐌾𐌰𐌷 𐍄𐍉𐌾𐌰 𐍃𐍉𐌺𐌴𐌹𐌽𐌰𐌹𐍃 𐌱𐌹𐌲𐌹𐍄𐌰𐌽𐌰.}}",
        "searchprofile-articles": "𐌷𐌰𐌱𐌰𐌽𐌳𐌰𐌽𐍃 𐌻𐌰𐌿𐌱𐍉𐍃",
        "grouppage-sysop": "{{ns:project}}:𐍂𐌴𐌹𐌺𐍃",
        "right-writeapi": "𐌱𐍂𐌿𐌺𐌴𐌹𐌽𐍃 API 𐌼𐌴𐌻𐌴𐌹𐌽𐌰𐌹𐍃",
        "rightslog": "Niutandis stutjanlog",
+       "action-edit": "𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹 𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆",
        "nchanges": "$1 {{PLURAL:$1|𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃|𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃}}",
        "enhancedrc-history": "𐍃𐍀𐌹𐌻𐌻",
        "recentchanges": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (𐍃𐌰𐌹𐍈 𐌾𐌰𐌷[[Special:NewPages|𐍅𐌹𐌺𐍉 𐌽𐌹𐌿𐌾𐌰𐌹𐌶𐌴 𐌻𐌰𐌿𐌱𐌴]])",
        "rclistfrom": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐌽𐌹𐌿𐌾𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌽𐍃 𐌰𐌽𐌰𐍃𐍄𐍉𐌳𐌾𐌰𐌽𐌳𐌴𐌹𐌽𐍃 𐍆𐍂𐌰𐌼 $2, $3",
        "rcshowhideminor": "$1 𐌼𐌹𐌽𐌽𐌹𐌶𐌴𐌹𐌽𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃",
-       "rcshowhideminor-show": "ð\90\8c°ð\90\8d\84ð\90\8c°ð\90\8c¿ð\90\8c²𐌴𐌹",
+       "rcshowhideminor-show": "ð\90\8c±ð\90\8c°ð\90\8c½ð\90\8c³ð\90\8d\85𐌴𐌹",
        "rcshowhideminor-hide": "𐌰𐍆𐍆𐌹𐌻𐌷",
        "rcshowhidebots": "$1 𐌼𐌰𐌷𐍄𐌹𐍃𐌺𐌰𐌻𐌺𐍉𐍃",
-       "rcshowhidebots-show": "ð\90\8c°ð\90\8d\84ð\90\8c°ð\90\8c¿ð\90\8c²𐌴𐌹",
+       "rcshowhidebots-show": "ð\90\8c±ð\90\8c°ð\90\8c½ð\90\8c³ð\90\8d\85𐌴𐌹",
        "rcshowhidebots-hide": "𐌰𐍆𐍆𐌹𐌻𐌷",
        "rcshowhideliu": "$1 𐌰𐌽𐌰𐌼𐌴𐌻𐌹𐌳𐌰𐌹 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐍃",
        "rcshowhideliu-hide": "𐌰𐍆𐍆𐌹𐌻𐌷",
        "rcshowhideanons": "$1 𐌰𐍆𐍆𐌹𐌻𐌷𐌰𐌽𐌰𐌹 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐍃",
-       "rcshowhideanons-show": "ð\90\8c°ð\90\8d\84ð\90\8c°ð\90\8c¿ð\90\8c²𐌴𐌹",
+       "rcshowhideanons-show": "ð\90\8c±ð\90\8c°ð\90\8c½ð\90\8c³ð\90\8d\85𐌴𐌹",
        "rcshowhideanons-hide": "𐌰𐍆𐍆𐌹𐌻𐌷",
        "rcshowhidemine": "$1 𐌼𐌴𐌹𐌽𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃",
-       "rcshowhidemine-show": "ð\90\8c°ð\90\8d\84ð\90\8c°ð\90\8c¿ð\90\8c²𐌴𐌹",
+       "rcshowhidemine-show": "ð\90\8c±ð\90\8c°ð\90\8c½ð\90\8c³ð\90\8d\85𐌴𐌹",
        "rcshowhidemine-hide": "𐌰𐍆𐍆𐌹𐌻𐌷",
        "rclinks": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍉𐍃 $1 𐌹𐌽𐌼𐌰𐌹𐌳𐌹𐌽𐌹𐌽𐍃 𐌹𐌽 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐌰𐌹𐌼 $2 𐌳𐌰𐌲𐌰𐌼",
        "diff": "𐌼𐌹𐍃𐍃",
        "hist": "𐍃𐍀𐌹𐌻𐌻",
        "hide": "𐌰𐍆𐍆𐌹𐌻𐌷",
-       "show": "ð\90\8c°ð\90\8d\84ð\90\8c°ð\90\8c¿ð\90\8c²𐌴𐌹",
+       "show": "ð\90\8c±ð\90\8c°ð\90\8c½ð\90\8c³ð\90\8d\85𐌴𐌹",
        "minoreditletter": "l",
        "newpageletter": "N",
        "boteditletter": "b",
+       "rc-change-size-new": "$1 {{PLURAL:$1|𐌱𐌰𐌾𐍄|𐌱𐌰𐌾𐍄𐌰}} 𐌰𐍆𐌰𐍂 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌰𐌹",
        "recentchangeslinked": "𐌲𐌰𐌱𐌿𐌽𐌳𐌰𐌽𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃",
        "recentchangeslinked-feed": "𐌲𐌰𐌱𐌿𐌽𐌳𐌰𐌽𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃",
        "recentchangeslinked-toolbox": "𐌲𐌰𐌱𐌿𐌽𐌳𐌰𐌽𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃",
        "recentchangeslinked-title": "𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐌲𐌰𐌱𐌿𐌽𐌳𐌰𐌽𐍉𐍃 𐌼𐌹𐌸 \"$1\"",
        "recentchangeslinked-summary": "A𐌸𐌰𐍄𐌰 𐌹𐍃𐍄 𐍅𐌹𐌺𐍉 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉 𐌽𐌹𐌿𐌾𐌰𐌱𐌰 𐌲𐌰𐍄𐌰𐍅𐌹𐌳𐍉𐍃 𐌻𐌰𐌿𐌱𐌰𐌼 𐌲𐌰𐌱𐌿𐌽𐌳𐌰𐌹 𐍃𐌿𐌼𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰 (𐌸𐌰𐌿 𐌲𐌰𐌳𐌰𐌹𐌻𐌰𐌼 𐍃𐌿𐌼𐌹𐍃 𐌺𐌿𐌽𐌾𐌹𐍃). <strong>𐌻𐌰𐌿𐌱𐍉𐍃 𐌰𐌽𐌰 [[Special:Watchist|your]] 𐍃𐌹𐌽𐌳 </strong>𐍃𐍅𐌹𐌽𐌸𐌰𐌹.",
        "recentchangeslinked-page": "𐌻𐌰𐌿𐌱𐌰𐌽𐌰𐌼𐍉:",
-       "recentchangeslinked-to": "ð\90\8c°ð\90\8d\84ð\90\8c°ð\90\8c¿ð\90\8c²𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐌻𐌰𐌿𐌱𐌴 𐌸𐌰𐌹𐌴𐌹 𐌲𐌰𐍅𐌹𐌳𐌰𐌽𐌰𐌹 𐌳𐌿 𐌲𐌹𐌱𐌰𐌽𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰.",
-       "upload": "ð\90\8c¿ð\90\8d\83ð\90\8c·ð\90\8c»ð\90\8c°ð\90\8c¸ð\90\8c°ð\90\8c½ ð\90\8d\86ð\90\8c´ð\90\8c¹ð\90\8c»ð\90\8c°ð\90\8c½ð\90\8d\83",
+       "recentchangeslinked-to": "ð\90\8c±ð\90\8c°ð\90\8c½ð\90\8c³ð\90\8d\85𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐌻𐌰𐌿𐌱𐌴 𐌸𐌰𐌹𐌴𐌹 𐌲𐌰𐍅𐌹𐌳𐌰𐌽𐌰𐌹 𐌳𐌿 𐌲𐌹𐌱𐌰𐌽𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰.",
+       "upload": "ð\90\8c°ð\90\8d\84ð\90\8c±ð\90\8c°ð\90\8c¹ð\90\8d\82 ð\90\8d\86ð\90\8c°ð\90\8c¾ð\90\8c»",
        "uploadbtn": "Ushlaþaiþ Feilans",
        "uploadlogpage": "Log af Ushlaþan",
        "filedesc": "𐌼𐌰𐌿𐍂𐌲𐌿𐍃 𐍃𐌺𐌴𐌹𐍂𐌴𐌹𐌽𐍃",
        "imgfile": "𐍆𐌰𐌴𐌹𐌻",
        "listfiles": "Feilans tala",
        "file-anchor-link": "𐍆𐌴𐌹𐌻𐌰𐌽𐍃",
-       "filehist": "ð\90\8d\86ð\90\8c´ð\90\8c¹ð\90\8c»ð\90\8c°ð\90\8c½ð\90\8d\83 ð\90\8c°ð\90\8c¹ð\90\8d\82ð\90\8c¹ð\90\8d\83",
+       "filehist": "ð\90\8d\86ð\90\8c°ð\90\8c¾ð\90\8c»ð\90\8c°ð\90\8d\83ð\90\8d\80ð\90\8c¹ð\90\8c»ð\90\8c»",
        "filehist-help": "𐌰𐍄𐍄𐌴𐌺 𐌳𐌰𐌲/𐌼𐌴𐌻 𐌳𐌿 𐌰𐍄𐌰𐌿𐌲𐌾𐌰𐌽 𐌳𐌰𐍄𐌰 𐍃𐍅𐌰𐍃𐍅𐌴 𐌲𐌰𐌱𐌰𐌹𐍂𐌷𐍄𐌹𐌳𐌰 𐌹𐌽 𐌸𐌰𐌼𐌼𐌰 𐌼𐌴𐌻𐌰.",
        "filehist-current": "𐌽𐌿",
        "filehist-datetime": "𐌼𐌴𐌻",
        "filehist-dimensions": "𐍅𐌰𐌷𐍃𐍄𐌿𐍃",
        "filehist-filesize": "Feilans wahstus",
        "filehist-comment": "𐍅𐌰𐌿𐍂𐌳",
-       "imagelinks": "ð\90\8c±ð\90\8d\82ð\90\8c¿ð\90\8cºð\90\8c´ð\90\8c¹ð\90\8c½ð\90\8d\83 ð\90\8d\86ð\90\8c°ð\90\8c´ð\90\8c¹ð\90\8c»ð\90\8c´",
+       "imagelinks": "ð\90\8d\86ð\90\8c°ð\90\8c¾ð\90\8c»ð\90\8c°ð\90\8c±ð\90\8d\82ð\90\8c¿ð\90\8cºð\90\8c´ð\90\8c¹ð\90\8c½ð\90\8d\83",
        "linkstoimage": "𐌰𐍆𐍄𐌿𐌼𐌰 {{PLURAL:$1|𐍃𐍉 𐍃𐌴𐌹𐌳𐍉 𐌻𐌴𐌹𐌽𐌺𐍉𐌸|𐌸𐍉𐍃 𐍃𐌴𐌹𐌳𐍉𐌽𐍃 𐌻𐌴𐌹𐌽𐌺𐍉𐌽𐌳}} 𐌸𐌹𐌶𐍉𐌶𐌿𐌷 𐍆𐌴𐌹𐌻𐍉𐍃",
        "sharedupload-desc-here": "𐍃𐍉 𐌳𐌰𐍄𐌰 𐌹𐍃𐍄 𐍆𐍂𐌰𐌼 $1 𐌾𐌰𐌷 𐌼𐌰𐌲 𐌱𐍂𐌿𐌺𐌾𐌰𐌳𐌰 𐍆𐍂𐌰𐌼 𐌰𐌽𐌸𐌰𐍂𐌰𐌹𐌼 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐍉𐌼.\n𐌲𐌰𐍃𐌺𐌴𐌹𐍂𐌴𐌹𐌽𐍃 𐌰𐌽𐌰 𐍃𐌴𐌹𐌽𐌰𐌼𐌼𐌰 [$2 𐌳𐌰𐍄𐌰 𐍃𐌺𐌴𐌹𐍂𐌴𐌹𐌽𐌹𐌻𐌰𐌿𐌱𐌰] 𐌾𐌰𐌹𐌽𐌰𐍂 𐌰𐍄𐌰𐌿𐌲𐌹𐌸𐍃 𐌹𐍃𐍄 𐌿𐍆.",
+       "filepage-nofile": "𐍆𐌰𐌾𐌻 𐌼𐌹𐌸 𐌸𐌰𐌼𐌼𐌰 𐌽𐌰𐌼𐌹𐌽 𐌽𐌹𐍃𐍄.",
+       "upload-disallowed-here": "𐌽𐌹 𐌼𐌰𐌲𐍄 𐌿𐍆𐌰𐍂𐌼𐌴𐌻𐌾𐌰𐌽 𐌸𐌰𐍄𐌰 𐍆𐌰𐌾𐌻.",
        "filedelete-submit": "𐍆𐍂𐌰𐌵𐌹𐍃𐍄𐌴𐌹",
        "mimesearch": "MIME 𐍃𐍉𐌺𐌴𐌹",
        "listredirects": "𐍄𐌰𐌻𐌰 𐌰𐍆 𐍄𐌰𐌹𐌺𐌾𐌰𐌽𐍃𐌴𐌹𐌳𐍉𐍃",
        "statistics": "𐍂𐌰𐌸𐌾𐍉𐌽𐍃",
        "brokenredirects-edit": "𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹",
        "brokenredirects-delete": "𐍆𐍂𐌰𐌵𐌹𐍃𐍄𐌴𐌹",
-       "nbytes": "$1 {{PLURAL:$1|ð\90\8c±ð\90\8c¹ð\90\8d\84\90\8c±ð\90\8c°𐍄𐌰}}",
+       "nbytes": "$1 {{PLURAL:$1|ð\90\8c±ð\90\8c°ð\90\8c¾ð\90\8d\84\90\8c±ð\90\8c°ð\90\8c¾𐍄𐌰}}",
        "ncategories": "$1 {{PLURAL:$1|𐌺𐌿𐌽𐌹|𐌺𐌿𐌽𐌾𐌰}}",
        "nlinks": "$1 {{PLURAL:$1|𐌲𐌰𐍅𐌹𐍃𐍃|𐌲𐌰𐍅𐌹𐍃𐍃𐌴𐌹𐍃}}",
        "nmembers": "$1 {{PLURAL:$1|𐌲𐌰𐌳𐌰𐌹𐌻𐌰|𐌲𐌰𐌳𐌰𐌹𐌻𐌰𐌽𐍃}}",
        "undelete-search-submit": "𐍃𐍉𐌺𐌴𐌹",
        "namespace": "𐌽𐌰𐌼𐌰𐍂𐌿𐌼:",
        "invert": "𐌲𐌰𐍅𐌰𐌽𐌳𐌴𐌹 𐌸𐌰𐍄𐌰 𐌲𐌰𐍅𐌰𐌻𐌹𐌳𐍉",
-       "blanknamespace": "(ð\90\8d\86ð\90\8d\82ð\90\8c¿ð\90\8c¼ð\90\8c¹ð\90\8d\83ð\90\8d\84ð\90\8d\83)",
+       "blanknamespace": "(ð\90\8c·ð\90\8c°ð\90\8c¿ð\90\8c±ð\90\8c¹ð\90\8c¸)",
        "contributions": "𐌱𐌹𐌰𐌿𐌺𐌰𐌹𐌽𐌴𐌹𐍃 𐌱𐍂𐌿𐌺𐌾𐌰𐌽𐌳𐌹𐍃 {{{{GENDER:$1|User}}",
        "mycontris": "𐌱𐌹𐌰𐌿𐌺𐌰𐌹𐌽𐌴𐌹𐍃",
        "contribsub2": "𐍆𐌰𐌿𐍂 $1 ($2)",
        "sp-contributions-newbies-sub": "Faúr niujis niutandis",
        "sp-contributions-blocklog": "Logboka af afdraúsjan",
        "sp-contributions-talk": "𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰",
+       "sp-contributions-submit": "𐍃𐍉𐌺𐌴𐌹",
        "whatlinkshere": "𐌰𐌻𐌻𐌰𐌹 𐌻𐌰𐌿𐌱𐍉𐍃 𐌸𐌰𐌹𐌴𐌹 𐌱𐍂𐌹𐌲𐌲𐌰𐌽𐌳 𐌸𐌿𐌺 𐌷𐌹𐌳𐍂𐌴",
        "whatlinkshere-title": "𐌻𐌰𐌿𐌱𐍉𐍃 𐌸𐌰𐌹𐌴𐌹 𐍄𐌰𐌹𐌺𐌽𐌾𐌰𐌽𐌳 𐌳𐌿 \"$1\"",
        "whatlinkshere-page": "𐌻𐌰𐌿𐍆𐍃:",
        "tooltip-ca-move": "𐌼𐌹𐌸𐍃𐌰𐍄𐌴𐌹 𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆",
        "tooltip-ca-watch": "𐌱𐌹𐌰𐌹𐌰𐌿𐌺 𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆 𐌳𐌿 𐌸𐌴𐌹𐌽𐌰𐌹 𐍅𐌹𐍄𐌰𐍅𐌹𐌺𐍉𐌽",
        "tooltip-search": "𐍃𐍉𐌺𐌴𐌹 {{SITENAME}}",
-       "tooltip-search-go": "ð\90\8c¾ð\90\8c°ð\90\8c±ð\90\8c°ð\90\8c¹ ð\90\8c¹ð\90\8d\83ð\90\8d\84, ð\90\8c²ð\90\8c°ð\90\8c²ð\90\8c² ð\90\8c³ð\90\8c¿ ð\90\8c»ð\90\8c°ð\90\8c¿ð\90\8c±ð\90\8c° ð\90\8c¼ð\90\8c¹ð\90\8c¸ ð\90\8d\83ð\90\8c°ð\90\8c¼ð\90\8c¹ð\90\8c½ ð\90\8c½ð\90\8c°ð\90\8c¼ð\90\8c¹ð\90\8c½.",
+       "tooltip-search-go": "ð\90\8c²ð\90\8c°ð\90\8c²ð\90\8c² ð\90\8c³ð\90\8c¿ ð\90\8c»ð\90\8c°ð\90\8c¿ð\90\8c±ð\90\8c° ð\90\8c¼ð\90\8c¹ð\90\8c¸ ð\90\8c¸ð\90\8c°ð\90\8c¼ð\90\8c¼ð\90\8c° ð\90\8c²ð\90\8c°ð\90\8c»ð\90\8c´ð\90\8c¹ð\90\8cºð\90\8c°ð\90\8c¼ð\90\8c¼ð\90\8c° ð\90\8c½ð\90\8c°ð\90\8c¼ð\90\8c¹ð\90\8c½",
        "tooltip-search-fulltext": "𐍃𐍉𐌺𐌴𐌹 𐌻𐌰𐌿𐌱𐌰𐌽𐍃 𐌸𐌰𐌹𐌼 𐌱𐍉𐌺𐍉𐌼",
        "tooltip-p-logo": "𐌲𐌰𐍅𐌴𐌹𐍃 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌻𐌰𐌿𐌱𐌹𐍃",
        "tooltip-n-mainpage": "𐌲𐌰𐍅𐌴𐌹𐍃 𐌷𐌰𐌿𐌱𐌹𐌳𐌰𐌻𐌰𐌿𐌱𐌹𐍃",
        "tooltip-t-recentchangeslinked": "𐌰𐌽𐌳𐍅𐌰𐌹𐍂𐌸𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃 𐌹𐌽 𐌻𐌰𐌿𐌱𐌰𐌼 𐌲𐌰𐍅𐌹𐌳𐌰𐌽𐌰𐌹𐌼 𐌰𐍆 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰.",
        "tooltip-feed-atom": "𐌰𐍄𐍉𐌼 𐍆𐍉𐌳𐌴𐌹𐌽𐍃 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰",
        "tooltip-t-contributions": "𐍅𐌹𐌺𐍉 𐌱𐌹𐌰𐌿𐌺𐌰𐌹𐌽𐌴 𐍆𐍂𐌰𐌼 {{GENDER:$1|𐌸𐌰𐌼𐌼𐌰 𐌱𐍂𐌿𐌺𐌾𐌹𐌽}}",
-       "tooltip-t-upload": "ð\90\8c¿ð\90\8d\83ð\90\8c·ð\90\8c»ð\90\8c°ð\90\8c¸ð\90\8c°ð\90\8c½ ð\90\8d\86ð\90\8c´ð\90\8c¹ð\90\8c»ð\90\8c°ð\90\8c½ð\90\8d\83",
+       "tooltip-t-upload": "ð\90\8c°ð\90\8d\84ð\90\8c±ð\90\8c°ð\90\8c¹ð\90\8d\82 ð\90\8d\86ð\90\8c°ð\90\8c¾ð\90\8c»ð\90\8c°",
        "tooltip-t-specialpages": "𐍅𐌹𐌺𐍉 𐌰𐌻𐌻𐌰𐌹𐌶𐌴 𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹𐌶𐌴 𐌻𐌰𐌿𐌱𐌴",
        "tooltip-t-print": "𐌿𐍃𐌼𐌴𐍂𐌴𐌹𐌽𐍃 𐌸𐌹𐍃 𐌻𐌰𐌿𐌱𐌹𐍃 𐌳𐌿 𐌿𐍃𐌼𐌴𐌻𐌾𐌰𐌽",
        "tooltip-t-permalink": "𐌰𐌹𐍅𐌴𐌹𐌽𐌰 𐌲𐌰𐍅𐌹𐍃𐍃 𐌳𐌿 𐌸𐌹𐌶𐌰𐌹 𐌰𐍆𐍄𐍂𐌰𐍃𐌹𐌿𐌽𐌰𐌹 𐌸𐌹𐍃 𐌻𐌰𐌿𐌱𐌹𐍃",
        "tooltip-ca-nstab-user": "𐍃𐌰𐌹𐍈 𐌱𐍂𐌿𐌺𐌾𐌰𐌻𐌰𐌿𐍆",
        "tooltip-ca-nstab-special": "𐍃𐌰 𐌹𐍃𐍄 𐌿𐍃𐍃𐌹𐌽𐌳𐍃 𐌻𐌰𐌿𐍆𐍃 𐌾𐌰𐌷 𐌽𐌹 𐌼𐌰𐌲 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌳𐌰.",
        "tooltip-ca-nstab-project": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐍆𐌰𐌿𐍂𐌰𐍅𐌰𐌿𐍂𐍀𐌰𐌻𐌰𐌿𐍆",
-       "tooltip-ca-nstab-image": "ð\90\8d\83ð\90\8c°ð\90\8c¹ð\90\8d\88 ð\90\8d\86ð\90\8c°ð\90\8c´ð\90\8c¹𐌻𐌰𐌻𐌰𐌿𐍆",
+       "tooltip-ca-nstab-image": "ð\90\8c±ð\90\8c°ð\90\8c½ð\90\8c³ð\90\8d\85ð\90\8c´ð\90\8c¹ ð\90\8d\86ð\90\8c°ð\90\8c¾𐌻𐌰𐌻𐌰𐌿𐍆",
        "tooltip-ca-nstab-template": "𐍃𐌰𐌹𐍈 𐍆𐌰𐌿𐍂𐌰𐌼𐌴𐌻𐌴𐌹𐌽",
        "tooltip-ca-nstab-category": "𐍃𐌰𐌹𐍈 𐌺𐌿𐌽𐌾𐌰𐌻𐌰𐌿𐍆",
        "tooltip-save": "𐌲𐌰𐍆𐌰𐍃𐍄 𐌸𐌴𐌹𐌽𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌽𐍃",
        "tooltip-preview": "𐍆𐌰𐌿𐍂𐌰𐍃𐌰𐌹𐍈 𐌸𐌴𐌹𐌽𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉𐍃. 𐌱𐌹𐌳𐌾𐌰𐌼 𐌸𐌿𐌺, 𐌱𐍂𐌿𐌺𐌴𐌹 𐌸𐌹𐍃 𐌸𐌰𐍄𐌰 𐍆𐍂𐌿𐌼𐌹𐍃𐍄 𐍆𐌰𐌿𐍂𐌸𐌹𐌶𐌴𐌹 𐌲𐌰𐍆𐌰𐍃𐍄𐌰𐌹𐍃.",
-       "tooltip-diff": "𐌰𐍄𐌰𐌿𐌲𐌴𐌹 𐍈𐌹𐌻𐌴𐌹𐌺𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌽𐍃 𐌲𐌰𐍄𐌰𐍅𐌹𐌳𐌴𐍃 𐌳𐌿 𐌸𐌰𐌹𐌼 𐌱𐍉𐌺𐍉𐌼",
+       "tooltip-diff": "𐌱𐌰𐌽𐌳𐍅𐌴𐌹 𐍈𐌹𐌻𐌴𐌹𐌺𐍉𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐌹𐌽𐍃 𐌲𐌰𐍄𐌰𐍅𐌹𐌳𐌴𐍃 𐌳𐌿 𐌸𐌰𐌹𐌼 𐌱𐍉𐌺𐍉𐌼",
+       "tooltip-watch": "𐌱𐌹𐌰𐌹𐌰𐌿𐌺 𐌸𐌰𐌽𐌰 𐌻𐌰𐌿𐍆 𐌳𐌿 𐌸𐌴𐌹𐌽𐌰𐌹 𐍅𐌹𐍄𐌰𐍅𐌹𐌺𐍉𐌽",
        "tooltip-rollback": "\"𐌰𐍆𐍅𐌰𐌻𐍅𐌴𐌹\" 𐌲𐌰𐌽𐌰𐍃𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽(𐍉𐍃) 𐌳𐌿 𐌸𐌰𐌼𐌼𐌰 𐌻𐌰𐌿𐌱𐌰 𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐌹𐍃 𐌱𐌹𐌰𐌿𐌺𐌰𐌽𐌳𐌹𐍃/𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐌰𐌹𐌶𐍉𐍃 𐌱𐌹𐌰𐌿𐌺𐌰𐌽𐌳𐌾𐍉𐍃 𐌹𐌽 𐌰𐌹𐌽𐌰𐌼𐌼𐌰 𐍃𐌹𐌽𐌸𐌰",
        "tooltip-undo": "\"𐌽𐌹𐌿𐍃𐌺𐌰𐍀𐌾𐌰𐌽\" 𐌱𐌰𐌺𐌼𐌰𐌹𐌳𐌾𐌹𐌸 𐌹𐌽𐌼𐌰𐌹𐌳𐌲𐌴𐌹𐌽𐍃 𐌾𐌰𐌷 𐌿𐍃𐌻𐌿𐌺𐍉𐌸 𐌼𐌰𐌹𐌳𐌾𐌰𐍆𐍉𐍂𐌼𐍉𐌽 𐍃𐍅𐌴 𐍆𐌰𐌿𐍂𐍃𐌰𐌹𐍈𐌰 𐌷𐌹𐍅𐌾𐌰. 𐌸𐌰𐍄𐌰 𐌻𐌴𐍄 𐌰𐌽𐌰𐌿𐌺𐌰𐌽𐌰𐌽 𐍃𐌰𐌿𐌸𐌰 𐌹𐌽 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰.",
        "tooltip-summary": "𐌰𐍄𐌲𐌰𐌲𐌲𐌹𐍃 𐌹𐌽𐌽𐌰𐌷𐌰𐌻𐌳𐌰𐌰𐌽𐌲𐌰𐌱𐌰 𐌼𐌰𐌿𐍂𐌲𐌾𐌰",
+       "pageinfo-header-edits": "𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹 𐍃𐍀𐌹𐌻𐌻",
+       "pageinfo-robot-index": "𐌰𐌽𐌳𐌻𐌴𐍄𐌰𐌽",
+       "pageinfo-firstuser": "𐌻𐌰𐌿𐌱𐌰𐍃𐌺𐌰𐍀𐌾𐌰𐌽𐌳𐍃",
+       "pageinfo-lastuser": "𐌰𐍆𐍄𐌿𐌼𐌹𐍃𐍄𐍃 𐌹𐌽𐌼𐌰𐌹𐌳𐌾𐌰𐌽𐌳𐍃",
+       "pageinfo-recent-edits": "𐌰𐌽𐌳𐍅𐌰𐌹𐍂𐌸𐌰 𐍂𐌰𐌸𐌾𐍉 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍉 (𐌹𐌽 $1)",
+       "pageinfo-recent-authors": "𐌰𐌽𐌳𐍅𐌰𐌹𐍂𐌸𐌰 𐍂𐌰𐌸𐌾𐍉 𐌼𐌹𐍃𐍃𐌰𐌻𐌴𐌹𐌺𐌰𐌹𐌶𐌴 𐌼𐌴𐌻𐌾𐌰𐌽𐌳𐌴",
+       "pageinfo-magic-words": "{{PLURAL:$1|𐌻𐌿𐌱𐌾𐌰𐌻𐌴𐌹𐍃|𐌻𐌿𐌱𐌾𐌰𐌻𐌴𐌹𐍃𐌰}} {{PLURAL:$1|𐍅𐌰𐌿𐍂𐌳|𐍅𐌰𐌿𐍂𐌳𐌰}} ($1)",
        "pageinfo-toolboxlink": "𐌺𐌿𐌽𐌸𐌹 𐌻𐌰𐌿𐌱𐌹𐍃",
+       "pageinfo-contentpage-yes": "𐌾𐌰𐌹",
        "previousdiff": "← 𐍆𐌰𐌹𐍂𐌽𐌹𐌶𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃",
        "nextdiff": "𐌽𐌹𐌿𐌾𐌹𐌶𐌴𐌹 𐌹𐌽𐌼𐌰𐌹𐌳𐌴𐌹𐌽𐍃 →",
        "file-info-size": "$1 × $2 𐍀𐌹𐌺𐍃𐌴𐌻𐌰, 𐍆𐌴𐌹𐌻𐍅𐌰𐌷𐍃𐍄𐌿𐍃: $3, 𐌼𐌹𐌼𐌴 𐌺𐌿𐌽𐌹: $4",
-       "show-big-image": "ð\90\8d\86ð\90\8d\82ð\90\8c¿ð\90\8c¼ð\90\8c¹ð\90\8d\83ð\90\8d\84 ð\90\8d\86ð\90\8c°ð\90\8c´ð\90\8c¹𐌻",
+       "show-big-image": "ð\90\8d\86ð\90\8d\82ð\90\8c¿ð\90\8c¼ð\90\8c¹ð\90\8d\83ð\90\8d\84 ð\90\8d\86ð\90\8c°ð\90\8c¾𐌻",
        "show-big-image-preview": "𐌼𐌹𐌺𐌹𐌻𐌴𐌹 𐌸𐌹𐌶𐍉𐍃 𐍆𐌰𐌿𐍂𐌰𐍃𐌹𐌿𐌽𐌰𐌹𐍃: $1.",
        "show-big-image-size": "$1 × $2 𐍆𐍂𐌹𐍃𐌰𐌷𐍄𐌹𐍃𐍄𐌰𐌱𐌴𐌹𐍃",
        "ilsubmit": "𐍃𐍉𐌺𐌴𐌹",
        "namespacesall": "𐌰𐌻𐌻",
        "monthsall": "𐌰𐌻𐌻",
        "imgmultigo": "𐌲𐌰𐌲𐌲!",
+       "imgmultigoto": "𐌲𐌰𐌲𐌲 𐌳𐌿 𐌻𐌰𐌿𐌱𐌰 $1",
        "table_pager_limit_submit": "Affgaggan",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|𐌲𐌰𐍅𐌰𐌿𐍂𐌳𐌾𐌰]])",
        "version-other": "Anþar",
        "version-poweredby-translators": "translatewiki.net 𐌲𐌰𐍃𐌺𐌴𐌹𐍂𐌾𐌰𐌽𐍃",
+       "redirect-submit": "𐌲𐌰𐌲𐌲",
+       "redirect-value": "𐍅𐌰𐌹𐍂𐌸:",
+       "redirect-revision": "𐌰𐍆𐍄𐍂𐌰𐍃𐌹𐌿𐌽𐍃 𐌻𐌰𐌿𐌱𐌹𐍃",
+       "redirect-file": "𐍆𐌰𐌾𐌻𐌰𐌽𐌰𐌼𐍉",
        "specialpages": "𐌿𐍃𐍃𐌹𐌽𐌳𐌰𐌹 𐌻𐌰𐌿𐌱𐍉𐍃",
        "tag-filter": "[[Special:Tags|𐍄𐌰𐌹𐌺𐌽𐍉𐍃]] 𐍆𐌹𐌻𐌷𐌰",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|𐍃𐍉𐌺𐌴𐌹𐌽𐌹𐍅𐌰𐌿𐍂𐌳|𐍃𐍉𐌺𐌴𐌹𐌽𐌹𐍅𐌰𐌿𐍂𐌳𐌰}}]]: $2)",
        "logentry-move-move": "$1 {{GENDER:$2|𐌼𐌹𐌸𐍃𐌰𐍄𐌹𐌳𐌰}} 𐌻𐌰𐌿𐍆 $3 𐌳𐌿 $4",
        "logentry-newusers-create": "𐌱𐍂𐌿𐌺𐌾𐌰𐌺𐌰𐍅𐍄𐍃𐌾𐍉 $1 𐍅𐌰𐍃 {{{{GENDER:$2|𐌲𐌰𐍃𐌺𐌰𐍀𐌰𐌽𐌰}}",
        "rightsnone": "(𐌽𐌹)",
-       "searchsuggest-search": "𐍃𐍉𐌺𐌴𐌹"
+       "searchsuggest-search": "𐍃𐍉𐌺𐌴𐌹",
+       "duration-days": "$1 {{PLURAL:$1|𐌳𐌰𐌲𐍃|𐌳𐌰𐌲𐍉𐍃}}"
 }
index 27758c3..5ba4bd7 100644 (file)
        "pool-timeout": "સમય સમાપ્ત -  સ્થગિતતા પ્રતિક્ષીત",
        "pool-queuefull": "(Pool) કતાર પૂરી ભરેલી છે",
        "pool-errorunknown": "અજ્ઞાત ત્રુટિ",
+       "pool-servererror": "પૂલ કાઉન્ટર સેવા ઉપલબ્ધ નથી ($1)",
        "poolcounter-usage-error": "વપરાશ ક્ષતિ: $1",
        "aboutsite": "{{SITENAME}} વિષે",
        "aboutpage": "Project:વિષે",
        "laggedslavemode": "\"ચેતવણી:\" પાનું તાજેતરના ફેરફાર ધરાવતું નથી.",
        "readonly": "ડેટાબેઝ સ્થગિત",
        "enterlockreason": "સ્થગિતતા ક્યારે દુર કરાશે તેના અંદાજ શાથે,સ્થગિત કરવાનું કારણ આપો",
-       "readonlytext": "નવી નોંધો અને ફેરફારો માટે ડેટાબેઝ હાલમાં સ્થગિત કરાયેલ છે,કદાચ નિયમિત ડેટાબેઝ સારસંભાળ માટે,તે પછી આ ફરી સામાન્ય થશે.\n\nસ્થગિત કરનાર પ્રબંધકનો ખુલાસો: $1",
+       "readonlytext": "નવી નોંધો અને ફેરફારો માટે ડેટાબેઝ હાલમાં સ્થગિત કરાયેલ છે,કદાચ નિયમિત ડેટાબેઝ સારસંભાળ માટે,તે પછી આ ફરી સામાન્ય થશે.\n\n\nસિસ્ટમ સંચાલક જેણે તેને લૉક કર્યું છે, તે આ સમજૂતી આપે છે: $1",
        "missing-article": "ડેટાબેઝને પાનાનાં જે શબ્દો (\"$1\" $2) મળવા જોઈતા હતા તે મળ્યા નથી.\n\nઆવું સામાન્ય રીતે ત્યારે બને જ્યારે તમે તફાવત કે ઈતિહાસની એવી જુની કડીને અનુસરીને અહીં આવ્યા હોવ કે જે પાનું હટાવી દીધું હોય.\n\nજો તમને ખાતરી છે કે આવું નથી, તો તમારા ભાગે સોફ્ટવેરમાં રહેલી ત્રુટી આવી છે.\nકૃપા કરી આ વાત, જે તે પાનાની પૂર્ણ યુ.આર.એલ. (URL) કડી સાથે, તમારા [[Special:ListUsers/sysop|પ્રબંધક]]ના ધ્યાન પર લાવો.",
        "missingarticle-rev": "(પુનરાવર્તન#: $1)",
        "missingarticle-diff": "(ભેદ: $1, $2)",
        "readonly_lag": "કનિષ્ઠ માહિતીસંચ સર્વરો મુખ્ય સર્વર સુધી પહોંચી ત્યા સુધી આ માહિતીસંચ પર સ્વયંચલિત રીતે તાળું મરાયું છે",
        "internalerror": "આંતરિક ત્રુટિ",
        "internalerror_info": "આંતરિક ત્રુટિ: $1",
+       "internalerror-fatal-exception": "\"$1\" પ્રકારનો ઘાતક અપવાદ",
        "filecopyerror": "\"$1\" થી \"$2\"માં નકલ નિષ્ફળ.",
        "filerenameerror": "\"$1\" નું નામ બદલીને \"$2\" કરવામાં નિષ્ફળ.",
        "filedeleteerror": "\"$1\" ફાઇલ હટાવી ન શકાઇ.",
        "directorycreateerror": "ડિરેક્ટરી \"$1\" ન બનાવી શકાઇ.",
+       "directoryreadonlyerror": "ડિરેક્ટરી \"$1\" ફક્ત વાંચવા માટે છે.",
+       "directorynotreadableerror": "ડિરેક્ટરી \"$1\" વાંચી શકાય તેવું નથી.",
        "filenotfound": "ફાઇલ \"$1\" ન મળી.",
        "unexpected": "અણધારી કિંમત: \"$1\"=\"$2\".",
        "formerror": "ત્રુટિ: પત્રક રજૂ થયું નહીં",
        "cannotdelete": "ફાઇલ કે પાનું \"$1\" હટાવી શકાયું નથી.\nશક્ય છે કે અન્ય કોઈએ પહેલેથી હટાવી દીધું હોય.",
        "cannotdelete-title": "\"$1\" પાનું કાઢી શકતા નથી",
        "delete-hook-aborted": "દૂર કરવાનું હૂક વડે રોકી રાખવામાં આવ્યું.\nતે કોઇ કારણ આપતું નથી.",
+       "no-null-revision": "પૃષ્ઠ \"$1\" માટે નવો નલ પુનરાવર્તન બનાવી શક્યું નથી",
        "badtitle": "ખરાબ શિર્ષક",
        "badtitletext": "આપનું ઈચ્છિત શીર્ષક અમાન્ય છે, ખાલી છે, અથવાતો અયોગ્ય રીતે આંતર-ભાષિય કે આંતર-વિકિ સાથે જોડાયેલું શીર્ષક છે.\nશક્ય છે કે તેમાં એક કે વધુ એવા અક્ષર કે ચિહ્નો છે કે જે પાનાનાં શીર્ષક માટે અવૈધ છે.",
+       "title-invalid-empty": "વિનંતી કરેલું પાનું શીર્ષક ખાલી છે અથવા તેમાં ફક્ત નામસ્થળનું નામ છે.",
+       "title-invalid-utf8": "વિનંતી કરાયેલ પૃષ્ઠ શીર્ષકમાં અમાન્ય UTF-8 ક્રમ છે.",
+       "title-invalid-interwiki": "માગણી કરેલ પૃષ્ઠ શીર્ષકમાં એક આંતરવિકિ કડી છે જેનો ઉપયોગ શીર્ષકમાં કરી શકાતો નથી.",
+       "title-invalid-talk-namespace": "વિનંતી કરાયેલ પાનું શીર્ષક એવા ચર્ચા પૃષ્ઠનો ઉલ્લેખ કરે છે જે અસ્તિત્વમાં નથી.",
+       "title-invalid-characters": "માગણી કરેલ પૃષ્ઠ શીર્ષકમાં અમાન્ય અક્ષરો છે: \"$1\".",
        "perfcached": "નીચે દર્શાવેલી માહિતી જૂના સંગ્રહમાંથી લીધેલી છે અને શક્ય છે કે તે હાલની પરિસ્થિતિમાં સચોટ ના હોય. વધુમાં વધુ {{PLURAL:$1|એક પરિણામ|$1 પરિણામો}} આ સંગ્રહમાં ઉપલબ્ધ છે.",
        "perfcachedts": "નીચેની વિગતો જૂના સંગ્રહમાથી છે અને તે છેલ્લે $1એ તાજી કરવામાં આવી હતી. વધુમાં વધુ {{PLURAL:$4|એક પરિણામ|$4 પરિણામો}} આ સંગ્રહમાં ઉપલબ્ધ છે.",
        "querypage-no-updates": "આ પાનાની નવી આવૃત્તિઓ હાલમાં અક્રિય છે.\nઅહીંની વિગતો હાલમાં રિફ્રેશ કરવામાં નહી આવે.",
        "password-change-forbidden": "તમે આ વિકિ માટે પાસવર્ડ્સ બદલી શકતા નથી.",
        "externaldberror": "પ્રમાણભૂતતાની ત્રુટી આવી અથવા તમારૂ બહારનુ ખાતું અપડેટ કરવાનો અધિકાર તમને નથી.",
        "login": "પ્રવેશ",
+       "login-security": "તમારી ઓળખ ચકાસો",
        "nav-login-createaccount": "પ્રવેશ કરો / નવું ખાતું ખોલો",
        "logout": "પ્રસ્થાન",
        "userlogout": "પ્રસ્થાન/લૉગ આઉટ",
index b4f87e5..bc33cb3 100644 (file)
        "parser-template-loop-warning": "נמצאה תבנית הקוראת לעצמה: [[$1]]",
        "template-loop-category": "דפים עם לולאות בתבנית",
        "template-loop-category-desc": "הדף הזה מכיל לולאה בתבנית, כלומר תבנית שקוראת לעצמה באופן רקורסיבי.",
+       "template-loop-warning": "<strong>אזהרה:</strong> הדף הזה קורא ל[[:$1]], וזה גורם ללולאה בתבנית (קריאה רקורסיבית אינסופית).",
        "parser-template-recursion-depth-warning": "עומק התבניות המוכללות זו בזו עבר את המגבלה ($1)",
        "language-converter-depth-warning": "עומק ממיר השפה עבר את המגבלה ($1)",
        "node-count-exceeded-category": "דפים שבהם מספר הצמתים גדול מדי",
        "timezoneregion-indian": "האוקיינוס ההודי",
        "timezoneregion-pacific": "האוקיינוס השקט",
        "allowemail": "לאפשר למשתמשים לשלוח לי דואר אלקטרוני",
+       "email-blacklist-label": "חסימת המשתמשים הבאים משליחת דואר אלקטרוני אליי:",
        "prefs-searchoptions": "חיפוש",
        "prefs-namespaces": "מרחבי שם",
        "default": "ברירת המחדל",
        "prefs-editor": "חלון העריכה",
        "prefs-preview": "תצוגה מקדימה",
        "prefs-advancedrc": "אפשרויות מתקדמות",
+       "prefs-opt-out": "ביטול שיפורים",
        "prefs-advancedrendering": "אפשרויות מתקדמות",
        "prefs-advancedsearchoptions": "אפשרויות מתקדמות",
        "prefs-advancedwatchlist": "אפשרויות מתקדמות",
        "rcfilters-restore-default-filters": "שחזור למסנני ברירת המחדל",
        "rcfilters-clear-all-filters": "מחיקת כל המסננים",
        "rcfilters-show-new-changes": "הצגת השינויים החדשים ביותר",
-       "rcfilters-search-placeholder": "ס×\99× ×\95×\9f ×©×\99× ×\95×\99×\99×\9d ×\90×\97ר×\95× ×\99×\9d (×¢×\99×\99× ×\95 ×\90×\95 ×\94ת×\97×\99×\9c×\95 ×\9c×\94ק×\9c×\99×\93)",
+       "rcfilters-search-placeholder": "תפר×\99×\98 ×\94×\9eסננ×\99×\9d ×\94ר×\90ש×\99",
        "rcfilters-invalid-filter": "מסנן בלתי־תקין",
        "rcfilters-empty-filter": "אין מסננים פעילים. כל התרומות מוצגות.",
        "rcfilters-filterlist-title": "מסננים",
        "rcfilters-watchlist-markseen-button": "סימון כל השינויים כאילו נצפו",
        "rcfilters-watchlist-edit-watchlist-button": "עריכת רשימת הדפים במעקב שלך",
        "rcfilters-watchlist-showupdated": "שינויים בדפים שלא ביקרת בהם מאז ביצוע השינויים מופיעים בכתב <strong>מודגש</strong>, ומודגשים בצבע.",
+       "rcfilters-preference-label": "הסתרת הגרסה המשופרת של השינויים האחרונים",
+       "rcfilters-preference-help": "ביטול של העיצוב מחדש של הממשק (שבוצע בשנת 2017) ושל כל הכלים שנוספו אז ומאז.",
        "rcnotefrom": "להלן {{PLURAL:$5|השינוי שבוצע|השינויים שבוצעו}} מאז <strong>$3, $4</strong> (מוצגים עד <strong>$1</strong>).",
        "rclistfromreset": "איפוס בחירת התאריך",
        "rclistfrom": "הצגת שינויים חדשים החל מ־$2, $3",
        "uploadbtn": "העלאת הקובץ",
        "reuploaddesc": "ביטול ההעלאה וחזרה לטופס העלאת קבצים לשרת",
        "upload-tryagain": "שליחת התיאור החדש של הקובץ",
+       "upload-tryagain-nostash": "שליחת הקובץ המועלה מחדש והתיאור המעודכן",
        "uploadnologin": "לא נכנסת לחשבון",
        "uploadnologintext": "נדרשת $1 כדי להעלות קבצים.",
        "upload_directory_missing": "שרת האינטרנט אינו יכול ליצור את תיקיית ההעלאות ($1) החסרה.",
        "uploadlogpage": "יומן העלאות",
        "uploadlogpagetext": "להלן רשימה של העלאות הקבצים האחרונות שבוצעו.\nראו את [[Special:NewFiles|גלריית הקבצים החדשים]] להצגה ויזואלית שלהם.",
        "filename": "שם הקובץ",
-       "filedesc": "<div style=\"direction: rtl;\">תקציר</div>",
+       "filedesc": "תקציר",
        "fileuploadsummary": "תיאור:",
        "filereuploadsummary": "השינויים בקובץ:",
        "filestatus": "מעמד זכויות יוצרים:",
        "file-deleted-duplicate-notitle": "קובץ זהה לקובץ זה נמחק בעבר, והכותרת שלו הועלמה.\nיש לבקש ממשתמש שיכול לראות נתונים על קבצים שהועלמו לבדוק את המצב לפני העלאת הקובץ מחדש.",
        "uploadwarning": "אזהרת העלאת קבצים",
        "uploadwarning-text": "אנא שנו את תיאור הקובץ שלמטה ונסו שוב.",
+       "uploadwarning-text-nostash": "יש להעלות מחדש את הקובץ, לשנות את התיאור להלן ולנסות שוב.",
        "savefile": "שמירת קובץ",
        "uploaddisabled": "העלאת קבצים מבוטלת.",
        "copyuploaddisabled": "העלאת קבצים מכתובת URL מבוטלת.",
        "upload-curl-error28": "הסתיים זמן ההמתנה להעלאה",
        "upload-curl-error28-text": "לאתר לקח זמן רב מדי לענות. אנא בדקו שהאתר זמין, המתינו מעט ונסו שוב. ייתכן שתרצו לנסות בזמן פחות עמוס.",
        "license": "רישיון:",
-       "license-header": "<div style=\"direction: rtl;\">רישיון</div>",
+       "license-header": "רישיון",
        "nolicense": "אין",
        "licenses-edit": "עריכת אפשרויות רישיון",
        "license-nopreview": "(תצוגה מקדימה לא זמינה)",
        "listfiles_size": "גודל",
        "listfiles_description": "תיאור",
        "listfiles_count": "גרסאות",
-       "listfiles-show-all": "×\9b×\95×\9c×\9c ×\92רס×\90×\95ת ×\99שנ×\95ת ×©×\9c ×ª×\9e×\95× ×\95ת",
+       "listfiles-show-all": "×\9b×\95×\9c×\9c ×\92רס×\90×\95ת ×\99שנ×\95ת ×©×\9c ×§×\91צ×\99×\9d",
        "listfiles-latestversion": "גרסה נוכחית",
        "listfiles-latestversion-yes": "כן",
        "listfiles-latestversion-no": "לא",
        "sp-contributions-newonly": "הצגת עריכות שהן יצירות של דפים בלבד",
        "sp-contributions-hideminor": "הסתרת עריכות משניות",
        "sp-contributions-submit": "חיפוש",
+       "sp-contributions-outofrange": "לא ניתן להציג תוצאות. טווח ה־IP המבוקש גדול יותר ממגבלת ה־CIDR, שהיא /$1.",
        "whatlinkshere": "דפים המקושרים לכאן",
        "whatlinkshere-title": "דפים המקשרים לדף \"$1\"",
        "whatlinkshere-page": "דף:",
index 243da8f..9ab7810 100644 (file)
        "createacct-yourpassword-ph": "Unesite zaporku",
        "yourpasswordagain": "Ponovno upišite zaporku",
        "createacct-yourpasswordagain": "Potvrdi zaporku",
-       "createacct-yourpasswordagain-ph": "Unesite zaporku ponovno",
+       "createacct-yourpasswordagain-ph": "Unesite zaporku ponovo",
        "userlogin-remembermypassword": "Zapamti me",
        "userlogin-signwithsecure": "Rabi sigurnu vezu",
        "cannotlogin-title": "Prijava nije moguća",
        "notloggedin": "Niste prijavljeni",
        "userlogin-noaccount": "Nemate suradnički račun?",
        "userlogin-joinproject": "Pridružite se {{SITENAME}}",
-       "createaccount": "Otvori novi suradnički račun",
+       "createaccount": "Stvori račun",
        "userlogin-resetpassword-link": "Zaboravili ste zaporku?",
        "userlogin-helplink2": "Pomoć pri prijavi",
        "userlogin-loggedin": "Već ste prijavljeni kao {{GENDER:$1|$1}}.\nRabite donji obrazac da biste se prijavili kao drugi suradnik.",
-       "userlogin-reauth": "Morate se ponovno prijaviti da biste potvrdili da ste Vi {{GENDER:$1|$1}}.",
+       "userlogin-reauth": "Morate se ponovo prijaviti da biste potvrdili da ste Vi {{GENDER:$1|$1}}.",
        "userlogin-createanother": "Stvori još jedan račun",
        "createacct-emailrequired": "Adresa e-pošte",
        "createacct-emailoptional": "Adresa e-pošte",
        "createaccountmail-help": "Može se rabiti da se nekome stvori račun bez da se sazna zaporka.",
        "createacct-realname": "Stvarno ime (neobvezatno)",
        "createacct-reason": "Razlog",
-       "createacct-reason-ph": "Zašto stvarate drugi račun",
+       "createacct-reason-ph": "Zašto stvarate još jedan račun?",
        "createacct-reason-help": "Poruka koja se prikazuje u evidenciji stvaranja suradničkih računa",
        "createacct-submit": "Stvorite svoj suradnički račun",
        "createacct-another-submit": "Otvori račun",
        "createacct-benefit-heading": "{{SITENAME}} su stvorili ljudi poput Vas.",
        "createacct-benefit-body1": "{{PLURAL:$1|uređivanje|uređivanja}}",
        "createacct-benefit-body2": "{{PLURAL:$1|stranica|stranice|stranica}}",
-       "createacct-benefit-body3": "{{PLURAL:$1|nedavni suradnik|nedavnih suradnika}}",
+       "createacct-benefit-body3": "{{PLURAL:$1|nedavni suradnik|nedavna suradnika|nedavnih suradnika}}",
        "badretype": "Unesene zaporke nisu istovjetne.",
        "usernameinprogress": "Stvaranje računa za ovo suradničko ime upravo je u tijeku.\nMolimo, pričekajte.",
        "userexists": "Uneseno suradničko ime već je u upotrebi.\nUnesite neko drugo ime.",
        "protectedpagewarning": "'''UPOZORENJE: Ova stranica je zaključana i mogu je uređivati samo suradnici s administratorskim pravima.'''\nPosljednja stavka u evidenciji navedena je niže kao napomena:",
        "semiprotectedpagewarning": "'''Napomena:''' Ova stranica je zaključana tako da je mogu uređivati samo prijavljeni suradnici.\nPosljednja stavka u evidenciji navedena je niže kao napomena:",
        "cascadeprotectedwarning": "'''UPOZORENJE:''' Ova stranica je zaključana i mogu je uređivati samo suradnici s administratorskim pravima, jer je uključena u {{PLURAL:$1|slijedeću stranicu|slijedeće stranice}} koje su zaštićene \"prenosivom\" zaštitom:",
-       "titleprotectedwarning": "'''UPOZORENJE:  Ova stranica je zaključana i samo je suradnici s [[Special:ListGroupRights|dodatnim pravima]] mogu stvoriti.'''\nPosljednja stavka u evidenciji navedena je niže kao napomena:",
+       "titleprotectedwarning": "<strong>Upozorenje: Ova je stranica zaključana i samo ju suradnici s [[Special:ListGroupRights|određenim pravima]] mogu stvoriti.</strong>\nPosljednja stavka u evidenciji navedena je niže kao napomena:",
        "templatesused": "{{PLURAL:$1|Predložak koji se rabi|Predlošci koji se rabe}} na ovoj stranici:",
        "templatesusedpreview": "{{PLURAL:$1|Predložak koji se rabi|Predlošci koji se rabe}} u ovom predpregledu:",
        "templatesusedsection": "{{PLURAL:$1|Predložak koji se rabi|Predlošci koji se rabe}} u ovom odjeljku:",
        "prefs-misc": "Razno",
        "prefs-resetpass": "promijeni zaporku",
        "prefs-changeemail": "promijeni ili ukloni adresu e-pošte",
-       "prefs-setemail": "Postavite E-mail adresu",
+       "prefs-setemail": "Postavite adresu e-pošte",
        "prefs-email": "Mogućnosti e-maila",
        "prefs-rendering": "Izgled",
        "saveprefs": "Spremi",
index fdfe56b..f657842 100644 (file)
@@ -48,7 +48,8 @@
                        "BanKris",
                        "Notramo",
                        "Urbalazs",
-                       "Bencemac"
+                       "Bencemac",
+                       "Rodrigo"
                ]
        },
        "tog-underline": "Hivatkozások aláhúzása:",
        "permissionserrorstext-withaction": "Nincs jogosultságod a következő művelet elvégzéséhez: $2, a következő {{PLURAL:$1|ok|okok}} miatt:",
        "contentmodelediterror": "Nem szerkesztheted ezt a változatot, mert a tartalommodellje <code>$1</code>, ami eltér a jelenlegitől (<code>$2</code>).",
        "recreate-moveddeleted-warn": "'''Figyelem! Olyan lapot készülsz létrehozni, amit már legalább egyszer töröltek.'''\n\nMielőtt létrehoznád, nézd meg, miért törölték a lap korábbi tartalmát, és győződj meg róla, hogy a törlés indoka érvényes-e még. A törlési és átnevezési naplókban az érintett lapról az alábbi bejegyzések szerepelnek:",
-       "moveddeleted-notice": "Az oldal korábban törölve lett.\nA lap törlési és átnevezési naplója alább olvasható.",
+       "moveddeleted-notice": "Az oldal korábban törölve lett.\nA lap törlési, védelmi és átnevezési naplója alább olvasható.",
        "moveddeleted-notice-recent": "Sajnáljuk, az oldalt nemrég törölték (az elmúlt 24 órában).\nA részletekért lásd lentebb a törlési, védelmi és átnevezési naplót.",
        "log-fulllog": "Teljes napló megtekintése",
        "edit-hook-aborted": "A szerkesztés meg lett szakítva egy hook által.\nNem lett magyarázat csatolva.",
        "parser-template-loop-warning": "Végtelen ciklus a következő sablonban: [[$1]]",
        "template-loop-category": "Lapok végtelen sablonciklusokkal",
        "template-loop-category-desc": "A lap végtelen sablonciklust tartalmaz, vagyis egy sablon önmagát hívja meg rekurzívan.",
+       "template-loop-warning": "<strong>Figyelem:</strong> Ez a lap hivatkozik ide: [[:$1]] amivel a sablon hivatkozás végtelen hurokba kerül (logikailag nem érvényes).",
        "parser-template-recursion-depth-warning": "A sablon rekurzív beillesztésének mélysége átlépte a határértéket ($1)",
        "language-converter-depth-warning": "A nyelvátalakító rekurzióinak száma túllépve ($1)",
        "node-count-exceeded-category": "Túl sok csomópontot tartalmazó lapok",
        "prefs-editwatchlist-clear": "A figyelőlista kiürítése",
        "prefs-watchlist-days": "A figyelőlistában mutatott napok száma:",
        "prefs-watchlist-days-max": "Legfeljebb $1 {{PLURAL:$1|nap|nap}}",
-       "prefs-watchlist-edits": "A kiterjesztett figyelőlistán mutatott szerkesztések száma:",
+       "prefs-watchlist-edits": "A figyelőlistán megjelenő szerkesztések maximális száma:",
        "prefs-watchlist-edits-max": "Legfeljebb 1000",
        "prefs-watchlist-token": "A figyelőlista kulcsa:",
        "prefs-misc": "Egyéb",
        "timezoneregion-indian": "Indiai-óceán",
        "timezoneregion-pacific": "Csendes-óceán",
        "allowemail": "E-mail engedélyezése más szerkesztőktől",
+       "email-blacklist-label": "Letiltás ezen felhasználóknak, hogy e-mailt küldhessenek nekem",
        "prefs-searchoptions": "Keresés",
        "prefs-namespaces": "Névterek",
        "default": "alapértelmezett",
        "recentchanges-submit": "Megjelenítés",
        "rcfilters-tag-remove": "$1 eltávolítása",
        "rcfilters-legend-heading": "<strong>Rövidítések listája:</strong>",
+       "rcfilters-other-review-tools": "<strong>Egyéb hasznos hivatkozások</strong>",
+       "rcfilters-group-results-by-page": "Csoportosítás eredményei lapok szerint",
        "rcfilters-grouping-title": "Csoportosítás",
        "rcfilters-activefilters": "Aktív szűrők",
        "rcfilters-advancedfilters": "Haladó szűrők",
        "rcfilters-highlighted-filters-list": "Kiemelve: $1",
        "rcfilters-quickfilters": "Mentett szűrők",
        "rcfilters-quickfilters-placeholder-title": "Nincs mentett hivatkozás",
+       "rcfilters-quickfilters-placeholder-description": "Hogy elmentsd szűrőid beállításait és később újra használhasd őket, kattints a könyvjelző ikonra az „aktív szűrők” mezőben, feljebb.",
        "rcfilters-savedqueries-defaultlabel": "Mentett szűrők",
        "rcfilters-savedqueries-rename": "Átnevezés",
        "rcfilters-savedqueries-setdefault": "Beállítás alapértelmezettként",
        "rcfilters-empty-filter": "Nincs aktív szűrő. Minden közreműködés látható.",
        "rcfilters-filterlist-title": "Szűrők",
        "rcfilters-filterlist-whatsthis": "Hogy működnek?",
-       "rcfilters-filterlist-feedbacklink": "Visszajelzés küldése az új (beta) szűrőkről",
+       "rcfilters-filterlist-feedbacklink": "Mond el nekünk, mit gondolsz az (új) szűrőkről",
        "rcfilters-highlightbutton-title": "Kiemelt találatok",
        "rcfilters-highlightmenu-title": "Válassz egy színt",
        "rcfilters-highlightmenu-help": "Válassz színt ennek a tulajdonságnak kijelöléséhez",
        "rcfilters-filterlist-noresults": "Nem található szűrő",
        "rcfilters-noresults-conflict": "Nincs találat, mert a keresési kritériumok konfliktusban vannak",
        "rcfilters-state-message-subset": "Ennek a szűrőnek nincs hatása, mert az eredményét {{PLURAL:$2|tartalmazza a következő, nagyobb szűrő|tartalmazzák a következő, nagyobb szűrők}} (próbáld meg kiemelni a megkülönböztetéshez): $1",
-       "rcfilters-state-message-fullcoverage": "Az összes szűrő kijelölése egy csoportban ugyanaz, mint ha semmit nem választanál ki, így ennek a szűrőnek nincs hatása. A csoport tartalmazza: $1",
+       "rcfilters-state-message-fullcoverage": "Az összes szűrő kijelölése ebben a csoportban ugyanaz, mintha semmit nem választanál ki, így ennek a szűrőnek nincs hatása. A csoport tartalmazza: $1",
        "rcfilters-filtergroup-authorship": "Hozzájárulás szerzője",
        "rcfilters-filter-editsbyself-label": "Saját változtatásaid",
        "rcfilters-filter-editsbyself-description": "A te hozzájárulásaid.",
        "rcfilters-filter-editsbyother-label": "Mások módosításai",
        "rcfilters-filter-editsbyother-description": "Minden változtatás a tieidet kivéve.",
-       "rcfilters-filtergroup-userExpLevel": "Tapasztalati szint (csak regisztrált felhasználók)",
+       "rcfilters-filtergroup-userExpLevel": "Felhasználói regisztráció és tapasztalat",
        "rcfilters-filter-user-experience-level-registered-label": "Regisztrált",
        "rcfilters-filter-user-experience-level-registered-description": "Bejelentkezett szerkesztők.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Nem regisztrált",
        "rcfilters-filter-watchlist-watchednew-description": "A figyelőlistádon szereplő lapokon az utolsó látogatásod után történt változtatások.",
        "rcfilters-filter-watchlist-notwatched-label": "Figyelőlistán nem szereplők",
        "rcfilters-filter-watchlist-notwatched-description": "Minden változtatás, kivéve a figyelőlistádon szereplő lapoké.",
+       "rcfilters-filtergroup-watchlistactivity": "Figyelőlista aktivitás",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Még nem látott változtatások",
+       "rcfilters-filter-watchlistactivity-unseen-description": "A figyelőlistádon szereplő lapokon az utolsó látogatásod után történt változtatások.",
+       "rcfilters-filter-watchlistactivity-seen-label": "Változtatások megtekintése",
        "rcfilters-filtergroup-changetype": "Változtatás típusa",
        "rcfilters-filter-pageedits-label": "Lapszerkesztések",
        "rcfilters-filter-pageedits-description": "A wiki tartalom szerkesztése, beszélgetések, kategória leírások...",
        "rcfilters-filter-previousrevision-description": "Minden változtatás a legutóbbiak kivételével",
        "rcfilters-filter-excluded": "Kizárva",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:nem</strong> $1",
+       "rcfilters-exclude-button-off": "A kiválasztottak kizárása",
+       "rcfilters-exclude-button-on": "A kiválasztottak kizárva",
        "rcfilters-view-advanced-filters-label": "Haladó szűrők",
        "rcfilters-view-tags": "Megjelölt szerkesztések",
        "rcfilters-view-namespaces-tooltip": "Találatok szűrése névtér szerint",
        "rcfilters-view-return-to-default-tooltip": "Vissza a főszűrőmenübe.",
        "rcfilters-liveupdates-button": "Élő frissítések",
        "rcfilters-liveupdates-button-title-on": "Élő frissítések kikapcsolása",
+       "rcfilters-liveupdates-button-title-off": "A legfrissebb változtatások mutatása, amint megtörténnek",
        "rcfilters-watchlist-markseen-button": "Összes változtatás megjelölése olvasottként",
+       "rcfilters-watchlist-edit-watchlist-button": "A figyelőlistád szerkesztése",
+       "rcfilters-watchlist-showupdated": "Az újabb változtatások amiket még nem néztél meg, <strong>vastaggal jelöltük</strong>",
+       "rcfilters-preference-label": "A friss változtatások fejlesztett változatának elrejtése",
        "rcnotefrom": "Alább a <strong>$3 $4</strong> óta történt változtatások láthatóak (legfeljebb <b>$1</b> db).",
        "rclistfromreset": "Dátumválasztás visszaállítása",
        "rclistfrom": "$3, $2 után történt változtatások megtekintése",
        "file-deleted-duplicate-notitle": "Egy ugyanilyen fájlt korábban már töröltek, és címét eltávolították. Kérj meg valakit, aki meg tudja nézni a törölt fájlokat, hogy tekintse át a helyzetet, mielőtt újra feltöltenéd a fájlt.",
        "uploadwarning": "Feltöltési figyelmeztetés",
        "uploadwarning-text": "Kérlek, módosítsd a fájl leírását alább, majd próbáld újra.",
+       "uploadwarning-text-nostash": "Kérjük próbálkozz újra: ismét töltsd fel a fájlt és változtass a leírásán.",
        "savefile": "Fájl mentése",
        "uploaddisabled": "Feltöltések kikapcsolva",
        "copyuploaddisabled": "A feltöltés URL alapján le van tiltva.",
        "listfiles_size": "Méret",
        "listfiles_description": "Leírás",
        "listfiles_count": "Változatok",
-       "listfiles-show-all": "A képek régebbi verzióját is",
+       "listfiles-show-all": "Tartalmazza a fájlok régebbi verzióját is",
        "listfiles-latestversion": "Aktuális változat",
        "listfiles-latestversion-yes": "Igen",
        "listfiles-latestversion-no": "Nem",
        "pageswithprop-legend": "Lap tulajdonsággal rendelkező lapok",
        "pageswithprop-text": "Ez a lap azokat a lapokat listázza, amelyek egy adott lap tulajdonsággal rendelkeznek.",
        "pageswithprop-prop": "Tulajdonságnév:",
+       "pageswithprop-reverse": "Rendezze fordított sorrendbe",
        "pageswithprop-submit": "Ugrás",
        "pageswithprop-prophidden-long": "hosszú szöveg tulajdonság elrejtve ($1)",
        "pageswithprop-prophidden-binary": "bináris tulajdonság érték rejtett ($1)",
        "delete-warning-toobig": "Ennek a lapnak a laptörténete több mint {{PLURAL:$1|egy|$1}} változatot őriz. Törlése fennakadásokat okozhat a wiki adatbázis-műveleteiben; óvatosan járj el.",
        "deleteprotected": "Nem tudod törölni a lapot, mivel le van védve.",
        "deleting-backlinks-warning": "<strong>Figyelem:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Más lapok]] hivatkoznak a törlendő oldalra (vagy beillesztik azt).",
+       "deleting-subpages-warning": "<strong>Figyelem:</strong> A törlésre jelölt lapnak[[Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|van allapja|$1 vannak allapjai|51=több mint 50 allapja van}}]].",
        "rollback": "Szerkesztések visszaállítása",
        "rollbacklink": "visszaállítás",
        "rollbacklinkcount": "$1 szerkesztés visszaállítása",
        "sp-contributions-newonly": "Csak az új oldalt létrehozó szerkesztéseket mutassa",
        "sp-contributions-hideminor": "Apró szerkesztések elrejtése",
        "sp-contributions-submit": "Keresés",
+       "sp-contributions-outofrange": "Nem sikerült eredményt megjeleníteni. A kért IP-tartomány nagyobb, mint a CIDR korlátja ($1).",
        "whatlinkshere": "Mi hivatkozik erre",
        "whatlinkshere-title": "A(z) „$1” lapra hivatkozó lapok",
        "whatlinkshere-page": "Lap:",
        "import-nonewrevisions": "Nincs változat importálva (mindet korábban importálták vagy a hiba miatt program kihagyta).",
        "xml-error-string": "$1 a(z) $2. sorban, $3. oszlopban ($4. bájt): $5",
        "import-upload": "XML-adatok feltöltése",
-       "import-token-mismatch": "Elveszett a munkamenetadatok.\n\nLehet, hogy ki vagy jelentkezve. <strong>Kérjük, győződj meg róla, hogy még mindig be vagy jelentkezve, majd próbálkozz újra!</strong> Ha ez továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni, és ellenőrizd, hogy a böngésződ elfogad sütiket erről az oldalról.",
+       "import-token-mismatch": "Elvesztek a munkamenetadatok.\n\nLehet, hogy ki vagy jelentkezve. '''Kérjük, győződj meg róla, hogy még mindig be vagy jelentkezve, majd próbálkozz újra!''' Ha ez továbbra sem sikerül, próbálj meg [[Special:UserLogout|kijelentkezni]], majd ismét bejelentkezni, és ellenőrizd, hogy a böngésződ elfogad sütiket erről az oldalról.",
        "import-invalid-interwiki": "A kijelölt wikiből nem lehet importálni.",
        "import-error-edit": "„$1” lap nem került importálásra, mert nem szerkesztheted azt.",
        "import-error-create": "„$1” lap nem került importálásra, mert nem hozhatod létre azt.",
        "fileduplicatesearch-noresults": "Nincs „$1” nevű fájl.",
        "specialpages": "Speciális lapok",
        "specialpages-note-top": "Jelmagyarázat",
+       "specialpages-note-restricted": "* Mindenki számára elérhető speciális lapok.\n* <span class=\"mw-specialpagerestricted\">Korlátozott hozzáférésű speciális lapok.</span>",
        "specialpages-group-maintenance": "Állapotjelentések",
        "specialpages-group-other": "További speciális lapok",
        "specialpages-group-login": "Bejelentkezés / fiók létrehozása",
        "compare-revision-not-exists": "A megadott lapváltozat nem létezik.",
        "diff-form": "Eltérések",
        "diff-form-submit": "Változtatások megjelenítése",
+       "permanentlink": "Állandó hivatkozás",
+       "permanentlink-revid": "Változat azonosító",
        "dberr-problems": "Sajnáljuk, de az oldallal technikai problémák vannak.",
        "dberr-again": "Várj néhány percet, majd frissítsd az oldalt.",
        "dberr-info": "(Nem sikerült kapcsolódni az adatbázishoz: $1)",
        "special-characters-group-thai": "Thai",
        "special-characters-group-lao": "Lao",
        "special-characters-group-khmer": "Khmer",
+       "special-characters-group-canadianaboriginal": "Kanadai bennszülött jelek",
        "special-characters-title-endash": "kötőjel",
        "special-characters-title-emdash": "hosszú kötőjel",
        "special-characters-title-minus": "minusz jel",
index 955aa00..e0322d4 100644 (file)
        "timezoneregion-indian": "Oceano Indiano",
        "timezoneregion-pacific": "Oceano Pacifico",
        "allowemail": "Abilita la ricezione di messaggi email da altri utenti",
+       "email-blacklist-label": "Impedisci a questi utenti di inviarmi email:",
        "prefs-searchoptions": "Ricerca",
        "prefs-namespaces": "Namespace",
        "default": "predefinito",
        "rcfilters-view-tags-tooltip": "Filtra risultati per etichette di modifica",
        "rcfilters-view-return-to-default-tooltip": "Torna al menu filtri principale",
        "rcfilters-watchlist-edit-watchlist-button": "Modifica il tuo elenco di pagine osservate",
+       "rcfilters-preference-label": "Nascondi la versione migliorata delle ultime modifiche",
+       "rcfilters-preference-help": "Ripristina la riprogettazione dell'interfaccia 2017 e tutti gli strumenti aggiunti allora e da allora.",
        "rcnotefrom": "Di seguito {{PLURAL:$5|è elencata la modifica apportata|sono elencate le modifiche apportate}} a partire da <strong>$3, $4</strong> (mostrate fino a <strong>$1</strong>).",
        "rclistfromreset": "Reimposta la selezione della data",
        "rclistfrom": "Mostra le nuove modifiche a partire daː $2, $3",
        "listfiles_size": "Dimensione",
        "listfiles_description": "Descrizione",
        "listfiles_count": "Versioni",
-       "listfiles-show-all": "Includi le vecchie versioni delle immagini",
+       "listfiles-show-all": "Includi le vecchie versioni dei file",
        "listfiles-latestversion": "Versione attuale",
        "listfiles-latestversion-yes": "Sì",
        "listfiles-latestversion-no": "No",
index 7991e23..0ba17b7 100644 (file)
        "permissionserrorstext-withaction": "あなたには「$2」を行う権限がありません。{{PLURAL:$1|理由}}は以下の通りです:",
        "contentmodelediterror": "コンテンツモデルが <code>$1</code> であるため、この版を編集することができません。ページの現在のコンテンツモデルは <code>$2</code> です。",
        "recreate-moveddeleted-warn": "<strong>警告: 以前削除されたページを再作成しようとしています。</strong>\n\nこのページの編集を続行するのが適切かどうかご確認ください。\n参考までに、このページの削除と移動の記録を以下に示します:",
-       "moveddeleted-notice": "ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¯å\89\8aé\99¤ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82\nå\8f\82è\80\83ã\81®ã\81\9fã\82\81ã\80\81ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤ã\81¨移動の記録を以下に表示します。",
+       "moveddeleted-notice": "ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81¯å\89\8aé\99¤ã\81\95ã\82\8cã\81¦ã\81\84ã\81¾ã\81\99ã\80\82\nå\8f\82è\80\83ã\81®ã\81\9fã\82\81ã\80\81ã\81\93ã\81®ã\83\9aã\83¼ã\82¸ã\81®å\89\8aé\99¤ã\80\81ä¿\9dè­·ã\80\81移動の記録を以下に表示します。",
        "moveddeleted-notice-recent": "申し訳ありません。このページは最近(24時間以内)に削除されました。参考のため、このページの削除、保護、移動の記録を以下に表示します。",
        "log-fulllog": "完全な記録を閲覧",
        "edit-hook-aborted": "フックによって編集が破棄されました。\n理由は不明です。",
        "rcfilters-limit-shownum": "表示:最新 $1 の更新",
        "rcfilters-days-title": "日数",
        "rcfilters-hours-title": "時間",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|日}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|時間}}",
        "rcfilters-quickfilters": "フィルターを保存",
        "rcfilters-quickfilters-placeholder-title": "リンクはまだ保存されていません",
        "rcfilters-quickfilters-placeholder-description": "フィルターの設定を保存し、後で再び使用するためには、下のアクティブフィルター内のブックマークアイコンをクリックしてください。",
        "listfiles_size": "サイズ",
        "listfiles_description": "概要",
        "listfiles_count": "版数",
-       "listfiles-show-all": "画像の古い版を含める",
+       "listfiles-show-all": "ファイルの古い版を含める",
        "listfiles-latestversion": "現在の版",
        "listfiles-latestversion-yes": "はい",
        "listfiles-latestversion-no": "いいえ",
        "compare-title-not-exists": "指定したページは存在しません。",
        "compare-revision-not-exists": "指定した版は存在しません。",
        "diff-form": "差分",
+       "diff-form-submit": "差分を表示",
        "permanentlink": "固定リンク",
+       "permanentlink-revid": "版 ID",
        "dberr-problems": "申し訳ありません! このウェブサイトに技術的な障害が発生しています。",
        "dberr-again": "数分間待った後、もう一度読み込んでください。",
        "dberr-info": "(データベース $1 にアクセスできません)",
index 17b1083..cf6b274 100644 (file)
@@ -60,7 +60,7 @@
        "tog-diffonly": "Aja tuduhaké isiné kaca sangisoré bédané besutan",
        "tog-showhiddencats": "Tuduhaké kategori sing didhelikaké",
        "tog-norollbackdiff": "Aja tuduhaké béda sawisé ngayahi bebalèn",
-       "tog-useeditwarning": "Élingaké kula yèn kula ninggalaké suntingan sing durung kasimpen",
+       "tog-useeditwarning": "Élingaké kula yèn ninggal kaca besutan sadurungé nyimpen",
        "tog-prefershttps": "Tansah nganggo sambungan sing aman nalika mlebu log",
        "underline-always": "Tansah",
        "underline-never": "Ora tau",
        "yourpasswordagain": "Tik manèh tembung wadiné:",
        "createacct-yourpasswordagain": "Konfirmasi tembung wadi",
        "createacct-yourpasswordagain-ph": "Lebokaké manèh tembung wadiné",
-       "userlogin-remembermypassword": "Gawé amrih aku panggah kalebu",
+       "userlogin-remembermypassword": "Gawé supaya panggah mlebu log",
        "userlogin-signwithsecure": "Nganggo koneksi aman",
        "cannotlogin-title": "Ora bisa mlebu log",
        "cannotlogin-text": "Mokal mlebu log.",
        "createacct-emailoptional": "Alamat layang-èl (manasuka)",
        "createacct-email-ph": "Isinen layang-èlé panjenengan",
        "createacct-another-email-ph": "Isi alamat layang-èl",
-       "createaccountmail": "Anggonen tembung wadi sembarang sauntara lan kirimen menyang alamat layang-èl sing dikarepaké",
+       "createaccountmail": "Anggonen tembung wadi sembarang sauntara lan kirimen iku menyang alamat layang-èl sing dikarepaké",
        "createacct-realname": "Jeneng asli (manasuka)",
        "createacct-reason": "Alesan",
        "createacct-reason-ph": "Alesané panjenengan nggawé akun liya",
        "blockedtext": "<b>Asma panganggo utawa alamat IP panjenengan diblokir.</b>\n\nBlokir iki sing nglakoni $1.\nAlesané <i>$2</i>.\n\n* Diblokir wiwit: $8\n* Kadaluwarsa pemblokiran ing: $6\n* Sing arep diblokir: $7\n\nPanjenengan bisa ngubungi $1 utawa [[{{MediaWiki:Grouppage-sysop}}|pangurus liyané]] kanggo ngomongaké prakara iki.\n\nPanjenengan ora bisa nggunakaké fitur 'Kirim layang é-mail panganggo iki' kejaba panjenengan wis nglebokaké alamat é-mail sing sah ing [[Special:Preferences|prèferènsi]] panjenengan.\n\nAlamat IP panjenengan iku $3, lan ID pamblokiran iku #$5.\nTulung kabèh informasi ing ndhuwur iki disertakaké ing saben pitakon panjenengan.",
        "autoblockedtext": "Alamat IP-né panjenangan wis otomatis diblokir amarga dienggo déning panganggo liyané, sing diblokir déning $1.\n\n:<em>$2</em>\n\n* Wiwit diblokir: $8\n* Rampung diblokir: $6\n* Sing diblokir: $7\n\nPanjenengan bisa ngubungi $1 utawa [[{{MediaWiki:Grouppage-sysop}}|pangurus]] liyané kanggo ngrembug blokirané.\n\nPanjenengan ora bisa nganggo fitur \"kirim layang-èl panganggo iki\" kajaba panjenengan wis ndhaftaraké alamat layang-èl sing trep ing [[Special:Preferences|pilalan panganggoné]] panjenengan lan panjenengan durung tau diblokir nalika nganggo iku.\n\nAlamat IP-né panjenengan sing saiki ya iku $3, lan ID blokirané ya iku $5. \nMangga wuwuhen kabèh rerincèn ing ndhuwur sajeroné samubarang pitakoné panjenengan.",
        "blockednoreason": "ora ana alesan sing diwènèhaké",
-       "whitelistedittext": "Sampéyan kudu $1 murih bisa mbesut kaca.",
+       "whitelistedittext": "Mangga $1 dhisik yèn arep mbesut kaca.",
        "confirmedittext": "Panjenengan kudu ndhedhes alamat e-mail dhisik sadurungé pareng nyunting sawijining kaca. Mangga nglebokaké lan validasi alamat e-mail panjenengan sadurungé nglakoni panyuntingan. Alamat e-mail sawisé bisa diowahi liwat [[Special:Preferences|kaca préférènsi]]",
        "nosuchsectiontitle": "Pérangan ora katemu",
        "nosuchsectiontext": "Panjenengan nyoba nyunting sawijining bagéan sing ora ana.\nBagéan iki manawa wis dipindhah utawa dibusak nalika panjenengan buka.",
        "permissionserrorstext": "Panjengan ora kagungan idin kanggo nglakoni sing panjenengan gayuh amerga {{PLURAL:$1|alesan|alesan-alesan}} iki:",
        "permissionserrorstext-withaction": "Panjenengan ora duwé hak aksès kanggo $2, amarga {{PLURAL:$1|alasan|alasan}} ing ngisor iki:",
        "recreate-moveddeleted-warn": "'''Pènget: Panjenengan gawé manèh sawijining kaca sing wis tau dibusak.'''\n\nMangga digagas manèh apa pantes nerusaké nyunting kaca iki.\nIng ngisor iki kapacak log pambusakan lan pamindhahan saka kaca iki:",
-       "moveddeleted-notice": "Kaca iki wis dibusak.\nLog busak lan alih ngenani kacané cumepak ing ngisor kanggo rujukan.",
+       "moveddeleted-notice": "Kaca iki wis dibusak.\nLog busak, reksa, lan alih bab kacané cumepak ing ngisor minangka rujukan.",
        "log-fulllog": "Deleng cathetan wutuh",
        "edit-hook-aborted": "Besutan diwurungaké déning cangkolan.\nOra ana katerangané.",
        "edit-gone-missing": "Ora bisa nganyari kaca.\nKatoné kaca iki wis dibusak.",
        "right-noratelimit": "Ora dipengaruhi déning wates cacahing suntingan.",
        "right-import": "Impor kaca-kaca saka wiki liya",
        "right-importupload": "Impor kaca saka unggahan barkas",
-       "right-patrol": "Tandhanana suntingan minangka wis dipatroli",
+       "right-patrol": "Tandhani besutané wong liya yèn wis kapriksa",
        "right-autopatrol": "Gawé supaya suntingan-suntingan ditandhani minangka wis dipatroli",
        "right-patrolmarks": "Ndeleng tandha-tandha patroli owah-owahan anyar",
        "right-unwatchedpages": "Tuduhna daftar kaca-kaca sing ora diawasi",
        "statistics-pages-desc": "Kabèh kaca ing wiki iki, kalebu kaca parembugan, alihan, lsp.",
        "statistics-files": "Barkas unggahan",
        "statistics-edits": "Gunggung suntingan wiwit {{SITENAME}} diwiwiti",
-       "statistics-edits-average": "Rata-rata suntingan saben kaca",
+       "statistics-edits-average": "Besutan rata-rata saben kaca",
        "statistics-users": "[[Special:ListUsers|Panganggo]] kadhaftar",
        "statistics-users-active": "Para panganggo aktif",
        "statistics-users-active-desc": "Panganggo sing ngayahi aktivitas jroning {{PLURAL:$1|dia|$1 dina}} pungkasan",
        "listusers-blocked": "(diblokir)",
        "activeusers": "Pratélan panganggo aktif",
        "activeusers-intro": "Iki daptar panganggo sing katon lakuné ing $1 {{PLURAL:$1|dina|dina}} kapungkur.",
-       "activeusers-count": "$1 {{PLURAL:$1|suntingan|suntingan}} ing {{PLURAL:$3|dina|$3 dina}} pungkasan",
+       "activeusers-count": "$1 {{PLURAL:$1|tumindak|tumindak}} ing {{PLURAL:$3|dina|$3 dina}} pungkasan",
        "activeusers-from": "Tampilna panganggo wiwit saka:",
        "activeusers-groups": "Tuduhaké panganggo sing mlebu golongan:",
        "activeusers-excludegroups": "Aja lebokaké panganggo sing kalebu golongan:",
        "deletereasonotherlist": "Alesan liya",
        "deletereason-dropdown": "*Alesan pambusakan\n** Spam\n** Vandalisme\n** Nglanggar hak cipta\n** Disuwun sing nulis\n** Pangalihan rusak",
        "delete-edit-reasonlist": "Besut alesané pambusak",
-       "delete-toobig": "Kaca iki darbé sajarah besutan sing dawa, punjul $1 {{PLURAL:$1|owahan}}.\nPambusak tumrap kaca sing kaya mangkono wis ora diidinaké nedya njagani murih ora ana karusakan ing {{SITENAME}}.",
+       "delete-toobig": "Kaca iki darbé sajarah besutan sing dawa, punjul $1 {{PLURAL:$1|owahan}}.\nMbusak kaca sing kaya mangkono wis ora diidinaké kanggo njagani supaya ora ana sing rusak ing {{SITENAME}}.",
        "delete-warning-toobig": "Kaca iki duwé sajarah besut sing dawa, punjul $1 {{PLURAL:$1|révisi}}.\nMbusak kaca iki bisa ngrusak lakuné basis dhata ing {{SITENAME}};\nkudu diayahi kanthi ngati-ati.",
        "deleteprotected": "Panjenengan ora bisa mbusak kaca iki amarga direksa.",
        "deleting-backlinks-warning": "'''Awas:''' Kaca liyane mungkin ana sing nautake ing kaca sing arep sampeyan busak.",
        "cantrollback": "Ora bisa mbalèkaké suntingan; panganggo pungkasan iku siji-sijiné penulis artikel iki.",
        "alreadyrolled": "Ora bisa mulihaké besutan pungkasan [[:$1]] déning [[User:$2|$2]] ([[User talk:$2|rembug]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); ana wong liya sing wis mbesut utawa mulihaké kaca iki.\n\nBesutan pungkasan kaca iku garapané [[User:$3|$3]] ([[User talk:$3|rembug]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Ringkesan suntingan yaiku: <em>$1</em>.",
-       "revertpage": "Besutané [[Special:Contributions/$2|$2]] ([[User talk:$2|rembugan]]) sing dibalèkaké nyang révisi pungkasan déning [[User:$1|$1]]",
-       "revertpage-nouser": "Suntingan déning panganggo sing didhelikake, dibalèkaké nèng benahan pungkasan déning [[User:$1|$1]]",
+       "revertpage": "Besutané [[Special:Contributions/$2|$2]] ([[User talk:$2|rembugan]]) dipulihaké ing révisi pungkasan déning [[User:$1|$1]]",
+       "revertpage-nouser": "Besutané panganggo peteng dipulihaké ing révisi pungkasan déning {{GENDER:$1|[[User:$1|$1]]}}",
        "rollback-success": "Suntingan dibalèkaké déning $1;\ndiowahi bali menyang vèrsi pungkasan déning $2.",
        "sessionfailure-title": "Sèsi gagal",
        "sessionfailure": "Katoné ana masalah karo sèsi log panjenengan; log panjenengan wis dibatalaké kanggo nyegah pambajakan. Mangga mencèt tombol \"back\" lan unggahaké manèh kaca sadurungé mlebu log, lan coba manèh.",
        "import-error-interwiki": "Kaca \"$1\" ora diimpor amarga jenengé dicadhangaké kango pranala njaba (interwiki).",
        "import-error-special": "Kaca \"$1\" ora diimpor amarga darbèké mandala aran mirunggan sing ora nglilakaké anané kaca.",
        "import-error-invalid": "Kaca \"$1\" ora diimpor amarga jenengé ora trep kanggo wiki iki.",
-       "import-error-unserialize": "Revisi $2 saka kaca \"$1\" ora bisa diurutaké. Revisi iku dilapuraké murih nganggo gagrag isi $3 sing diurutaké minangka $4.",
+       "import-error-unserialize": "Révisi $2 saka kaca \"$1\" ora bisa diurutaké. Révisi iku dilapuraké supaya nganggo modhèl kontèn $3 sing diurutaké minangka $4.",
        "import-options-wrong": "{{PLURAL:$2|Opsi|Opsi}} salah: <nowiki>$1</nowiki>",
        "import-rootpage-invalid": "Kaca wod iki sesirahé ora sah.",
        "import-rootpage-nosubpage": "Ruang nama \"$1\" di halaman turunan tidak mengizinkan subhalaman.",
        "pageinfo-lasttime": "Tanggal besutan pungkasan",
        "pageinfo-edits": "Gunggung cacahing besutan",
        "pageinfo-authors": "Cacahé kabèh panganggit sing bédha-bédha.",
-       "pageinfo-recent-edits": "Cacahé suntingan saiki (ing $1 kapungkur)",
+       "pageinfo-recent-edits": "Cacahé besutan saiki (ing dalem $1 pungkasan)",
        "pageinfo-recent-authors": "Cacahé panganggit sing bédha-bédha saiki",
        "pageinfo-magic-words": "{{PLURAL:$1|Tembung|Tembung}} mujarab ($1)",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Kategori}} ndhelik ($1)",
        "rcpatroldisabledtext": "Fitur patroli owah-owahan pungkasan lagi dipatèni.",
        "markedaspatrollederror": "Ora bisa awèh tandha wis dipatroli",
        "markedaspatrollederrortext": "Panjenengan kudu nentokaké sawijining révisi kanggo ditandhani minangka sing dipatroli.",
-       "markedaspatrollederror-noautopatrol": "Panjenengan ora pareng nandhani suntingan panjenengan dhéwé minangka dipatroli.",
+       "markedaspatrollederror-noautopatrol": "Panjenengan ora kena nandhani besutané panjenengan dhéwé minangka kapriksa.",
        "markedaspatrollednotify": "Owahan $1 wis dipatroli.",
        "markedaspatrollederrornotify": "Penanda patroli gagal dibuat.",
        "patrol-log-page": "Log patroli",
        "version-libraries-description": "Wedharan",
        "version-libraries-authors": "Pangarang",
        "redirect": "Lih-lihan miturut barkas, panganggo, kaca, owahan, utawa cathetan",
-       "redirect-summary": "Kaca astamiwa iki dialihake menyang gambar (jeneng gambar diwenehi), kaca (ID revisi utama ID kaca diwenehi), utawa kaca panganggo (ID panganggo diwenehi). Cara nganggo: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
+       "redirect-summary": "Kaca mirunggan iki ngener ing sawijining barkas (jeneng gambar diwenehi), kaca (ID revisi utama ID kaca diwenehi), utawa kaca panganggo (ID panganggo diwenehi). Cara nganggo: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], or [[{{#Special:Redirect}}/user/101]].",
        "redirect-submit": "Nuju",
        "redirect-lookup": "Golek:",
        "redirect-value": "Aji:",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tenger|Tenger}}]]: $2)",
        "tag-mw-contentmodelchange": "owahan modhèl isi",
        "tags-title": "Tag",
-       "tags-intro": "Kaca iki ndhaptar tag sing bisa ditandhani déning piranti alus tumrap sawijining suntingan lan maknané.",
+       "tags-intro": "Kaca iki isi pratélan tenger sing dienggo nandhani besutan déning piranti alus, sinartan tegesé.",
        "tags-tag": "Jeneng tag",
        "tags-display-header": "Cakrik ing pratélan owahan",
        "tags-description-header": "Dhèskripsi pepak saka makna",
index eedcf28..2efb3a4 100644 (file)
@@ -17,7 +17,9 @@
                        "Matma Rex",
                        "Belkacem77",
                        "Mhenni",
-                       "Slimane AMIRI"
+                       "Slimane AMIRI",
+                       "SlimaneAmiri",
+                       "Sayem AtVkm"
                ]
        },
        "tog-underline": "Aderrer n iseɣwan:",
@@ -64,8 +66,8 @@
        "tog-norollbackdiff": "Ur skan  ara amgired seld aḥway",
        "tog-useeditwarning": "Σeggen iyid mi ara fγaγ seg usebter mebla ma skeslaγ ibeddilen.",
        "tog-prefershttps": "Seqdac yal tikelt tuqqna taɣelsant akken ad teqqneḍ",
-       "underline-always": "Daymen",
-       "underline-never": "Abaden",
+       "underline-always": "Yal tikelt",
+       "underline-never": "Werǧin",
        "underline-default": "Azal s lexṣas n iminig neɣ n usentel",
        "editfont-style": "Aɣanib n tasefsit n taɣzut ubeqqeḍ :",
        "editfont-default": "Tasefsit n iminig s lexṣas",
        "no-null-revision": "Ur nezmer ara ad n-snulfu tacaggart tilemnt tamaynut i usebtar « $1 »",
        "badtitle": "Azwel ur yelhi",
        "badtitletext": "Asebter i testeqsiḍ fell-as mačči ṣaḥiḥ, d ilem, neɣ yella ugul deg wezday seg wikipedia s tutlayt tayeḍ neɣ deg wezday n wiki nniḍen. Ahat tesɛa asekkil ur yezmir ara ad yettuseqdac deg wezwel.",
+       "title-invalid-empty": "Azwel n usebter d-tessutreḍ d ilem neɣ yegber kan isem n tallunt n yismawen.",
+       "title-invalid-utf8": "Azwel n usebter d-tessutreḍ yegber tagzemt UTF-8 taruɣbilt",
+       "title-invalid-talk-namespace": "Azwel n usebter d-tessutreḍ yettwellih ar usebter n usqerdec ay izemren ulac-it",
+       "title-invalid-characters": "Azwel n usebter d-tessutreḍ yegber isekkilen iruɣbilen: \"$1\".",
        "perfcached": "Talɣut deg ukessar seg lkac u waqila mačči d tasiwelt taneggarut. A maximum of {{PLURAL:$1|one result is|$1 results are}} available in the cache.",
        "perfcachedts": "Talɣut deg ukessar seg lkac, tasiwelt taneggarut n wass $1. A maximum of {{PLURAL:$4|one result is|$4 results are}} available in the cache.",
        "querypage-no-updates": "Ibeddlen n usebter-agi ur ttbanen ara tura. Tilɣa ines qrib a d-banen.",
        "throttled-mailpassword": "Neceggɛed yakan tirawt n uwennez i awal-ik/im n uɛaddi deg {{PLURAL:$1|asrag agi aneggaru|$1 isragen agi ineggura}}. Awennez n uwal n uɛaddi yettwaceggaɛ tikelt kan deg {{PLURAL:$1|asrag|$1 isragen}}.",
        "mailerror": "Agul asmi yettwazen e-mail: $1",
        "acct_creation_throttle_hit": "Inebgawen iseqdacen tansa IP-ik rnan {{PLURAL:$1|n umiḍan|$1 n imiḍanen}} deg $2 n yisragen ineggura, d ayen yessawḍen ar talast tafellayt yettwasirgen deg uzilal-agi n wakud.\nIhi, timerna n imiḍanen i yinebgawen iseqdacen tansa-agi IP tewḥel akka tura.",
-       "emailauthenticated": "Tansa e-mail inek/inem tesergeg ass n $2 af $3.",
+       "emailauthenticated": "Tansa-ik(im) imayl tettwasentem di $2 af $3.",
        "emailnotauthenticated": "Tansa email inek mazal ur tettuɛqel. Ur d netceggaɛ ara email i yal tiseɣnin agi.",
        "noemailprefs": "Efk tansa e-mail iwakken ad leḥḥun iḍaɣaren-nni.",
-       "emailconfirmlink": "Sentem tansa e-mail inek",
+       "emailconfirmlink": "Sentem tansa-ik imayl",
        "invalidemailaddress": "Tansa e-mail-agi ur telhi, ur tesɛi ara taseddast n lɛali. Ssekcem tansa e-mail s taseddast n lɛali neɣ ur tefkiḍ acemma.",
        "cannotchangeemail": "Ur t-zemreḍ ara ad beddeleḍ tansa e-mail deg uwiki agi.",
        "emaildisabled": "Asmel agi ur yezmer ara ad i cegaɛ e-mail.",
        "anonpreviewwarning": "''Ur tesuluḍ ara. Aḥraz ad yekles tansa IP inek/inem deg umezruy n ibeddilen n usebter.''",
        "missingsummary": "'''Ur tettuḍ ara:''' Ur tefkiḍ ara azwel i ubeddel inek. Lukan twekkiḍ ''Smekti'' tikelt nniḍen, abeddel inek ad yettusmekti mebla azwel.",
        "missingcommenttext": "Ssekcem awennit deg ukessar.",
-       "missingcommentheader": "<strong>Asmekti:</strong> ur d-muddeḍ ara asentel n uwennit-agi.\nMa tsenndeḍ tikelt-nniḍen ɣef  \"{{int:Savearticle}} \", abeddel-ik ad yettwasekles s war asentel.",
+       "missingcommentheader": "<strong>Asmekti:</strong> ur d-muddeḍ ara asentel n uwennit-agi.\nMa tsenndeḍ tikelt-nniḍen ɣef \"$1\", abeddel-ik ad yettwasekles s war asentel.",
        "summary-preview": "Taskant n ugzul n ubeddel :",
        "subject-preview": "Taskant n usentel :",
        "blockedtitle": "Amseqdac iɛekkel",
        "edit-conflict": "Amgirred n ubeddel.",
        "edit-no-change": "Abeddel inek/inem ur yetwexdam ara acku ur di ban ara abeddel deg uḍris.",
        "postedit-confirmation-created": "Asebter ittwarna.",
+       "postedit-confirmation-restored": "Asebter yuɣal-d.",
        "postedit-confirmation-saved": "Abeddel inek/inem yetwakles.",
        "edit-already-exists": "Asebter amaynut ur d yesnufu ara.\nYella yakan.",
        "defaultmessagetext": "Izen s lexṣas",
        "revdelete-legend": "Sbebd akref n tamuɣli",
        "revdelete-hide-text": "Aḍris n tacaggart",
        "revdelete-hide-image": "Ffer ayen yellan deg ufaylu",
-       "revdelete-hide-name": "Ffer tigawt d nnican",
+       "revdelete-hide-name": "Ffer iberdan d iɣewwaṛen",
        "revdelete-hide-comment": "Beddel agzul",
        "revdelete-hide-user": "Isem n umseqdac/Tansa IP n umaẓrag",
        "revdelete-hide-restricted": "Mḥu isefka agi i inedbalen d yimdanen wiyaḍ",
        "mergehistory-empty": "Ulac lqem i nezmer an zdi.",
        "mergehistory-done": "$3 {{PLURAL:$3|lqem|ileqman}} n $1 {{PLURAL:$3|yezdukel|zdukelen}} deg [[:$2]].",
        "mergehistory-fail": "Ulamek an zdukel imezruyen. Fru tikkelt nniḍen asebter d iɣewwaren is n uzmez.",
+       "mergehistory-fail-invalid-source": "Asebter aɣbalu d arameɣtu.",
        "mergehistory-no-source": "Azar n usebter $1 ulac-it.",
        "mergehistory-no-destination": "Aserken n usebter $1 ulac-it",
        "mergehistory-invalid-source": "Azar n usebter ilaq ad i sɛu azwel i ɣbelen.",
        "preferences": "Ismenyifen",
        "mypreferences": "Ismenyifen",
        "prefs-edits": "Amḍan n ibeddlilen :",
-       "prefsnologintext2": "Ilaq ad $1 iwakken ad sbaduḍ ismenyifen inek/inem.",
+       "prefsnologintext2": "Ttxilek(m) qqen aken ad snifleḍ ismenyifen inek(m).",
        "prefs-skin": "Aglim",
        "skin-preview": "Pre-timeẓriwt",
        "datedefault": "Ur sɛiɣ ara asemyifi",
        "gender-female": "Tebeddel isebtar n wiki",
        "prefs-help-gender": "Sbadu asmenyif agi d-afrayan.\nAseɣẓan agi yetseqdac azal-is iwakken ad yemeslay s kečč/kem dɣa ad yefk isem-ik/im i wiyaḍ nniḍen s useqdac n tawsit tajeṛṛumant.\nTalɣut agi attili d-tazayezt.",
        "email": "E-mail",
-       "prefs-help-realname": "* Isem n ṣṣeḥ (am tebɣiḍ): ma textareḍ a t-tefkeḍ, ad yettuseqdac iwakken ad snen medden anwa yura tikkin inek.",
+       "prefs-help-realname": "Isem n tidet d anufran.\nma tefkeḍ-t-id, ad yettuseqdac iwaken ad ak(m)-d ttwanefkent tebzirin inek(m).",
        "prefs-help-email": "* E-mail (am tebɣiḍ): Teǧǧi imseqdacen wiyaḍ a k-aznen email mebla ma ẓren tansa email inek.",
        "prefs-help-email-others": "Zemreḍ ad eǧǧeḍ wiyeḍ nniḍen ak(akem) cceqɛen izen deg usebter-ik (im) n umyannan war ad effekeḍ tamagit-ik (im).",
        "prefs-help-email-required": "Tansa e-mail tesḍulli.",
        "right-override-export-depth": "Sifeḍ isebtar akkw d isebtar iqqenen alama tadrut n 5 iswiren",
        "right-sendemail": "Ceggaɛ tirawt i iseqdacen nniḍen",
        "grant-group-email": "Azen imayl",
+       "grant-group-private-information": "Adef ɣer isefka inek usligen",
+       "grant-blockusers": "Sewḥel diɣ selwi iseqdacen",
+       "grant-createaccount": "Seɣnew imiḍanen",
        "grant-createeditmovepage": "Rnu, beddel, senkez isebtar",
        "grant-delete": "Kkes isebtar, iceggiren akked inekcam n uɣmis",
        "grant-editinterface": "Snifel tallunt n yismawen MediaWiki akked CSS/JavaScript n useqdac",
        "rcfilters-filter-editsbyself-label": "Asnifel-ik",
        "rcfilters-filter-editsbyself-description": "Ittekkiyen-ik",
        "rcfilters-filter-editsbyother-label": "Asnifel n wiyaḍ",
+       "rcfilters-filter-editsbyother-description": "Akk ibeddilen slid wid iynek(m).",
+       "rcfilters-filtergroup-userExpLevel": "Asekles n iseqdacen aked tarmit",
        "rcfilters-filter-user-experience-level-registered-label": "Yeqqen",
        "rcfilters-filter-user-experience-level-registered-description": "Imaẓragen uqqinen.",
        "rcfilters-filter-user-experience-level-unregistered-label": "Ur yeqqin ara",
        "rcfilters-filter-user-experience-level-unregistered-description": "Imaẓragen ur yeqqinen ara.",
        "rcfilters-filter-user-experience-level-newcomer-label": "Inebgawen imaynuten",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Imaẓragen uqqinen s udun n 10 ibeddilen aked 4 n ussan n urmud.",
        "rcfilters-filter-user-experience-level-learner-label": "Inelmaden",
+       "rcfilters-filter-user-experience-level-learner-description": "Imaẓragen uqqinen idegi tarmit tezga-d ger \"Iseqdacen imaynuten\" aked \"Iseqdacen imazzayen\".",
        "rcfilters-filter-user-experience-level-experienced-label": "Iseqdacen s tirmitin",
+       "rcfilters-filter-user-experience-level-experienced-description": "Imaẓragen uqqinen s ugar n 500 ibeddilen aked 30 n ussan n urmud.",
        "rcfilters-filtergroup-automated": "Ittekkiyen iwurmanen",
        "rcfilters-filter-bots-label": "Aṛubut",
+       "rcfilters-filter-bots-description": "Ibeddilen yettwagan s ifecka iwurmanen.",
        "rcfilters-filter-humans-label": "Amdan (mačči d aṛubut)",
+       "rcfilters-filter-humans-description": "Ibeddilen yettwagan s imaẓragen inalsen.",
+       "rcfilters-filtergroup-significance": "Anamek",
+       "rcfilters-filter-watchlistactivity-seen-label": "Wali ibeddilen",
+       "rcfilters-filtergroup-changetype": "Anaw ubeddil",
+       "rcfilters-filter-pageedits-label": "Ibeddilen n usebter",
+       "rcfilters-filter-categorization-label": "Ibeddilen n taggayt",
        "rcnotefrom": "Ddaw-a{{PLURAL:$5|d abeddel|d ibeddilen}} si <strong>$3, $4</strong> (arama <strong>$1</strong> ad d-yettwaseknen).",
        "rclistfrom": "Ssken ibeddlen imaynuten seg $3 $2",
        "rcshowhideminor": "$1 ibeddlen ifessasen",
        "wlshowlast": "Sken wid n $1 n isragen ineggura, wid n $2 n wussan ineggura",
        "watchlist-hide": "Ffer",
        "watchlist-submit": "Sken",
+       "wlshowhideliu": "Iseqdacen yettwajerden",
+       "wlshowhideanons": "Iseqdacen udrigen",
        "watchlist-options": "Iɣewwaṛen n tebdart n uḍfaṛ",
        "watching": "Ad iɛass...",
        "unwatching": "Ad ifukk aɛessi...",
        "deletepage": "Mḥu asebter",
        "confirm": "Sentem",
        "excontent": "Ayen yella: '$1'",
-       "excontentauthor": "Ayen yella: '$1' ('[[Special:Contributions/$2|$2]]' kan i yekken deg-s)",
+       "excontentauthor": "yegber : \"$1\", udiɣ immttekki-ines d \"[[Special:Ittekkiyen/$2|$2]]\" ([[User talk:$2|asqerdec]])",
        "exbeforeblank": "Ayen yella uqbal ma yettumḥa: '$1'",
        "delete-confirm": "Kkes \"$1\"",
        "delete-legend": "Ekkes",
        "mycontris": "Ittekkiyen",
        "anoncontribs": "Ittekkiyen",
        "contribsub2": "I {{GENDER:$3|$1}} ($2)",
+       "contributions-userdoesnotexist": "Amiḍan n useqdac \"$1\" ur yettwasekles ara.",
        "nocontribs": "Ur yufi ara abddel i tebɣiḍ.",
        "uctop": "(amiran)",
        "month": "Seg uggur (d wid uqbel) :",
        "sp-contributions-newbies-sub": "I yisem yimseqdacen imaynuten",
        "sp-contributions-newbies-title": "Ittekkiyen n imseqdacen gar imiḍanen imaynuten",
        "sp-contributions-blocklog": "Aɣmis n uɛeṭṭil",
-       "sp-contributions-deleted": "isekcam yemḥan",
+       "sp-contributions-suppresslog": "Attekki n {{GENDER:$1|useqdac|taseqdact}} yettwakkes",
+       "sp-contributions-deleted": "Attekki n {{GENDER:$1|useqdac|taseqdact}} yettwakkes",
        "sp-contributions-uploads": "izdamen",
        "sp-contributions-logs": "iɣmisen",
        "sp-contributions-talk": "Mmeslay",
-       "sp-contributions-userrights": "Laɛej iserfan n umseqdac",
+       "sp-contributions-userrights": "sefrek izerfan n {{GENDER:$1|useqdac}}",
        "sp-contributions-blocked-notice": "Aseqdac agi yekyef.\nAsekcem aneggaru n useklas n ikyafen yella ddaw agi :",
        "sp-contributions-blocked-notice-anon": "Tansa IP agi tekyef.\nAsekcem aneggaru n useklas n ikyafen yella ddaw agi :",
        "sp-contributions-search": "Nadi i tikkin",
        "autoblockid": "Asewḥel awurman #$1",
        "block": "Ɛekkel aseqdac",
        "unblock": "Aksasewḥel n umseqdac",
-       "blockip": "Ɛekkel aseqdac",
+       "blockip": "Sewḥel {{GENDER:$1|aseqdac|taseqdact}}",
        "blockip-legend": "Ɛekkel aseqdac",
        "blockiptext": "Seqdec tiferkit ddaw-agi iwakken ad  sewḥeleḍ ineɛruḍen n ubeddel seg yiwet tansa IP tulmist neɣ n yiwen isem umseqdac.\nAsket am wagi, ur ilaq ad yetwexddem kan iwakken ad yeεeggen axeṣṣar dɣa ilaq ad yemtawi s [[{{MediaWiki:Policy-url}}|ilugan igensanen]].\nEfked ddaw-agi taɣẓint tusdidt (amedya : efked isebtar yetwaxeṣṣren).",
        "ipaddressorusername": "Tansa IP neɣ isem n wemseqdac",
        "change-blocklink": "beddel asewḥel",
        "contribslink": "attekki",
        "emaillink": "Ceggaɛ e-mail",
-       "autoblocker": "Tetsewḥeleḍ s uwurman acku tansa IP inek/inem yeseqdac-itt « [[User:$1|$1]] ». Taɣzint id efkan i usewḥel agi d : « $2 ».",
+       "autoblocker": "Tweḥleḍ s wudem awurman acku tansa-ik IP yeseqdac-itt \"[[User:$1|$1]]\"\nTaɣzint i d-ittunefken i usewḥel n $1 d \"$2\"",
        "blocklogpage": "Aɣmis n isewḥelen",
        "blocklog-showlog": "Amseqdac agi, yetseweḥel uqbel. Ad affeḍ aɣmis n isewḥal ddaw-agi :",
        "blocklog-showsuppresslog": "Amseqdac agi, yetseweḥel dɣa yeweffer uqbel. Ad affeḍ aɣmis n tukksiwin ddaw-agi :",
        "pageinfo-category-pages": "Amḍan n isebtar",
        "pageinfo-category-subcats": "Amḍan n adutaggayin",
        "pageinfo-category-files": "Amḍan n ifuyla",
+       "pageinfo-user-id": "Asulay n useqdac",
        "markaspatrolleddiff": "Rcem \"yettwassenqden\"",
        "markaspatrolledtext": "Rcem amagrad-agi \"yettwassenqden\"",
        "markedaspatrolled": "Rcem belli yettwasenqed",
        "newimages-summary": "Asebtar agi uslig yebeqqeḍ ifuyla ineggura i kteren.",
        "newimages-legend": "Tastayt",
        "newimages-label": "Isem n ufaylu (naɣ aḥric ines) :",
+       "newimages-user": "Tansa IP neɣ isem n useqdac",
        "newimages-newbies": "Sken kan ittekkiyen n imiḍanen imaynuten",
        "noimages": "Tugna ulac-itt.",
        "ilsubmit": "Nadi",
        "exif-urgency-other": "Lḥir id yefka amseqdac ($1)",
        "namespacesall": "akk",
        "monthsall": "akk",
-       "confirmemail": "Sentem tansa n e-mail",
+       "confirmemail": "Sentem tans-ik imayl",
        "confirmemail_noemail": "Ur tesɛiḍ ara tansa n yitameɣtut deg [[Special:Preferences|ismenyifen n useqdac]]-ik.",
        "confirmemail_text": "{{SITENAME}} yeḥweǧ aseɣbel n tansa e-mail inek/inem uqbel ad sexdemeḍ tanfa n tirawt.\nSeqdec taqeffalt ddaw-agi iwakken ad cegɛeḍ e-mail n uragag ar tansa e-mail inek/inem.\nTirawt at sɛu azday deg-es tangalt. Tzemreḍ at seqdeceḍ tikkelt kan deg talast n ukud ;\nllid azday agi deg iminig iwakken ad sergegeḍ tansa e-mail inek/inem.",
        "confirmemail_pending": "Yettwazen-ak yagi ungal n usentem; lukan txelqeḍ isem wemseqdac tura kan,\nahat yessefk ad tegguniḍ cwiṭ qbel ad tɛreḍeḍ ad testeqsiḍ ɣef ungal amaynut.",
-       "confirmemail_send": "Azen-iyi-d angal n usentem s e-mail iwakken ad snetmeɣ.",
+       "confirmemail_send": "Azen tangalt n usentem",
        "confirmemail_sent": "E-mail yettwazen iwakken ad tsentmeḍ.",
-       "confirmemail_oncreate": "Angal n usentem yettwazen ar tansa n e-mail inek.\nYessefk ad tesseqdceḍ angal-agi iwakken ad tkecmeḍ, meɛna yessefk a t-tefkeḍ\niwakken ad xedmen yiḍaɣaren n email deg wiki-yagi.",
+       "confirmemail_oncreate": "Tangalt n usentem tettwazen ar tansa n yimay inek.\nTangalt-agi ur mačči d ayen ilaqen akken ad tkecmeḍ ar uwiki-agi, acu kan yessefk ad tt-id-muddeḍ akken ad tremdeḍ yal tawuri icudden ar tira n yiznan.",
        "confirmemail_sendfailed": "{{SITENAME}} ur yezmir ara ad yazen asentem n email.\nSsenqed tansa n email inek.\n\nAhil n uzzun n e-mail yuɣal-d s-izen agi : $1",
-       "confirmemail_invalid": "Angal n usentem mačči ṣaḥiḥ. Waqila yemmut.",
+       "confirmemail_invalid": "Tangalt n usentem mačči d tameɣtut.\nAhat yezri wakud-is.",
        "confirmemail_needlogin": "Yessefk $1 iwakken tesnetmeḍ tansa n email inek.",
        "confirmemail_success": "Tansa e-mail inek/inem tergeg.\nTura tzemreḍ ad [[Special:UserLogin|qqeneḍ]].",
        "confirmemail_loggedin": "Asentem n tansa n email inek yekfa tura.",
        "tags-hitcount-header": "Ibeddilen yesɛan ticraḍ",
        "tags-active-yes": "Ih",
        "tags-active-no": "Ala",
+       "tags-source-manual": "Yettwasnes s ufus sɣur iseqdacen akked iṛubuten",
        "tags-edit": "beddel",
        "tags-hitcount": "$1 {{PLURAL:$1|abeddel|ibeddlen}}",
        "tags-create-heading": "Rnu taṛekkizt tamaynut",
        "special-characters-group-arabic": "Taɛṛabt",
        "randomrootpage": "Asebter aẓaṛ agacuran",
        "log-action-filter-upload-upload": "Asali amaynut",
-       "authprovider-confirmlink-ok-help": "Kemmel deffir n uskan n yiznan n usdukkel ur yeddin ara."
+       "authmanager-username-help": "Isem n useqdac i usesteb",
+       "authmanager-realname-help": "Isem ilaw n useqdac",
+       "authprovider-confirmlink-ok-help": "Kemmel deffir n uskan n yiznan n usdukkel ur yeddin ara.",
+       "userjsispublic": "Ma ulac aɣilif, wali: isebtar isnawanen, JavaScript ur issefk ara ad gebren isefka ibaḍniyen acku ttwalin-ten iseqdacen-nniḍen."
 }
index c7cd4e2..e5cf90e 100644 (file)
        "parser-template-loop-warning": "재귀적인 틀이 발견되었습니다: [[$1]]",
        "template-loop-category": "틀 루프가 있는 문서",
        "template-loop-category-desc": "이 문서에 틀 루프가 있습니다. (예: 자기 자신을 반복하여 호출하는 틀)",
+       "template-loop-warning": "<strong>경고:</strong> 이 문서는 틀 루프를 일으키는 [[:$1]] 틀을 호출합니다. (무한 재귀 호출)",
        "parser-template-recursion-depth-warning": "틀 반복 깊이 제한을 초과함 ($1)",
        "language-converter-depth-warning": "언어 변환기 실행 제한 초과($1)",
        "node-count-exceeded-category": "노드 횟수를 초과한 문서",
        "timezoneregion-indian": "인도양",
        "timezoneregion-pacific": "태평양",
        "allowemail": "다른 사용자가 보낸 이메일을 받음",
+       "email-blacklist-label": "이 사용자들이 내게 이메일을 보내는 것을 금지합니다:",
        "prefs-searchoptions": "검색",
        "prefs-namespaces": "이름공간",
        "default": "기본값",
        "rcfilters-watchlist-markseen-button": "모든 변경사항을 본 것으로 표시",
        "rcfilters-watchlist-edit-watchlist-button": "내 주시문서 목록 편집",
        "rcfilters-watchlist-showupdated": "변경이 발생한 이후로 방문한 적이 없는 문서의 변경사항은 <strong>굵게</strong> 표시됩니다.",
+       "rcfilters-preference-label": "개선된 버전의 최근 바뀜 숨기기",
+       "rcfilters-preference-help": "2017년 인터페이스 재설계 부분과 그 당시와 그 이후에 추가된 모든 도구를 되돌립니다.",
        "rcnotefrom": "아래는 <strong>$3, $4</strong>부터 시작하는 {{PLURAL:$5|바뀜이 있습니다}}. (최대 <strong>$1</strong>개가 표시됨)",
        "rclistfromreset": "날짜 선택 초기화",
        "rclistfrom": "$3 $2부터 시작하는 새로 바뀐 문서 보기",
        "uploadbtn": "파일 올리기",
        "reuploaddesc": "올리기를 취소하고 올리기 양식으로 돌아가기",
        "upload-tryagain": "수정된 파일 설명을 저장",
+       "upload-tryagain-nostash": "다시 업로드된 파일과 수정된 내용 제출",
        "uploadnologin": "로그인하지 않음",
        "uploadnologintext": "파일을 올리려면 $1해야 합니다.",
        "upload_directory_missing": "파일 올리기용 디렉터리($1)가 없고 웹 서버가 만들지 못했습니다.",
        "file-deleted-duplicate-notitle": "이 파일과 같은 파일이 이전에 삭제된 적이 있으며, 제목은 숨겨져 있습니다.\n다시 올리기 전에 상확은 검토하기 위해 숨겨진 파일 데이터를 볼 수 있는 누군가에게 물어봐야 합니다.",
        "uploadwarning": "올리기 경고",
        "uploadwarning-text": "아래의 파일 설명을 수정하고 다시 시도해 주세요.",
+       "uploadwarning-text-nostash": "파일을 다시 올리고 아래의 내용을 수정한 다음 다시 시도해 주십시오.",
        "savefile": "파일 저장",
        "uploaddisabled": "올리기 비활성화됨",
        "copyuploaddisabled": "URL로 파일 올리기가 비활성화되어 있습니다.",
        "listfiles_size": "크기",
        "listfiles_description": "설명",
        "listfiles_count": "버전",
-       "listfiles-show-all": "그림ì\9d\98 ê³¼ê±° í\8c\90 í\8f¬í\95¨",
+       "listfiles-show-all": "í\8c\8cì\9d¼ì\9d\98 ê³¼ê±° í\8c\90 í\8f¬í\95¨",
        "listfiles-latestversion": "현재 판",
        "listfiles-latestversion-yes": "예",
        "listfiles-latestversion-no": "아니오",
        "special-characters-group-sinhala": "싱할라 문자",
        "special-characters-group-gujarati": "구자라트 문자",
        "special-characters-group-devanagari": "데바나가리어",
-       "special-characters-group-thai": "í\83\80ì\9d´어",
+       "special-characters-group-thai": "í\83\9cêµ­어",
        "special-characters-group-lao": "라오어",
        "special-characters-group-khmer": "크메르어",
        "special-characters-group-canadianaboriginal": "캐나다 원주민 언어",
index 6a2191c..28867f5 100644 (file)
@@ -15,7 +15,7 @@
        },
        "tog-underline": "Джибериулени черт:",
        "tog-hideminor": "Джангы тюрлениулени тизмесинде гитче тюрлениулени кёргюзме",
-       "tog-hidepatrolled": "Джангы тюрлениулени тизмесинде тинтилген тюрлениулени кёргюзме",
+       "tog-hidepatrolled": "Джангы тюрлениулени тизмесинден тинтилген тюрлениулени джашыр",
        "tog-newpageshidepatrolled": "Джангы бетлени тизмесинде тинтилген бетлени кёргюзме",
        "tog-extendwatchlist": "Кёзде тургъан тизмени, къуру ахыр тюл, бютеу тюрлениулени кёрюр ючюн кенгерт",
        "tog-usenewrc": "Ахыр тюрлениуледе эм кёздеги тизмеде бетлени тюрлениулерин къауумлашдыр",
        "anontalk": "Бу IP-адресге сюзюу бет",
        "navigation": "Навигация",
        "and": "&#32;эм",
-       "qbfind": "Излеу",
-       "qbbrowse": "Къарау",
-       "qbedit": "Тюрлендир",
-       "qbpageoptions": "Бу бет",
-       "qbmyoptions": "Бетлерим",
        "faq": "FAQ",
-       "faqpage": "Project:FAQ",
        "actions": "Этиуле",
        "namespaces": "Атланы аламы",
        "variants": "Вариантла",
        "edit-local": "Локал айгъакълауну тюрлендириу",
        "create": "Къура",
        "create-local": "Локал айгъакълау къош",
-       "editthispage": "Бу бетни тюрлендир",
-       "create-this-page": "Бу бетни къура",
        "delete": "Кетер",
-       "deletethispage": "Бу бетни кетер",
-       "undeletethispage": "Бу бетни ызына сал",
        "undelete_short": "{{PLURAL:$1|Бир тюрлендириуню$1 тюрлендириуню}} ызына сал",
        "viewdeleted_short": "{{PLURAL:$1|Бир кетерилген тюрлендириуню|$1 кетерилген тюрлендириуню}} кёрюу",
        "protect": "Джакъла",
        "protect_change": "тюрлендир",
-       "protectthispage": "Бу бетни джакъла",
        "unprotect": "Джакълауну тюрлендир",
-       "unprotectthispage": "Бу бетни джакълауун тюрлендир",
        "newpage": "Джангы бет",
-       "talkpage": "Бу бетни сюз",
        "talkpagelinktext": "сюзюу",
        "specialpage": "Къуллукъ бет",
        "personaltools": "Энчи адырла",
-       "articlepage": "Статьягъа къарау",
        "talk": "Сюзюу",
        "views": "Къараула",
        "toolbox": "Адырла",
-       "userpage": "Къошулуучуну энчи бетине къарау",
-       "projectpage": "Проектни бетине къара",
+       "tool-link-userrights": "{{GENDER:$1|Къошулуучуну}} группаларын тюрлендир",
+       "tool-link-emailuser": "Бу {{GENDER:$1|къошулуучугъа}} email джибер",
        "imagepage": "Файлны бетине къара",
        "mediawikipage": "Билдириуню бетине къара",
        "templatepage": "Шаблонну бетине къара",
        "nstab-template": "Шаблон",
        "nstab-help": "Болушлукъ бет",
        "nstab-category": "Категория",
+       "mainpage-nstab": "Баш бет",
        "nosuchaction": "Быллай амал джокъду",
        "nosuchactiontext": "URL-да белгиленнген амал терсди.\nСиз URL-ну терс джазгъан болурсуз, неда терс джибериу бла кёчгенсиз.\nБу {{SITENAME}} проектде да хатаны кёргюзюрге боллукъду.",
        "nosuchspecialpage": "Быллай къуллукъ бет джокъду",
        "rightslogtext": "Бу къошулуучуну хакъларыны тюрлениуюню журналыды",
        "action-read": "бу бетни окъуу",
        "action-edit": "бу бетни тюрлендириу",
-       "action-createpage": "бетни къурау",
-       "action-createtalk": "сюзюу бетни къурау",
+       "action-createpage": "бу бетни къура",
+       "action-createtalk": "бу сюзюу бетни къурау",
        "action-createaccount": "бу тергеу джазыуну (аккаунтну) къурау",
        "action-minoredit": "бу тюрлениуню гитче кибик белгилеу",
        "action-move": "бу бетни атын тюрлендириу",
        "action-upload_by_url": "URL адресден бу файлны джюклеу",
        "action-writeapi": "API хайырландырыу тюрлендириулеге",
        "action-delete": "бу бетни кетериу",
-       "action-deleterevision": "беÑ\82ни Ð±Ñ\83 Ð²ÐµÑ\80Ñ\81иÑ\8fÑ\81ын кетериу",
-       "action-deletedhistory": "бу бетни кетерилген тарихине къарау",
+       "action-deleterevision": "беÑ\82ни Ð²ÐµÑ\80Ñ\81иÑ\8fлаÑ\80ын кетериу",
+       "action-deletedhistory": "бетни кетерилген тарихине къарау",
        "action-browsearchive": "кетерилген бетлени излеу",
-       "action-undelete": "бу бетни ызына салыу",
-       "action-suppressrevision": "бу джашырылгъан версиясына бетни къарау эм ызына салыу",
+       "action-undelete": "бетни ызына салыу",
+       "action-suppressrevision": "бетни джашырылгъан версияларына къарау эм ызына салыу",
        "action-suppressionlog": "бу энчи журналгъа къарау",
        "action-block": "Къошулуучуну блок этиу, тюрлендириуле этерге къоймау",
        "action-protect": "бу бетни джакълау дараджасын тюрлендириу",
        "action-rollback": "бетни ахыр тюрлендирген къошулуучуну тюрлендириулерин дженгил ызына алыу",
-       "action-import": "бу бетни башха викиден импорт этиу",
-       "action-importupload": "бу бетни джюкленнген файлдан импорт этиу",
+       "action-import": "бетлени башха викиден импорт этиу",
+       "action-importupload": "бетлени джюкленнген файлдан импорт этиу",
        "action-patrol": "башхаланы тюрлендириулерин патруль этилиннгенлеча белгилеу",
        "action-autopatrol": "кесими тюрлендириулерими патруль этилиннгенлеча белгилеу",
        "action-unwatchedpages": "киши кёзюнде тутмагъан бетлени тизмесине къарау",
        "action-sendemail": "E-mail джибериу",
        "action-editmywatchlist": "кёзде тургъан тизменги тюрлендириу",
        "action-viewmywatchlist": "кёзде тургъан тизменги кёрюу",
-       "nchanges": "$1 {{PLURAL:$1|тюрлениу|тюрлениу}}",
+       "nchanges": "$1 {{PLURAL:$1|тюрлениу}}",
        "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|ахыр кере киргенден бери}}",
        "enhancedrc-history": "тарих",
        "recentchanges": "Ахыр тюрлениуле",
        "recentchanges-legend-heading": "<strong>Легенда:&nbsp;</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (къарагъыз: [[Special:NewPages|джангы бетлени тизмеси]])",
        "recentchanges-legend-plusminus": "(''±123'')",
-       "rcnotefrom": "Тюбюрекде <strong>$2</strong> башлаб (<strong>$1</strong> дери) тюрлендириуле кёрюнедиле",
+       "rcfilters-other-review-tools": "<strong>Башха тинтиу адырла</strong>",
+       "rcfilters-activefilters": "Актив фильтрле",
+       "rcfilters-limit-shownum": "Ахыр {{PLURAL:$1|тюрлениуню}} кёргюзт",
+       "rcfilters-quickfilters-placeholder-title": "Сакъланнган джибериуле алкъын джокъдула",
+       "rcfilters-savedqueries-defaultlabel": "Сакъланнган фильтрле",
+       "rcnotefrom": "Тюбюрекде <strong>$3, $4</strong> башлаб (<strong>$1</strong> дери) {{PLURAL:$5|тюрлендириу}} кёрюнедиле",
        "rclistfrom": "$3 $2 башлаб джангы тюрлениулени кёргюз",
        "rcshowhideminor": "гитче тюрлениулени $1",
        "rcshowhideminor-show": "кёргюз",
        "newpageletter": "Дж",
        "boteditletter": "б",
        "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|кёзюнде тутуучу къошулуучу}}]",
-       "rc_categories": "Категориялагъа юлеш («|» бла айыр)",
-       "rc_categories_any": "Ð\9aÑ\8aайсы да",
+       "rc_categories": "Къуру бу категорияладан («|» бла айыр):",
+       "rc_categories_any": "Сайланнгандан ÐºÑ\8aайÑ\81Ñ\8bсы да",
        "rc-change-size": "$1",
        "rc-change-size-new": "Тюрлениуден сора ёлчеми: $1 {{PLURAL:$1|байт}}",
        "newsectionsummary": "/* $1 */ Джангы бёлюм",
        "reuploaddesc": "Джюклеу формасына ызына къайт",
        "upload-tryagain": "Тюрлетилген файл ангылатыуну джибер",
        "uploadnologin": "Сиситемагъа кирмегенсиз",
-       "uploadnologintext": "Файлла джюклер ючюн [[Special:UserLogin|системагъа кирирге]] керексиз.",
+       "uploadnologintext": "Файлла джюклер ючюн $1 керекди.",
        "upload_directory_missing": "Джюклеу директория ($1) табылмайды эмда веб-сервер бла къуралалмайды.",
        "upload_directory_read_only": "Веб-сервер файл джюкленнегн ($1) папкагъа джазыу эркинлиги джокъду.",
        "uploaderror": "Джюклеуню хатасы",
        "upload-recreate-warning": "'''Эс бёлюгюз. Быллай аты бла файл кетерилген этгенди неда аты тюрленилиннгенди.'''\n\nБу бетге кетериуле бла ат тюрлендириулени журналы тюбюрекде бериледи:",
        "uploadtext": "Файл джюклер ючюн тюбюндеги форманы хайырлан.\nАлландан джюкленнген файлланы кёрюр неда излер ючюн [[Special:FileList|джюкленнген файлланы тизмесине]] къарагъыз, (джангыдан) джюкленнгенле [[Special:Log/upload|джюклеу журналында]], кетерилгенле [[Special:Log/delete|кетериу журналында]] тутуладыла.\n\nБетге файл салыр ючюн байлмыгъызда тюбюндеги формаларыны бирин хайырланыгъыз;\n* Файлны бютеу ёлчемини салыр ючюн: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code>'''\n* Сол къыйрда бир тёртгюл ичинде, тюбюндеда ангылатыуу бла, 200 пиксел ёлчеми бла хайырландырыргъа излей эсегиз: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|тюбюнде ангылатыу]]</nowiki></code>'''\n* Файлны кёргюзмей, файлгъа дижбиреиу берирге излей эсегиз: '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code>'''",
-       "upload-permitted": "Эркинлик берилген файлланы типлери: $1.",
-       "upload-preferred": "Изленнген файлланы типлери: $1.",
-       "upload-prohibited": "Джасакъ этилген файлланы типлери: $1.",
+       "upload-permitted": "Эркинлик берилген файлланы {{PLURAL:$2|типи|типлери}}: $1.",
+       "upload-preferred": "Изленнген файлланы {{PLURAL:$2|типи|типлери}}: $1.",
+       "upload-prohibited": "Джасакъ этилген файлланы {{PLURAL:$2|типи|типлери}}: $1.",
        "uploadlogpage": "Джюклеулени журналы",
        "uploadlogpagetext": "Тюбюнде эм ахыр къошулгъан файлланы тизмеси барды.\nДагъыда [[Special:NewFiles|dosyalджангы файлланы галереясына]] къара, анда джангы джюклеулени юсюнден билгиле толу кёрюгюзюлгендиле.",
        "filename": "Файлны аты",
        "filetype-mime-mismatch": "«.$1» файл MIME-типге ($2) келишмейди.",
        "filetype-badmime": "«$1» MIME типли файлланы джюклениуюне эркинлик берлимейди.",
        "filetype-bad-ie-mime": "Internet Explorer, буну эркинлик берилмеген эмда потенциал заран берлик «$1» файл тип кибик таныгъаны ючюн бу файл джюклениллик тюлдю.",
-       "filetype-unwanted-type": "'''\".$1\"''' изленмеген файл типиди.\nИзленнген {{PLURAL:$3|1=файл тип|файл типле}} $2.",
-       "filetype-banned-type": "'''«.$1»''' — {{PLURAL:$4|1=джасакъланнган файл типди|джасакъланнган файл типледиле}}.\nЭркинлик берилген {{PLURAL:$3|1=файл тип|файл типле}}: $2.",
+       "filetype-unwanted-type": "'''«.$1»''' — изленмеген файл типди.\nИзленнген {{PLURAL:$3|1=файл тип|файл типле}} — $2.",
+       "filetype-banned-type": "'''«.$1»''' — {{PLURAL:$4|1=джасакъланнган файл типди|джасакъланнган файл типледиле}}.\nЭркинлик берилген {{PLURAL:$3|1=файл тип|файл типле}} — $2.",
        "filetype-missing": "Файлны кенглешиуу джокъду (сёз ючюн, «.jpg» кибик)",
        "empty-file": "Сиз ийген файл бошду.",
        "file-too-large": "Сиз ийген файл асыры уллуду.",
        "alllogstext": "{{SITENAME}} ючюн бютеу бар болгъан журналланы бирлешген тизмеси.\nЖурнал типини, къошулуучу атны (уллу-гитче харифге кёре) неда тийилген бетни (ол да уллу-гитче харифге кёре) элерге боллукъсуз.",
        "logempty": "Журналлагъа келишген билги джокъду.",
        "log-title-wildcard": "Бу символладан башланнган башлыкъланы изле",
+       "checkbox-select": "Сайлау: $1",
+       "checkbox-all": "Барын да",
+       "checkbox-none": "Бирин да",
+       "checkbox-invert": "Инвертле",
        "allpages": "Бютеу бетле",
        "nextpage": "Эндиги бет ($1)",
        "prevpage": "Алдагъы бет ($1)",
        "tooltip-search": "Бу сёзню изле",
        "tooltip-search-go": "Тамам быллай аты болгъан бетге кёч",
        "tooltip-search-fulltext": "Бу текст болгъан бетлени таб",
-       "tooltip-p-logo": "Баш бет",
+       "tooltip-p-logo": "Баш бетге кёчюу",
        "tooltip-n-mainpage": "Баш бетге кёчюу",
        "tooltip-n-mainpage-description": "Баш бетге кёчюу",
        "tooltip-n-portal": "Проектни юсюнден, сизни не этерге боллугъугъузню юсюнден, хар не къайда болгъаныны юсюнден",
        "confirmrecreate-noreason": "Сиз тюрлендириуле этген заманда [[User:$1|$1]] ([[User talk:$1|сюзюу]]) къошулуучу бу бетни кетергенди. Бетни кертиси бла ызына салыргъа излегенигизни бегитигиз.",
        "recreate": "Джанландыр",
        "unit-pixel": "пикс.",
+       "confirm-purge-title": "Бу бетни кэшы ариула",
        "confirm_purge_button": "OK",
-       "confirm-purge-top": "Бу бетни кеши кетерилсинми?",
+       "confirm-purge-top": "Бу бетни кэшы ариулансынмы?",
        "confirm-purge-bottom": "Бетни кеши кетерилгенден сора, андан сора келген версиясы кёргюзюллюкдю.",
        "confirm-watch-button": "ОК",
        "confirm-unwatch-button": "ОК",
        "fileduplicatesearch-result-n": "«$1» файлны {{PLURAL:$2|1 келишген дубликаты|$2 келишген дубликаты}} барды.",
        "fileduplicatesearch-noresults": "«$1» деген файл табылмады.",
        "specialpages": "Къуллукъ бетле",
-       "specialpages-note": "* Тюз къуллукъ бетле.\n* <span class=\"mw-specialpagerestricted\">Кирирге эркинлик чекленнген къуллукъ бетле.</span>",
        "specialpages-group-maintenance": "Техника баджарыуну отчетлары",
        "specialpages-group-other": "Башха къуллукъ бетле",
        "specialpages-group-login": "Системагъа кириу / Аккаунт къурау",
        "compare-rev2": "Экинчи версия",
        "compare-submit": "Тенглешдир",
        "compare-title-not-exists": "Белгиленнген башлыкъ джокъду.",
+       "diff-form": "'''форма'''",
        "dberr-problems": "Кечериксиз! Бу сайтда техника джаны бла проблемала чыкъгъандыла.",
        "dberr-again": "Талай минутну сакълаб, джангыдан кириб кёрюгюз.",
        "dberr-info": "(билги базаны сервери бла байлам къурулалмайды: $1)",
index 7a1c129..b596b8d 100644 (file)
@@ -65,6 +65,8 @@
        "underline-never": "Qet",
        "underline-default": "Tercîhên lêgerokê",
        "editfont-default": "Tercîhên lêgerokê",
+       "editfont-sansserif": "Fonta Sans-serif'ê",
+       "editfont-serif": "Fonta Serif'ê",
        "sunday": "yekşem",
        "monday": "duşem",
        "tuesday": "sêşem",
        "feb": "reş",
        "mar": "adr",
        "apr": "avr",
-       "may": "gulan",
+       "may": "gln",
        "jun": "pûş",
        "jul": "tîr",
-       "aug": "teb",
+       "aug": "Glw",
        "sep": "rez",
        "oct": "kew",
        "nov": "ser",
        "currentevents": "Bûyerên rojane",
        "currentevents-url": "Project:Bûyerên rojane",
        "disclaimers": "Ferexetname",
-       "disclaimerpage": "Project:Ferexetname",
+       "disclaimerpage": "Project:Ferexetnameya giştî",
        "edithelp": "Alîkariya guherandinê",
        "helppage-top-gethelp": "Alîkarî",
        "mainpage": "Destpêk",
        "portal": "Portala komê",
        "portal-url": "Project:Portala komê",
        "privacy": "Siyaseta veşarîtiyê",
-       "privacypage": "Project:Parastina daneyan",
+       "privacypage": "Project:Siyaseta veşarîtiyê",
        "badaccess": "Çewtiya destûrê",
        "badaccess-group0": "Tu nikarî vî tiştî bikî.",
        "badaccess-groups": "Ev tişta tu dixwazî bikî tenê ji bikarhênerên {{PLURAL:$2|van koman|vê komê}} re {{PLURAL:$2|ne|ye}}: $1.",
        "nstab-media": "Medya",
        "nstab-special": "Rûpela taybet",
        "nstab-project": "Rûpela projeyê",
-       "nstab-image": "Wêne",
+       "nstab-image": "Dosye",
        "nstab-mediawiki": "Peyam",
        "nstab-template": "Şablon",
        "nstab-help": "Alîkarî",
        "templatesused": "{{PLURAL:$1|Şablona|Şablonên}} ku li ser vê rûpelê {{PLURAL:$1|tê|tên}} bikaranîn:",
        "templatesusedpreview": "{{PLURAL:$1|Şablona|Şablonên}} di vê pêşdîtinê de {{PLURAL:$1|tê|tên}} bikaranîn:",
        "templatesusedsection": "{{PLURAL:$1|Şablona ku di vê beşê de tê bikaranîn|Şablonên ku di vê beşê de tên bikaranîn}}:",
-       "template-protected": "(tê parastin)",
+       "template-protected": "()",
        "template-semiprotected": "(nîv-parastî)",
        "hiddencategories": "Ev rûpel endamê {{PLURAL:$1|1 kategoriya veşartî|$1 kategoriyên veşartî}} ye:",
        "nocreate-loggedin": "Destûra te tune ye ku tu rûpelên nu biafirînî.",
        "searchprofile-everything": "Her tişt",
        "searchprofile-advanced": "Pêşketî",
        "searchprofile-articles-tooltip": "Di $1 da lêbigere",
-       "searchprofile-images-tooltip": "Li pelan bigere",
+       "searchprofile-images-tooltip": "Li nav dosyeyan bigere",
        "searchprofile-everything-tooltip": "Di hemû naverokada bigere (tevî gotûbêja)",
        "search-result-size": "$1 ({{PLURAL:$2|peyvek|$2 peyv}})",
        "search-redirect": "(beralîkirina ji $1)",
        "recentchanges-legend": "Vebijarkên guherandinên dawî",
        "recentchanges-summary": "Guhertinên herî dawî yên wîkiyê li ser vê rûpelê bişopîne.",
        "recentchanges-label-newpage": "Rûpeleke nû hate çêkirin",
-       "recentchanges-label-minor": "Ev guherîneke biçûk e",
+       "recentchanges-label-minor": "Ev guhertineke Biçûk e",
        "recentchanges-label-bot": "Ev guherîn ji aliyê botekê ve hate çêkirin",
        "recentchanges-label-unpatrolled": "Ev gotar hêjî nehatiye sererastkirin",
        "recentchanges-label-plusminus": "Qebareya vê rûpelê bi ev qas biteyan hate guherandin",
        "filetype-banned": "Dosyeyên bi vê cureye hatîye qedexekirin.",
        "verification-error": "Ev dosye, rastandina dosyeye derbas nekir.",
        "unknown-error": "Çewtiyeke nenas pêk hat.",
-       "large-file": "Mezinbûna pelê bila ji $1 ne mezintir be; ev pel $2 e.",
+       "large-file": "Mezinbûna dosyeyê divê ji $1 ne mezintir be; ev dosye $2 e.",
        "emptyfile": "Data'ya barkirî vala ye. Sedemê valabûnê belkî şaşnivîsek di navê data'yê da ye. Xêra xwe seke, ku tu rast dixazê vê data'yê barbikê.",
        "fileexists": "Datayek bi vê navê berê heye.\nEger tu niha li „Tomarbike“ xê, ew wêneyê kevin ê here û wêneyê te ê were barkirin di bin wê navê.\nDi bin <strong>[[:$1]]</strong> du dikarî sekê, ku di dixwazê wê wêneyê biguherînê.\nEger tu naxazê, xêra xwe li „Betal“ xe.\n[[$1|thumb]]",
        "fileexists-extension": "Datayek wek vê navê berê heye: [[$2|thumb]]\n* Navî datayê yê tê barkirin: <strong>[[:$1]]</strong>\n* Navî datayê yê berê heyê: <strong>[[:$2]]</strong>\nXêra xwe navekî din bibîne.",
        "filehist-user": "Bikarhêner",
        "filehist-dimensions": "Mezinahî",
        "filehist-filesize": "Mezinahiya pelê",
-       "filehist-comment": "Şîrove",
+       "filehist-comment": "Şirove",
        "imagelinks": "Bikaranîna pelê",
        "linkstoimage": "Di van rûpelan de {{PLURAL:$1|page links|$1  lînkek}} ji vî dosyeye re heye:",
        "nolinkstoimage": "Rûpelekî ku ji vî wêneyî re girêdankê çêdike nîne.",
        "linkstoimage-redirect": "$1 (beralîkirina pelê) $2",
-       "sharedupload-desc-here": "Ev pel ji $1 û dibe ku ji aliyê projeyên din ve jî hatibe bikaranîn.\nAgahdariya li ser [$2 rûpela danasîna pelê] li jêr tê nîşandan.",
+       "sharedupload-desc-here": "Ev dosye ji $1 û dibe ku ji aliyê projeyên din ve jî hatibe bikaranîn.\nAgahdariya li ser [$2 rûpela danasîna dosyeyê] li jêr tê nîşandan.",
        "filepage-nofile-link": "Dosyeyek bi vî navî tune ye, lê tu dikarî wê [$1 bar bikî].",
        "uploadnewversion-linktext": "Versiyoneke nû ya vê daneyê barbike",
        "shared-repo-from": "ji $1",
index 7b13861..43f900f 100644 (file)
        "recentchanges-submit": "Weisen",
        "rcfilters-tag-remove": "'$1' ewechhuelen",
        "rcfilters-legend-heading": "<strong>Lëscht vun Ofkierzungen:</strong>",
+       "rcfilters-other-review-tools": "<strong>Aner Méiglechkeete fir z'iwwerliesen</strong>",
+       "rcfilters-group-results-by-page": "Resultater no de Säite gruppéieren",
        "rcfilters-grouping-title": "Gruppéieren",
        "rcfilters-activefilters": "Aktiv Filteren",
        "rcfilters-advancedfilters": "Erweidert Filteren",
        "rcfilters-empty-filter": "Keen aktive Filter. All Kontributioune gi gewisen.",
        "rcfilters-filterlist-title": "Filteren",
        "rcfilters-filterlist-whatsthis": "Wéi geet dat?",
+       "rcfilters-filterlist-feedbacklink": "Sot eis wat Dir vun dësen (neien) Filterméiglechkeeten haalt",
        "rcfilters-highlightbutton-title": "Resultater ervirhiewen",
        "rcfilters-highlightmenu-title": "Eng Faarf eraussichen",
        "rcfilters-filterlist-noresults": "Keng Filtere fonnt",
        "rcfilters-filter-previousrevision-description": "All Ännerungen, déi net déi 'rezentst Versioun' vun enger Säit sinn.",
        "rcfilters-filter-excluded": "Ausgeschloss",
        "rcfilters-tag-prefix-namespace-inverted": "<strong>:net</strong> $1",
+       "rcfilters-exclude-button-off": "Déi Ausgewielt ausschléissen",
+       "rcfilters-exclude-button-on": "Déi Ausgewielt ausschléissen",
        "rcfilters-view-advanced-filters-label": "Erweidert Filteren",
        "rcfilters-view-tags": "Markéiert Ännerungen",
        "rcfilters-view-namespaces-tooltip": "Resultater no Nummraum filteren",
        "rcfilters-liveupdates-button-title-off": "Nei Ännerunge weisen esoubal wéi se gemaach ginn",
        "rcfilters-watchlist-markseen-button": "All Ännerungen als gesi markéieren",
        "rcfilters-watchlist-edit-watchlist-button": "Ännert Är Lëscht vun iwwerwaachte säiten",
+       "rcfilters-watchlist-showupdated": "Ännerungen op Säiten déi Dir net besicht hutt zanter d'Ännerunge gemaach goufen si <strong>fett</strong> geschriwwen.",
+       "rcfilters-preference-label": "Déi verbessert Versioun vun de rezenten Ännerunge verstoppen",
        "rcnotefrom": "Hei drënner {{PLURAL:$5|gëtt d'Ännerung|ginn d'Ännerungen}} zanter <strong>$3, $4</strong> (maximal <strong>$1</strong> Ännerunge gi gewisen).",
        "rclistfrom": "Nei Ännerunge vum $3 $2 u weisen",
        "rcshowhideminor": "Kleng Ännerunge $1",
        "file-deleted-duplicate-notitle": "En identesche Fichier gouf scho geläscht an den Titel gouf suppriméiert. Dir sollt e froen dee suppriméiert Date vu Fichiere kucken däerf fir d'Situatioun ze klären ier Dir de Fichier nach eng Kéier eroplued.",
        "uploadwarning": "Opgepasst",
        "uploadwarning-text": "Ännert d'Beschreiwung hei ënnedrënner w.e.g. a versicht et nach eng Kéier.",
+       "uploadwarning-text-nostash": "Lued de Fichier w.e.g. nach emol erop, ännert d'Beschreiwung hei drënner a probéiert nach eng Kéier",
        "savefile": "Fichier späicheren",
        "uploaddisabled": "Pardon, d'Eropluede vu Fichieren ass ausgeschalt.",
        "copyuploaddisabled": "D'Eroplueden iwwer URL ass desaktivéiert.",
        "listfiles_size": "Gréisst",
        "listfiles_description": "Beschreiwung",
        "listfiles_count": "Versiounen",
-       "listfiles-show-all": "Al Versioune vu Biller aschléissen",
+       "listfiles-show-all": "Al Versioune vu Fichieren aschléissen",
        "listfiles-latestversion": "Aktuell Versioun",
        "listfiles-latestversion-yes": "Jo",
        "listfiles-latestversion-no": "Neen",
index 446a372..41cc8a4 100644 (file)
                        "Angel Blaise"
                ]
        },
-       "tog-underline": "Sulinia lias:",
-       "tog-hideminor": "Asconda editas minor en cambias resente",
+       "tog-underline": "Sulini de lias:",
+       "tog-hideminor": "Asconde editas minor en cambias resente",
        "tog-hidepatrolled": "Asconde editas patruliada de cambias resente",
-       "tog-newpageshidepatrolled": "Asconde pajes patruliada de lista de pajes nova",
-       "tog-hidecategorization": "Asconde categori de pajes",
-       "tog-extendwatchlist": "Grandi la lista oservada per mostra tota cambias aplicable",
-       "tog-usenewrc": "Aumenta cambias resente (JavaScript)",
-       "tog-numberheadings": "Dona automatica numeros a titula",
-       "tog-showtoolbar": "Mostra la bara de utiles per edita (JavaScript)",
-       "tog-editondblclick": "Edita pajes a du clicas (JavaScript)",
-       "tog-editsectiononrightclick": "Engrana la edita de sesion par clica a la destra a titulos de sesion (JavaScript)",
-       "tog-watchcreations": "Junta la pajes cual me ia crea e fixes cual me ia carga  a mea lista de pajes oservada",
-       "tog-watchdefault": "Junta pajes e imajes cual me ia edita a mea lista de pajes oservada",
-       "tog-watchmoves": "Junta pajes e fixes cual me ia moveda a mea lista de pajes oservada",
-       "tog-watchdeletion": "Junta pajes cual me ia sutrae a mea lista de pajes oservada",
-       "tog-watchuploads": "Ajunta fixes nova cual me ia carga a mea lista de pajes oservada",
-       "tog-watchrollback": "Ajunta pajes a cual me ia reversa a mea lista de pajes oservada",
-       "tog-minordefault": "Marca costumal tota editas como minor",
-       "tog-previewontop": "Mostra la previde ante la caxa de editas",
+       "tog-newpageshidepatrolled": "Asconde pajes patruliada de la lista de pajes nova",
+       "tog-hidecategorization": "Asconde la categori de pajes",
+       "tog-extendwatchlist": "Aumenta la lista monitorida per mostra tota cambias, no sola la plu resentes",
+       "tog-usenewrc": "Grupi cambias par paje en cambias resente e lista monitorida",
+       "tog-numberheadings": "Numeri automata titulos",
+       "tog-showtoolbar": "Mostra la utiles de edita",
+       "tog-editondblclick": "Edita pajes par clica duple",
+       "tog-editsectiononrightclick": "Edita un parte par clica destra un titulo de parte",
+       "tog-watchcreations": "Ajunta a mea lista monitorida la pajes cual me crea e la fixes cual me carga",
+       "tog-watchdefault": "Ajunta a mea lista monitorida la pajes e fixes cual me edita",
+       "tog-watchmoves": "Ajunta a mea lista monitorida la pajes e fixes cual me move",
+       "tog-watchdeletion": "Ajunta a mea lista monitorida la pajes cual me sutrae",
+       "tog-watchuploads": "Ajunta a mea lista monitorida la fixes nova cual me carga",
+       "tog-watchrollback": "Ajunta a mea lista monitorida la pajes con editas cual me reversa",
+       "tog-minordefault": "Marca inisial tota editas como minor",
+       "tog-previewontop": "Mostra la previde ante la caxa de edita",
        "tog-previewonfirst": "Mostra la previde a la edita prima",
-       "tog-enotifwatchlistpages": "Envia un eposta a me cuando un paje o fix cual me oserva es cambiada",
-       "tog-enotifusertalkpages": "Envia me un eposta cuando me paje de discutes es cambiada",
-       "tog-enotifminoredits": "Ance envia un eposta a me con editas minor de pajes e fixes",
-       "tog-enotifrevealaddr": "Descovre la me adirije de eposta en postas de nota",
-       "tog-shownumberswatching": "Mostra la numero de usores oservante",
-       "tog-oldsig": "Tua suscrive presente",
-       "tog-fancysig": "Trata la suscrive como vicitesto (sin lia automatica)",
-       "tog-uselivepreview": "Usa un previde direta",
-       "tog-forceeditsummary": "Recorda me cuando entera un resoma vacua de edita",
-       "tog-watchlisthideown": "Asconde me editas de la lista de pajes oservada",
-       "tog-watchlisthidebots": "Asconde editas par bot de la lista de pajes oservada",
-       "tog-watchlisthideminor": "Asconde editas minor de la lista de pajes oservada",
-       "tog-watchlisthideliu": "Asconde editas par usores identifiada de la lista de pajes oservada",
-       "tog-watchlistreloadautomatically": "Recarga automata la lista de pajes oservada cuando un filtre es cambiada (JavaScript nesesada)",
-       "tog-watchlisthideanons": "Asconde editas par usores anonim de la lista de pajes oservada",
-       "tog-watchlisthidepatrolled": "Asconde editas patruliada de la lista de pajes oservada",
+       "tog-enotifwatchlistpages": "Envia un eposta a me cuando on cambia un paje o fix cual me monitori",
+       "tog-enotifusertalkpages": "Envia un eposta a me on cambia mea paje de discute",
+       "tog-enotifminoredits": "Envia un eposta a me ance pos editas minor de pajes e fixes",
+       "tog-enotifrevealaddr": "Revela mea adirije de eposta en epostas avisante",
+       "tog-shownumberswatching": "Mostra la cuantia de usores monitorinte",
+       "tog-oldsig": "Tua suscrive presente:",
+       "tog-fancysig": "Trata la suscrive como vicitesto (sin lia automata)",
+       "tog-uselivepreview": "Mostra prevides sin recarga la paje",
+       "tog-forceeditsummary": "Avisa me cuando me no pleni un resoma de edita",
+       "tog-watchlisthideown": "Asconde mea editas en la lista monitorida",
+       "tog-watchlisthidebots": "Asconde editas par bot en la lista monitorida",
+       "tog-watchlisthideminor": "Asconde editas minor en la lista monitorida",
+       "tog-watchlisthideliu": "Asconde editas par usores autenticida en la lista monitorida",
+       "tog-watchlistreloadautomatically": "Recarga automata la lista monitorida cuando on cambia un filtro (JavaScript es usada)",
+       "tog-watchlistunwatchlinks": "Ajunta lias direta per monitori/desmonitori a pajes monitorida (JavaScript es usada per alterna entre la du)",
+       "tog-watchlisthideanons": "Asconde editas par usores anonim en la lista monitorida",
+       "tog-watchlisthidepatrolled": "Asconde editas patruliada en la lista monitorida",
        "tog-watchlisthidecategorization": "Asconde la categori de pajes",
-       "tog-ccmeonemails": "Envia copias de la epostas ce me envia a otras a me ance",
-       "tog-diffonly": "No mostra la conteni de paje su diffes",
+       "tog-ccmeonemails": "Envia a me copias de epostas cual me envia a otra usores",
+       "tog-diffonly": "No mostra contenidas de pajes su diferes",
        "tog-showhiddencats": "Mostra categorias ascondeda",
-       "tog-norollbackdiff": "No mostra diff pos un reversa",
-       "tog-useeditwarning": "Avisa me cuando me sorti un paje de edita con cambias nonsalvada",
-       "tog-prefershttps": "Sempre usa un lia secur cuando identifiada",
-       "underline-always": "A tota tempo",
-       "underline-never": "A no tempo",
-       "underline-default": "Inisial de pel o surfador",
-       "editfont-style": "Edita area de stilo de leteras",
-       "editfont-default": "Inisial de surfador",
+       "tog-norollbackdiff": "No mostra diferes pos un reversa",
+       "tog-useeditwarning": "Avisa me cuando me parti de un paje de edita con cambias nonfisada",
+       "tog-prefershttps": "Usa sempre un lia secur cuando me es autenticida",
+       "underline-always": "Sempre",
+       "underline-never": "Nunca",
+       "underline-default": "Implicada par pel o surfador",
+       "editfont-style": "Stilo de leteras en la caxa de edita",
+       "editfont-default": "Implicada par surfador",
        "editfont-monospace": "Leteras monospasida",
-       "editfont-sansserif": "Leteras sin serifes",
-       "editfont-serif": "Leteras con serifes",
+       "editfont-sansserif": "Leteras sin serif",
+       "editfont-serif": "Leteras con serif",
        "sunday": "soldi",
        "monday": "lundi",
        "tuesday": "martedi",
@@ -70,7 +71,7 @@
        "thursday": "jovedi",
        "friday": "venerdi",
        "saturday": "saturdi",
-       "sun": "Sol",
+       "sun": "sol",
        "mon": "lun",
        "tue": "mar",
        "wed": "mer",
@@ -94,8 +95,8 @@
        "march-gen": "marto",
        "april-gen": "april",
        "may-gen": "maio",
-       "june-gen": "Junio",
-       "july-gen": "Julio",
+       "june-gen": "junio",
+       "july-gen": "julio",
        "august-gen": "agosto",
        "september-gen": "setembre",
        "october-gen": "otobre",
        "pagecategories": "{{PLURAL:$1|Categoria|Categorias}}",
        "category_header": "Pajes en categoria \"$1\"",
        "subcategories": "Sucategorias",
-       "category-media-header": "Medias en catagoria \"$1\"",
+       "category-media-header": "Medias en categoria \"$1\"",
        "category-empty": "<em>Esta categoria conteni no pajes e no medias.</em>",
        "hidden-categories": "{{PLURAL:$1|Categoria|Categorias}} ascondeda",
        "hidden-category-category": "Categorias ascondeda",
        "category-subcat-count": "{{PLURAL:$2|Esta categoria ave sola la sucategoria seguente.|Esta categoria ave la {{PLURAL:$1|sucategoria|$1 sucategorias}} seguente, de un cuantia intera de $2.}}",
-       "category-subcat-count-limited": "Esta categoria ave la {{PLURAL:$1|sucategoria|$1sucategorias}} seguente.",
+       "category-subcat-count-limited": "Esta categoria ave la {{PLURAL:$1|sucategoria|$1 sucategorias}} seguente.",
        "category-article-count": "{{PLURAL:$2|Esta categoria conteni sola la paje seguente.|La {{PLURAL:$1|paje|$1 pajes}} seguente es en esta categoria, de un cuantia intera de $2.}}",
-       "category-article-count-limited": "La {{PLURAL:$1|paje|$1pajes}} seguente es en la categoria presente.",
+       "category-article-count-limited": "La {{PLURAL:$1|paje|$1pajes }} seguente es en la categoria presente.",
        "category-file-count": "{{PLURAL:$2|Esta categoria conteni sola la fix seguente.|La {{PLURAL:$1|fix|$1 fixes}} seguente es en esta categoria, de un cuantia intera de $2.}}",
        "category-file-count-limited": "The {{PLURAL:$1|fix|$1 fixes}} seguente es en la categoria presente.",
        "listingcontinuesabbrev": "cont.",
-       "index-category": "Pajes indiseda",
+       "index-category": "Pajes catalogida",
        "noindex-category": "Pajes noncatalogida",
-       "broken-file-category": "Pajes con lias rompeda de fixes",
+       "broken-file-category": "Pajes con lias de fix rompeda",
        "about": "Sur",
-       "article": "Paje de contenis",
+       "article": "Paje de contenida",
        "newwindow": "(abri en fenetra nova)",
        "cancel": "Cansela",
        "moredotdotdot": "Plu...",
-       "morenotlisted": "Esta lista es posible noncompleta.",
+       "morenotlisted": "Esta lista es cisa noncompleta.",
        "mypage": "Paje",
-       "mytalk": "Discutes",
+       "mytalk": "Discute",
        "anontalk": "Discute",
        "navigation": "Naviga",
        "and": "&#32;e",
        "tagline": "De {{SITENAME}}",
        "help": "Aida",
        "search": "Xerca",
-       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Titulos cual va es iniorada par xerca.\n# Cambias a esta va aveni pronto cuando la paje con la titulo es indiseda.\n# Tu pote forsa la reindise de un paje par fa un edita vacua.\n# La sintax es como la seguente:\n#   * Tota de la sinia \"#\" a la fini de la linia es un comenta.\n#   * Tota linia nonvacua es la titulo esata per iniora, incluinte caso etc.\nReferes\nLias esterna\nVide ance\n #</pre> <!-- leave this line exactly as it is -->",
+       "search-ignored-headings": " #<!-- leave this line exactly as it is --> <pre>\n# Titulos cual xercas iniora.\n# Cambias a estas aveni direta cuando on catalogi la paje con la titulo.\n# On pote forsa la recatalogi de un paje par fa un edita vacua.\n# La sintatica es la seguente:\n#   * Tota testo de un sinia \"#\" asta la fini de la linia es un comenta.\n#   * Cada linia nonvacua es la titulo esata cual va es iniorada, con cualce leteras major, etc.\nReferes\nLias esterna\nVide ance\n #</pre> <!-- leave this line exactly as it is -->",
        "searchbutton": "Xerca",
        "go": "Vade",
        "searcharticle": "Vade",
        "history": "Istoria de paje",
        "history_short": "Istoria",
        "history_small": "istoria",
-       "updatedmarker": "renovida de me visita presedente",
+       "updatedmarker": "cambiada pos mea visita la plu resente",
        "printableversion": "Varia primable",
        "permalink": "Lia permanente",
        "print": "Primi",
        "view": "Leje",
        "view-foreign": "Mostra en $1",
        "edit": "Edita",
-       "edit-local": "Edita descrive local",
+       "edit-local": "Edita la descrive local",
        "create": "Crea",
        "create-local": "Ajunta un descrive local",
        "delete": "Sutrae",
-       "undelete_short": "Desutrae {{PLURAL:$1|edita|editas}}",
-       "viewdeleted_short": "Vide {{PLURAL:$1|un edit desutraeda|$1 editas desutraeda}}",
+       "undelete_short": "Desutrae {{PLURAL:$1|edita|$1 editas}}",
+       "viewdeleted_short": "Vide {{PLURAL:$1|un edita sutraeda|$1 editas sutraeda}}",
        "protect": "Proteje",
        "protect_change": "cambia",
        "unprotect": "Cambia la proteje",
        "talkpagelinktext": "discute",
        "specialpage": "Paje spesial",
        "personaltools": "Utiles personal",
-       "talk": "Discutes",
+       "talk": "Discute",
        "views": "Aspetas",
        "toolbox": "Utiles",
        "tool-link-userrights": "Cambia grupos de {{GENDER:$1|usor}}",
        "tool-link-userrights-readonly": "Vide grupos de {{GENDER:$1|usor}}",
-       "tool-link-emailuser": "E-posta esta {{GENDER:$1|usor}}",
-       "imagepage": "Vide paje de fix",
+       "tool-link-emailuser": "Envia un eposta a esta {{GENDER:$1|usor}}",
+       "imagepage": "Vide la paje de fix",
        "mediawikipage": "Vide la paje de mesaje",
-       "templatepage": "Vide la paje de model",
+       "templatepage": "Vide la paje de stensil",
        "viewhelppage": "vide la paje de aida",
        "categorypage": "Vide la paje de categoria",
        "viewtalkpage": "Vide la discute",
        "redirectpagesub": "Paje redirijente",
        "redirectto": "Redirije a:",
        "lastmodifiedat": "La edita la plu resente de esta paje ia es a $1, a $2",
-       "viewcount": "Esta paje es asesada a $1 {{PLURAL:$1|ves|veses}}.",
+       "viewcount": "On ia asede esta paje a $1 {{PLURAL:$1|ves|$1 veses}}.",
        "protectedpage": "Paje protejeda",
        "jumpto": "Salta a:",
        "jumptonavigation": "naviga",
        "jumptosearch": "xerca",
-       "view-pool-error": "Pardona, la servadores es tro cargada a esta ora.\nTro multe usores es atenta vide esta paje.\nPer favore espeta ante cuanto tu atenta vide esta paje denova.\n\n$1",
-       "generic-pool-error": "Pardona, la servadores es tro cargada a esta ora.\nTro multe usores es atentante vide esta recurso.\nPer favore espeta ante cuando tu atenta vide esta recurso denova.",
+       "view-pool-error": "Pardona, la servadores es aora supracargada.\nTro multe usores atenta regarda esta paje.\nPer favore, pausa per un tempo ante atenta asede esta paje denova.\n\n$1",
+       "generic-pool-error": "Pardona, la servadores es aora supracargada.\nTro multe usores atenta regarda esta recurso.\nPer favore, pausa per un tempo ante atenta asede esta recurso denova.",
+       "pool-timeout": "Semafor nonotenable: atenta abandonada",
+       "pool-queuefull": "Filo de servadores es plen",
+       "pool-errorunknown": "Era nonconoseda",
+       "pool-servererror": "La manejador de servadores no es disponable ($1)",
+       "poolcounter-usage-error": "Era de usa: $1",
        "aboutsite": "Sur {{SITENAME}}",
        "aboutpage": "Project:Sur",
        "copyright": "La contenida es disponeda su $1, estra diferes notada.",
        "portal-url": "Project:Porton de comunia",
        "privacy": "Promete de privatia",
        "privacypage": "Project:Promete de privatia",
-       "ok": "Oce",
+       "badaccess": "Era de permete",
+       "badaccess-group0": "Tu no es permeteda a fa la ata cual tu ia solisita.",
+       "badaccess-groups": "La ata cual tu ia solisita es limitada a usores en {{PLURAL:$2|la grupo|un de la grupos}}: $1.",
+       "versionrequired": "Revisa $1 de MediaWiki es nesesada",
+       "versionrequiredtext": "Revisa $1 de MediaWiki es nesesada per usa esta paje.\nVide la [[Special:Version|paje de varias]].",
+       "ok": "Bon",
        "retrievedfrom": "Retraeda de \"$1\"",
        "youhavenewmessages": "{{PLURAL:$3|Tu ave}} $1 ($2).",
        "youhavenewmessagesfromusers": "{{PLURAL:$4|Tu ave}} $1 de {{PLURAL:$3|un otra usor|$3 usores}} ($2).",
+       "youhavenewmessagesmanyusers": "Tu ave $1 de multe usores ($2).",
        "newmessageslinkplural": "{{PLURAL:$1|un mesaje nova|999=mesajes nova}}",
        "newmessagesdifflinkplural": "{{PLURAL:$1|cambia|cambias}} resente",
        "youhavenewmessagesmulti": "Tu ave mesajes nova en $1",
        "editsection": "edita",
        "editold": "edita",
-       "viewsourceold": "fonte",
+       "viewsourceold": "regarda vicitesto",
        "editlink": "edita",
-       "viewsourcelink": "fonte",
-       "editsectionhint": "Edita de parte: $1",
+       "viewsourcelink": "regarda vicitesto",
+       "editsectionhint": "Edita la parte: $1",
        "toc": "Contenida",
        "showtoc": "mostra",
        "hidetoc": "asconde",
        "confirmable-confirm": "Esce {{GENDER:$1|tu}} es serta?",
        "confirmable-yes": "Si",
        "confirmable-no": "No",
+       "thisisdeleted": "Vide o restora $1?",
        "viewdeleted": "Vide $1?",
+       "restorelink": "{{PLURAL:$1|un edita sutraeda|$1 editas sutraeda}}",
        "feedlinks": "Flue:",
-       "site-rss-feed": "$1 RSS Flue",
-       "site-atom-feed": "$1 Flue Atom",
-       "page-rss-feed": "\"$1\" RSS Flue",
-       "page-atom-feed": "\"$1\" Flue Atom",
+       "feed-invalid": "Tipo de flue no es valida.",
+       "feed-unavailable": "Flues no es disponable",
+       "site-rss-feed": "$1 flue RSS",
+       "site-atom-feed": "$1 flue Atom",
+       "page-rss-feed": "\"$1\" flue RSS",
+       "page-atom-feed": "\"$1\" flue Atom",
        "red-link-title": "$1 (paje no esiste)",
+       "sort-descending": "Ordina desendente",
+       "sort-ascending": "Ordina asendente",
        "nstab-main": "Paje",
        "nstab-user": "Paje de usor",
-       "nstab-media": "Paje de medio",
+       "nstab-media": "Paje de media",
        "nstab-special": "Paje spesial",
        "nstab-project": "Paje de projeta",
        "nstab-image": "Fix",
        "nstab-help": "Paje de aida",
        "nstab-category": "Categoria",
        "mainpage-nstab": "Paje xef",
-       "nosuchspecialpage": "Paje spesial nonesistente",
+       "nosuchaction": "Esta ata no es reconoseda",
+       "nosuchactiontext": "La ata spesifada par la URL es nonvalida.\nCisa tu ia maltape la URL o ia segue un lia noncoreta.\nO cisa esta indica un defeto en la program usada par {{SITENAME}}.",
+       "nosuchspecialpage": "Esta paje spesial no esiste",
        "nospecialpagetext": "<strong>Tu ia solisita un paje spesial nonvalida.</strong>\n\nUn lista de pajes spesial valida es disponable en [[Special:SpecialPages|{{int:specialpages}}]].",
        "error": "Era",
-       "databaseerror": "Era de base de datos",
+       "databaseerror": "Era de banco de datos",
+       "databaseerror-text": "Un era ia aveni en interoga la banco de datos.\nCisa esta indica un defeto en la program.",
+       "databaseerror-textcl": "Un era ia aveni en interoga la banco de datos.",
+       "databaseerror-query": "Interoga: $1",
+       "databaseerror-function": "Funsiona: $1",
+       "databaseerror-error": "Era: $1",
+       "transaction-duration-limit-exceeded": "Per evita causa un pausa longa de copia, esta interata ia es abortada car la scrive ($1) ia dura plu ca la limita de {{PLURAL:$2|secondo|secondos}}.",
+       "laggedslavemode": "<strong>Avisa:</strong> Cisa la paje no conteni cambias resente.",
+       "readonly": "La banco de datos es cluida",
+       "enterlockreason": "Tape un razona per la semafor, incluinte un estima de cuando lo va es sutraeda",
+       "readonlytext": "La banco de datos es aora cluida per entradas nova e otra cambias, probable per permete mantenis normal, pos cual lo va funsiona denova normal.\nLa dirijor ci ia clui lo ia ofre esta esplica: $1",
+       "missing-article": "La banco de datos no ia trova la testo de un paje cual lo ia espeta trova, nomida \"$1\" $2.\n\nEsta es usual causada par segue un difere nonfresca o un lia de istoria a un paje cual on ia sutrae.\n\nSi lo no es tal, cisa tu ia trova un defeto en la program.\nPer favore, reporta esta a un [[Special:ListUsers/sysop|dirijor]], incluinte la URL.",
+       "missingarticle-rev": "(revisa: $1)",
        "missingarticle-diff": "(Difere: $1, $2)",
+       "readonly_lag": "La banco de datos es automata cluida per permete ce la suservadores sincroni con la servador xef.",
+       "nonwrite-api-promise-error": "La xapo HTTP 'Promise-Non-Write-API-Action' ia es enviada, ma la solisita ia es a un modulo de API-Write.",
        "internalerror": "Era interna",
        "internalerror_info": "Era interna: $1",
+       "internalerror-fatal-exception": "Era nonreparable de tipo \"$1\"",
+       "filecopyerror": "Fix \"$1\" no ia pote es copiada a \"$2\".",
+       "filerenameerror": "Fix \"$1\" no ia pote es renomida a \"$2\".",
+       "filedeleteerror": "Fix \"$1\" no ia pote es sutraeda.",
+       "directorycreateerror": "Arcivo \"$1\" no ia pote es creada.",
+       "directoryreadonlyerror": "Arcivo \"$1\" es nonscrivable.",
+       "directorynotreadableerror": "Arcivo \"$1\" es nonlejable.",
+       "filenotfound": "Fix \"$1\" no ia pote es trovada.",
+       "unexpected": "Valua nonespetada: \"$1\"=\"$2\".",
+       "formerror": "Era: La formulario no ia pote es enviada.",
+       "badarticleerror": "Esta ata no pote es fada a esta paje.",
+       "cannotdelete": "La paje o fix \"$1\" no ia pote es sutraeda.\nCisa un otra usor ia sutrae ja lo.",
+       "cannotdelete-title": "La paje \"$1\" no pote es sutraeda",
+       "delete-hook-aborted": "Sutrae abortada par un program estendente.\nLo no ia furni un esplica.",
+       "no-null-revision": "Un revisa nova vacua no ia pote es creada per paje \"$1\"",
        "badtitle": "Mal titulo",
-       "badtitletext": "La titulo de la paje spesifada es nonlegal, vacua, o un titulo interlingual o intervici de lia noncoreta. Cisa lo conteni un o plu sinias cual on no pote usa en titulos.",
-       "viewsource": "Mostra la fonte",
-       "viewsource-title": "Regarda la fonte per $1",
-       "viewsourcetext": "Tu pote regarda e copia la fonte de esta paje:",
-       "mycustomcssprotected": "Tu no ave permete per edita esta paje CSS.",
-       "mycustomjsprotected": "Tu no ave permete per edita esta paje JavaScript.",
-       "myprivateinfoprotected": "Tu no ave permete per edita tua informa privata.",
-       "mypreferencesprotected": "Tu no ave permete per edita tua preferes.",
-       "ns-specialprotected": "La pajes spesial no pote es editada.",
+       "badtitletext": "La titulo de la paje spesifada es nonlegal, vacua, o un titulo interlingual o intervical con lia noncoreta. Cisa lo conteni un o plu sinias cual on no pote usa en titulos.",
+       "title-invalid-empty": "La titulo de paje solisitada es vacua o conteni sola la nom de un spasio de nom.",
+       "title-invalid-utf8": "La titulo de paje solisitada conteni un segue nonvalida de sinias UTF-8.",
+       "title-invalid-interwiki": "La titulo de paje solisitada conteni un lia intervical cual on no pote usa en titulos.",
+       "title-invalid-talk-namespace": "La titulo de paje solisitada refere a un paje de discute cual no pote esiste.",
+       "title-invalid-characters": "La titulo de paje solisitada conteni sinias nonvalida: \"$1\".",
+       "title-invalid-relative": "La titulo ave un adirije relativa. Titulos relativa (./, ../) no es valida, car los va es comun nonatenable cuando un surfador prosede los.",
+       "title-invalid-magic-tilde": "La titulo de paje solisitada conteni un segue nonvalida de tildes majiosa (<nowiki>~~~</nowiki>).",
+       "title-invalid-too-long": "La titulo de paje solisitada es tro longa. Lo debe es no plu longa ca $1 {{PLURAL:$1|bait|baites}} en codigo UTF-8.",
+       "title-invalid-leading-colon": "La titulo de paje solisitada conteni un dupunto nonvalida a la comensa.",
+       "perfcached": "La datos seguente veni de prememoria e es cisa nonfresca. No plu ca {{PLURAL:$1|un resulta|$1 resultas}} es disponable en la prememoria.",
+       "perfcachedts": "La datos seguente veni de prememoria e la refresci la plu resente ia aveni a $1. No plu ca {{PLURAL:$4|un resulta|$4 resultas}} es disponable en la prememoria.",
+       "querypage-no-updates": "Refrescis de esta paje es aora descomutada.\nDatos asi no va es refrescida a presente.",
+       "viewsource": "Regarda vicitesto",
+       "viewsource-title": "Regarda vicitesto per $1",
+       "actionthrottled": "Ata limitada",
+       "actionthrottledtext": "Per defende contra malusa, usores no pote fa esta ata a tro multe veses en un tempo corta, e tu ia esede esta limita.\nPer favore, atenta denova pos alga minutos.",
+       "protectedpagetext": "Esta paje es protejeda per preveni editas o otra atas.",
+       "viewsourcetext": "Tu pote regarda e copia la vicitesto de esta paje:",
+       "viewyourtext": "Tu pote regarda e copia la vicitesto de <strong>tua editas</strong> a esta paje.",
+       "protectedinterface": "Esta paje furni testo interfasal per la program de esta vici, e es protejeda per preveni malusa.\nPer ajunta o cambia traduis per tota vicis, usa [https://translatewiki.net/ translatewiki.net], la projeta de tradui MediaWiki.",
+       "editinginterface": "<strong>Avisa:</strong> Tu edita un paje cual es usada per furni testo interfasal per la program.\nCambias a esta paje va afeta la aspeta de la interfas per otra usores de esta vici.",
+       "translateinterface": "Per ajunta o cambia traduis per tota vicis, usa [https://translatewiki.net/ translatewiki.net], la projeta de tradui MediaWiki.",
+       "cascadeprotected": "Esta paje es protejeda contra editas car lo es transcluida en la {{PLURAL:$1|paje|pajes}} seguente, cual es cascadin protejeda:\n$2",
+       "namespaceprotected": "Tu no es permeteda a edita pajes en la spasio de nom <strong>$1</strong>.",
+       "customcssprotected": "Tu no es permeteda a edita esta paje de CSS, car lo conteni la preferes personal de un otra usor.",
+       "customjsprotected": "Tu no es permeteda a edita esta paje de JavaScript, car lo conteni la preferes personal de un otra usor.",
+       "mycustomcssprotected": "Tu no es permeteda a edita esta paje de CSS.",
+       "mycustomjsprotected": "Tu no es permeteda a edita esta paje de JavaScript.",
+       "myprivateinfoprotected": "Tu no es permeteda a edita tua informas privata.",
+       "mypreferencesprotected": "Tu no es permeteda a edita tua preferes.",
+       "ns-specialprotected": "Pajes spesial no pote es editada.",
+       "titleprotected": "[[User:$1|$1]] ia proteje la crea de esta titulo.\nLa razona donada es <em>$2</em>.",
+       "filereadonlyerror": "La fix \"$1\" no pote es alterada, car la arciveria \"$2\" es nonscrivable a presente.\n\nLa dirijor ci ia fa esta ia ofre esta esplica: \"$3\".",
+       "invalidtitle-knownnamespace": "Titulo nonvalida con spasio de nom \"$2\" e testo \"$3\"",
+       "invalidtitle-unknownnamespace": "Titulo nonvalida con numero nonconoseda de spasio de nom $1 e testo \"$2\"",
+       "exception-nologin": "Usor no es autenticida",
+       "exception-nologin-text": "Per favore, autentici per asede esta paje o ata.",
+       "exception-nologin-text-manual": "Per favore, $1 per asede esta paje o ata.",
+       "virus-badscanner": "Malajustada: scanador antivirusal nonconoseda: <em>$1</em>",
+       "virus-scanfailed": "fali de scane (codigo $1)",
+       "virus-unknownscanner": "scanador antivirusal nonconoseda:",
+       "logouttext": "<strong>Tu es aora desautenticida.</strong>\n\nNota ce cisa alga pajes va continua es mostrada como si tu ta es ancora autenticida asta cuando tu vacui la memoria de tua surfador.",
+       "cannotlogoutnow-title": "Tu no pote desautentici a presente",
+       "cannotlogoutnow-text": "Desautentici no es posible cuando tu usa $1.",
        "welcomeuser": "Bonveni, $1!",
+       "welcomecreation-msg": "Tua conta ia es creada.\nTu pote cambia tua {{SITENAME}} [[Special:Preferences|preferes]] si tu desira.",
        "yourname": "Nom de usor:",
        "userlogin-yourname": "Nom de usor",
-       "userlogin-yourname-ph": "Entra tua nom de usor",
-       "yourpassword": "Sinia de entra:",
-       "userlogin-yourpassword": "Parola secreta",
-       "userlogin-yourpassword-ph": "Tape tua parola secreta",
-       "createacct-yourpassword-ph": "Tape un parola secreta",
-       "yourpasswordagain": "Retape la sinia:",
-       "createacct-yourpasswordagain": "Confirma la parola secreta",
-       "createacct-yourpasswordagain-ph": "Retape la parola secreta",
-       "userlogin-remembermypassword": "Manteni mea identifia",
-       "yourdomainname": "Tu domina:",
-       "login": "Identifia",
-       "nav-login-createaccount": "Sinia per entra",
-       "logout": "Retira",
-       "userlogout": "Sinia per retira",
+       "userlogin-yourname-ph": "Tape tua nom de usor",
+       "createacct-another-username-ph": "Tape la nom de usor",
+       "yourpassword": "Clave:",
+       "userlogin-yourpassword": "Clave",
+       "userlogin-yourpassword-ph": "Tape tua clave",
+       "createacct-yourpassword-ph": "Tape un clave",
+       "yourpasswordagain": "Retape la clave:",
+       "createacct-yourpasswordagain": "Confirma la clave",
+       "createacct-yourpasswordagain-ph": "Retape la clave",
+       "userlogin-remembermypassword": "Memori mea identia",
+       "userlogin-signwithsecure": "Usa un lia secur",
+       "cannotlogin-title": "Autentici no es posible",
+       "cannotlogin-text": "Autentici no es posible.",
+       "cannotloginnow-title": "Autentici aora no es posible.",
+       "cannotloginnow-text": "Autentici no es posible cuando tu usa $1.",
+       "cannotcreateaccount-title": "Crea de contas no es posible",
+       "cannotcreateaccount-text": "La crea direta de contas no es comutada en esta vici.",
+       "yourdomainname": "Tua domina:",
+       "password-change-forbidden": "Tu no pote cambia tua clave en esta vici.",
+       "externaldberror": "O un era de autentici ia aveni en la banco de datos, o tu no es permeteda a refresci tua conta esterna.",
+       "login": "Autentici",
+       "login-security": "Confirma tua identia",
+       "nav-login-createaccount": "Autentici / crea un conta",
+       "logout": "Desautentici",
+       "userlogout": "Desautentici",
+       "notloggedin": "No autenticida",
        "userlogin-noaccount": "Tu no ave un conta?",
        "userlogin-joinproject": "Crea un conta de {{SITENAME}}",
        "createaccount": "Crea un conta",
-       "userlogin-resetpassword-link": "Tu ia oblida tua parola secreta?",
-       "userlogin-helplink2": "Aida sur identifia",
-       "createacct-emailrequired": "Adirije de e-posta",
-       "createacct-emailoptional": "Adirije de e-posta (si desirada)",
-       "createacct-email-ph": "Entra tua adirije de e-posta",
-       "createacct-another-email-ph": "Entra tua adirije de e-posta",
+       "userlogin-resetpassword-link": "Tu ia oblida tua clave?",
+       "userlogin-helplink2": "Aida per autentici",
+       "userlogin-loggedin": "Tu ia autentici ja como {{GENDER:$1|$1}}.\nUsa la formulario a su per autentici como un otra usor.",
+       "userlogin-reauth": "Tu debe reautentici per confirma ce tu es {{GENDER:$1|$1}}.",
+       "userlogin-createanother": "Crea un conta nova",
+       "createacct-emailrequired": "Adirije de eposta",
+       "createacct-emailoptional": "Adirije de eposta (si desirada)",
+       "createacct-email-ph": "Tape tua adirije de eposta",
+       "createacct-another-email-ph": "Tape tua adirije de eposta",
+       "createaccountmail": "Usa un clave tempora e acaso, e envia lo a la adirije spesifada de eposta",
+       "createaccountmail-help": "On pote usa esta per crea un conta per un otra person sin descovre la clave.",
+       "createacct-realname": "Nom vera (si desirada)",
        "createacct-reason": "Razona:",
+       "createacct-reason-ph": "Perce tu crea un conta nova",
+       "createacct-reason-help": "Mesaje mostrada en la rejistra de crea de contas",
        "createacct-submit": "Crea tua conta",
        "createacct-another-submit": "Crea un conta",
+       "createacct-continue-submit": "Continua la crea de conta",
+       "createacct-another-continue-submit": "Continua la crea de conta",
        "createacct-benefit-heading": "{{SITENAME}} es realida par persones como tu.",
        "createacct-benefit-body1": "{{PLURAL:$1|edita|editas}}",
        "createacct-benefit-body2": "{{PLURAL:$1|paje|pajes}}",
        "createacct-benefit-body3": "{{PLURAL:$1|contribuor|contribuores}} resente",
-       "loginerror": "Era de entra",
-       "loginsuccesstitle": "Tu ia entra",
-       "loginsuccess": "'''Tu ia entrada aora a {{SITENAME}} como \"$1\".'''",
-       "nosuchuser": "On no ave un usor con la nom \"$1\".\nOn distingui entre leteras major e minor per nomes de usores.\nEsamina la spele, o [[Special:CreateAccount|crea un conta nova]].",
-       "nosuchusershort": "Es no usor con esta nom \"$1\". Esamina la spele.",
-       "nouserspecified": "Tu debe indica un nom de usor.",
-       "wrongpassword": "La sinia de entra no es coreta. Per favore, atenta ancora.",
-       "wrongpasswordempty": "La sinia de entra es vacua. Per favore, atenta ancora.",
-       "passwordtooshort": "Sinias secreta debe ave minima {{PLURAL:$1|1 simbol|$1 simboles}}.",
-       "passwordtoolong": "Sinias secreta no pote ave plu ca {{PLURAL:$1|1 simbol|$1 simboles}}.",
-       "passwordtoopopular": "Sinias secreta comun debe no es usada. Per favore, eleje un sinia plu unica.",
-       "mailmypassword": "Cambia tua sinia secreta",
-       "passwordremindertitle": "Sinia secreta temporer nova per {{SITENAME}}",
-       "passwordremindertext": "Algun (tu, probable, de adirije IP $1)\nia demanda un sinia secreta nova per {{SITENAME}} ($4).\nLa sinia secreta tempora per usor \"$2\" es aora \"$3\". Si esta ia es tua intende, tu debe identifia tu denova per entra e eleje tua sinia nova aora.\nTua sinia tempora va desvalidi en {{PLURAL:$5|un dia|$5 dias}}.\n\nSi algun otra ca tu ia envia esta demanda a nos, o si tu ia recorda tua sinia secreta e no vole cambia lo aora, tu pote iniora esta mesaje e continua usa tua sinia secreta vea.",
-       "noemail": "No es un adirije de eposta per usor \"$1\".",
-       "passwordsent": "Un sinia secreta ia es enviada a la adirije de eposta per \"$1\".\nPer favore, sinia per entra ancora pos tu ia reseta el.",
-       "eauthentsent": "Un eposta de serti ia es enviada a la adirije de eposta spesifada.\nAnte cualce otra epostas es enviada a tua conta, tu va nesesa segue la instruis en la eposta, per serti ce la conta es vera la tua.",
-       "emailconfirmlink": "Aproba tu adirije de eposta",
-       "accountcreated": "Conta es creada",
+       "badretype": "La claves cual tu ia tape no es egal.",
+       "usernameinprogress": "Un crea de conta per esta nom de usor aveni ja.\nEspeta, per favore.",
+       "userexists": "La nom spesifada de usor es ja usada.\nEleje un otra nom, per favore.",
+       "loginerror": "Era de autentici",
+       "createacct-error": "Era de crea de conta",
+       "createaccounterror": "La conta no ia pote es creada: $1",
+       "nocookiesnew": "La conta de usor es aora creada, ma tu no ia autentici.\n{{SITENAME}} usa cucis per autentici usores.\nTu ia descomuta cucis.\nPer favore, comuta los e autentici con tua nom de usor nova e tua clave.",
+       "nocookieslogin": "{{SITENAME}} usa cucis per autentici usores.\nTu ia descomuta cucis.\nPer favore, comuta los e atenta denova.",
+       "nocookiesfornew": "La conta de usor no ia es creada, car nos no ia pote confirma sua fonte.\nSerti ce tu ia comuta cucis, recarga esta paje, e atenta denova.",
+       "createacct-loginerror": "La crea de la conta ia susede, ma tu no ia pote es automata autenticida. Per favore, vade a la paje de [[Special:UserLogin|autentici nonautomata]].",
+       "noname": "Tu no ia spesifa un nom de usor valida.",
+       "loginsuccesstitle": "Autenticida",
+       "loginsuccess": "<strong>Tu es aora autenticida a {{SITENAME}} como \"$1\".</strong>",
+       "nosuchuser": "No usor esiste con la nom \"$1\".\nOn distingui entre leteras major e minor per nomes de usores.\nEsamina la spele, o [[Special:CreateAccount|crea un conta nova]].",
+       "nosuchusershort": "No usor esiste con la nom \"$1\".\nEsamina la spele.",
+       "nouserspecified": "Tu debe spesifa un nom de usor.",
+       "login-userblocked": "Esta usor es impedida. Autentici no es permeteda.",
+       "wrongpassword": "La clave no es coreta. Per favore, atenta denova.",
+       "wrongpasswordempty": "La clave es vacua. Per favore, atenta denova.",
+       "passwordtooshort": "Claves debe ave {{PLURAL:$1|1 sinia|$1 sinias}}, a la min.",
+       "passwordtoolong": "Claves no pote ave plu ca {{PLURAL:$1|1 sinia|$1 sinias}}.",
+       "passwordtoopopular": "Tu no pote usa un clave cual es comun elejeda. Per favore, eleje un plu unica.",
+       "password-name-match": "Tua clave debe es diferente de tua nom de usor.",
+       "password-login-forbidden": "La usa de esta nom de usor e clave es proibida.",
+       "mailmypassword": "Reinisia tua clave",
+       "passwordremindertitle": "Clave nova e tempora per {{SITENAME}}",
+       "passwordremindertext": "Algun (probable tu, de adirije IP $1)\nia solisita un clave nova per {{SITENAME}} ($4).\nUn clave tempora per usor\n\"$2\" ia es creada con la testo \"$3\". Si esta ia es\ntua intende, tu debe aora reautentici e eleje un clave nova.\nTua clave tempora va desvalidi pos {{PLURAL:$5|un dia|$5 dias}}.\n\nSi un otra person ia fa esta solisita, o si tu ia recorda\ntua clave e aora no vole cambia lo, tu pote iniora esta mesaje\ne continua usa tua clave vea.",
+       "noemail": "No adirije de eposta esiste per usor \"$1\".",
+       "noemailcreate": "Tu debe furni un adirije de eposta valida.",
+       "passwordsent": "Un clave nova es enviada a la adirije de eposta rejistrada per \"$1\".\nPer favore, reautentici pos reseta lo.",
+       "blocked-mailpassword": "Tua adirije IP es impedida de edita. Per preveni malusa, on no permete ce esta adirije IP usa la sistem de recovre claves.",
+       "eauthentsent": "Un eposta de confirma ia es enviada a la adirije de eposta spesifada.\nAnte la envia de plu epostas a la conta, tu debe segue la instruis en la eposta, per confirma ce la conta parteni vera a tu.",
+       "throttled-mailpassword": "Un eposta de reinisia la clave ia es ja enviada, en la {{PLURAL:$1|ora|$1 oras}} la plu resente.\nPer preveni malusa, sola un tal eposta va es enviada per {{PLURAL:$1|ora|$1 oras}}.",
+       "mailerror": "Era en envia eposta: $1",
+       "acct_creation_throttle_hit": "Visitores a esta vici, usante tua adirije IP, ia crea {{PLURAL:$1|1 conta|$1 contas}} en la $2 la plu resente, cual es la masima permeteda en esta periodo.\nComo resulta, visitores con esta adirije IP no pote crea plu contas a esta tempo.",
+       "emailauthenticated": "Tua adirije de eposta ia es confirmada a $2 a $3.",
+       "emailnotauthenticated": "Tua adirije de eposta es ancora no confirmada.\nNo epostas va es enviada per cualce de la capasias seguente.",
+       "noemailprefs": "Spesifa un adirije de eposta en tua preferes per pote usa esta capasias.",
+       "emailconfirmlink": "Confirma tua adirije de eposta",
+       "invalidemailaddress": "La adirije de eposta no pote es asetada, car lo pare ave un forma nonvalida.\nPer favore, tape un adirije de bon forma o vacui acel campo.",
+       "cannotchangeemail": "On no pote cambia adirijes de eposta per contas en esta vici.",
+       "emaildisabled": "Esta vici no pote envia epostas.",
+       "accountcreated": "Conta creada",
+       "accountcreatedtext": "La conta de usor per [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|discute]]) ia es creada.",
+       "createaccount-title": "Crea de conta per {{SITENAME}}",
+       "createaccount-text": "Algun ia crea un conta per tua adirije de eposta a {{SITENAME}} ($4) nomida \"$2\", con clave \"$3\".\nTu debe autentici e cambia tua clave aora.\n\nTu pote iniora esta mesaje, si esta conta ia es creada par era.",
+       "login-throttled": "Tu ia fa resente tro multe atentas de autentici.\nPer favore, pausa per $1 ante atenta denova.",
+       "login-abort-generic": "Tua autentici ia fali - Abortada",
+       "login-migrated-generic": "Tua conta ia es migrada, e tua nom de usor no esiste plu en esta vici.",
        "loginlanguagelabel": "Lingua: $1",
-       "pt-login": "Identifia se",
-       "pt-login-button": "Identifia",
+       "suspicious-userlogout": "Tua solisita de desautentici ia es refusada car lo pare es enviada par un surfador o proxi malfunsionante.",
+       "createacct-another-realname-tip": "La nom vera es nonobligante.\nSi tu eleje furni lo, lo va es usada per atribui la laboras fada par la usor.",
+       "pt-login": "Autentici",
+       "pt-login-button": "Autentici",
+       "pt-login-continue-button": "Continua autentici",
        "pt-createaccount": "Crea un conta",
-       "pt-userlogout": "Desidentifia",
-       "oldpassword": "Sinia secreta vea:",
-       "newpassword": "Sinia secreta nova:",
-       "retypenew": "Re-entra tu sinia secreta nova:",
-       "resetpass-submit-loggedin": "Cambia la sinia secreta",
-       "resetpass-temp-password": "Sinia secreta tempora:",
-       "passwordreset": "Reinisia tua parola secreta",
+       "pt-userlogout": "Desautentici",
+       "php-mail-error-unknown": "Era nonconoseda en la funsiona mail() de PHP.",
+       "user-mail-no-addy": "On ia atenta envia un eposta sin adirije de eposta.",
+       "user-mail-no-body": "On ia atenta envia un eposta con corpo vacua o nonormal corta.",
+       "changepassword": "Cambia clave",
+       "resetpass_announce": "Per fini autentici, tu debe furni un clave nova.",
+       "resetpass_header": "Cambia clave de conta",
+       "oldpassword": "Clave vea:",
+       "newpassword": "Clave nova:",
+       "retypenew": "Retape la clave nova:",
+       "resetpass_submit": "Fisa la clave e autentici tu",
+       "changepassword-success": "Tua clave ia es cambiada!",
+       "changepassword-throttled": "Tu ia fa resente tro multe atentas de autentici.\nPer favore, pausa per $1 ante atenta denova.",
+       "botpasswords": "Claves de bot",
+       "botpasswords-summary": "<em>Claves de bot</em> permete ce on asede un conta de usor par API sin usa la identia xef de la conta. La diretos de usor disponable pos autentici par clave de bot es cisa restrinjeda.\n\nSi tu no sabe perce on ta vole fa esta, probable tu debe no fa lo. Nunca un otra person debe demanda ce tu jenera un de estas e dona lo a el.",
+       "botpasswords-disabled": "Claves de bot es descomutada.",
+       "botpasswords-no-central-id": "Per usa claves de bot, tu debe es autenticida con conta sentral.",
+       "botpasswords-existing": "Claves esistente de bot",
+       "botpasswords-createnew": "Crea un clave nova de bot",
+       "botpasswords-editexisting": "Edita un clave esistente de bot",
+       "botpasswords-label-appid": "Nom de bot:",
+       "botpasswords-label-create": "Crea",
+       "botpasswords-label-update": "Fisa",
+       "botpasswords-label-cancel": "Cansela",
+       "botpasswords-label-delete": "Sutrae",
+       "botpasswords-label-resetpassword": "Reinisia la clave",
+       "botpasswords-label-grants": "Permetes pertinente:",
+       "botpasswords-help-grants": "Permetes fa ce diretos ja pertinente a tua conta de usor deveni usable. La comuta de un permete asi no afeta diretos cual tua conta de usor no ave. Vide la [[Special:ListGrants|table de permetes]] per plu informas.",
+       "botpasswords-label-grants-column": "Permeteda",
+       "botpasswords-bad-appid": "La nom de bot \"$1\" no es valida.",
+       "botpasswords-insert-failed": "La clave de bot \"$1\" no ia pote es ajuntada. Esce on ia ajunta ja lo?",
+       "botpasswords-update-failed": "La clave de bot \"$1\" no ia pote es cambiada. Esce on ia sutrae lo?",
+       "botpasswords-created-title": "Clave de bot creada",
+       "botpasswords-created-body": "La clave de bot \"$1\" de usor \"$2\" ia es creada.",
+       "botpasswords-updated-title": "Clave de bot cambiada",
+       "botpasswords-updated-body": "La clave de bot \"$1\" de usor \"$2\" ia es cambiada.",
+       "botpasswords-deleted-title": "Clave de bot sutraeda",
+       "botpasswords-deleted-body": "La clave de bot \"$1\" de usor \"$2\" ia es sutraeda.",
+       "botpasswords-newpassword": "La clave nova per autentici con <strong>$1</strong> es <strong>$2</strong>. <em>Per favore, nota esta per refere futur.</em> <br> (Per botes vea de cual sua nom de autentici debe es la mesma como la nom de usor ultima, tu pote usa ance <strong>$3</strong> como nom de usor e <strong>$4</strong> como clave.)",
+       "botpasswords-no-provider": "BotPasswordsSessionProvider no es disponable.",
+       "botpasswords-restriction-failed": "Restrinjes de clave de bot preveni esta autentici.",
+       "botpasswords-invalid-name": "La nom de usor spesifada no conteni la sinia separante de claves de bot (\"$1\").",
+       "botpasswords-not-exist": "Usor \"$1\" no ave un clave de bot nomida \"$2\".",
+       "resetpass_forbidden": "Claves no pote es cambiada",
+       "resetpass_forbidden-reason": "Claves no pote es cambiada: $1",
+       "resetpass-no-info": "Tu debe es autenticida per asede direta esta paje.",
+       "resetpass-submit-loggedin": "Cambia clave",
+       "resetpass-submit-cancel": "Cansela",
+       "resetpass-wrong-oldpass": "La clave tempora o presente es nonvalida.\nCisa tu ia cambia ja tua clave o ia solisita un clave tempora nova.",
+       "resetpass-recycled": "Per favore, cambia tua clave a alga cosa diferente de tua clave presente.",
+       "resetpass-temp-emailed": "Tu ia autentici con un clave tempora epostada.\nPer fini autentici, tu debe defini un clave nova asi:",
+       "resetpass-temp-password": "Clave tempora:",
+       "resetpass-abort-generic": "La cambia de clave ia es abortada par un program estendente.",
+       "resetpass-expired": "Tua clave es no plu valida. Per favore, defini un clave nova per autentici.",
+       "resetpass-expired-soft": "Tua clave es no plu valida e nesesa es reinisiada. Per favore, eleje aora un clave nova, o clica \"{{int:authprovider-resetpass-skip-label}}\" per reinisia plu tarda lo.",
+       "resetpass-validity-soft": "Tua clave es no plu valida: $1\n\nPer favore, eleje aora un clave nova, o clica \"{{int:authprovider-resetpass-skip-label}}\" per reinisia plu tarda lo.",
+       "passwordreset": "Reinisia clave",
+       "passwordreset-text-one": "Completi esta formulario per reseta un clave tempora par eposta.",
+       "passwordreset-text-many": "{{PLURAL:$1|Completi un de la campos per reseta un clave tempora par eposta.}}",
+       "passwordreset-disabled": "Reinisias de clave es descomutada en esta vici.",
+       "passwordreset-emaildisabled": "Capasias de eposta es descomutada en esta vici.",
        "passwordreset-username": "Nom de usor:",
        "passwordreset-domain": "Domina:",
-       "passwordreset-email": "Adirije de e-posta",
-       "passwordreset-invalidemail": "Adirije de e-posta no es valida",
-       "changeemail-submit": "Cambia e-posta",
-       "bold_sample": "Testo en leteras spesa",
-       "bold_tip": "Testo en leteras spesa",
-       "italic_sample": "Testo en leteras apoiada",
-       "italic_tip": "Testo en leteras apoiada",
+       "passwordreset-email": "Adirije de eposta:",
+       "passwordreset-emailtitle": "Detalias de conta de {{SITENAME}}",
+       "passwordreset-emailtext-ip": "Algun (probable tu, de adirije IP $1) ia solisita un reinisia de tua\nclave per {{SITENAME}} ($4). La {{PLURAL:$3|conta|contas}} de usor seguente es\nasosiada con esta adirije de eposta:\n\n$2\n\nEsta {{PLURAL:$3|clave|claves}} tempora va desvalidi pos {{PLURAL:$5|un dia|$5 dias}}.\nTu debe autentici aora e eleje un clave nova. Si un otra person ia fa\nesta solisita, o si tu ia recorda tua clave orijinal e no vole\naora cambia lo, tu pote iniora esta mesaje e continua usa\ntua clave vea.",
+       "passwordreset-emailtext-user": "Usor $1 en {{SITENAME}} ia solisita un reinisia de tua\nclave per {{SITENAME}} ($4). La {{PLURAL:$3|conta|contas}} de usor seguente es\nasosiada con esta adirije de eposta:\n\n$2\n\nEsta {{PLURAL:$3|clave|claves}} tempora va desvalidi pos {{PLURAL:$5|un dia|$5 dias}}.\nTu debe autentici aora e eleje un clave nova. Si un otra person ia fa\nesta solisita, o si tu ia recorda tua clave orijinal e no vole\naora cambia lo, tu pote iniora esta mesaje e continua usa\ntua clave vea.",
+       "passwordreset-emailelement": "Nom de usor:\n$1\n\nClave tempora:\n$2",
+       "passwordreset-emailsentemail": "Si esta adirije de eposta es asosiada con tua conta, alora on va envia un eposta de reinisia de clave.",
+       "passwordreset-emailsentusername": "Si un adirije de eposta es asosiada con esta nom de usor, alora on va envia un eposta de reinisia de clave.",
+       "passwordreset-nocaller": "On nesesa furni un clamor",
+       "passwordreset-nosuchcaller": "Clamor no esiste: $1",
+       "passwordreset-ignored": "La reinisia de clave no ia susede. Cisa no furnor es definida?",
+       "passwordreset-invalidemail": "La adirije de eposta es nonvalida",
+       "passwordreset-nodata": "On ia furni no nom de usor e no adirije de eposta",
+       "changeemail": "Cambia o sutrae adirije de eposta",
+       "changeemail-header": "Completi esta formulario per cambia tua adirije de eposta. Si tu vole sutrae tota asosias de adirije de eposta de tua conta, lasa vacua la adirije nova cuando tu envia la formulario.",
+       "changeemail-no-info": "Tu debe es autenticida per asede direta esta paje.",
+       "changeemail-oldemail": "Adirije de eposta presente:",
+       "changeemail-newemail": "Adirije de eposta nova:",
+       "changeemail-newemail-help": "Lasa vacua esta campo si tu vole sutrae tua adirije de eposta. Si tu sutrae la adirije de eposta, tu no va pote reinisia un clave oblidada, e no va reseta epostas de esta vici.",
+       "changeemail-none": "(vacua)",
+       "changeemail-password": "Tua clave de {{SITENAME}}:",
+       "changeemail-submit": "Cambia eposta",
+       "changeemail-throttled": "Tu ia fa tro multe atentas de autentici.\nPer favore, pausa per $1 ante atenta denova.",
+       "changeemail-nochange": "Tape un adirije de eposta nova, per favore.",
+       "resettokens": "Reinisia marcas",
+       "resettokens-text": "Asi, tu pote reinisia marcas cual permete asede alga datos privata cual pertine a tua conta.\n\nTu debe fa esta si tu ia comparti los con algun sin intende, o si tua conta ia es atacada.",
+       "resettokens-no-tokens": "No marcas esiste per reinisia.",
+       "resettokens-tokens": "Marcas:",
+       "resettokens-token-label": "$1 (valua presente: $2)",
+       "resettokens-watchlist-token": "Marca per la flue ueb (Atom/RSS) de [[Special:Watchlist|cambias a tua pajes monitorida]]",
+       "resettokens-done": "Marcas reinisiada.",
+       "resettokens-resetbutton": "Reinisia marcas elejeda",
+       "bold_sample": "Testo spesa",
+       "bold_tip": "Testo spesa",
+       "italic_sample": "Testo apoiada",
+       "italic_tip": "Testo apoiada",
        "link_sample": "Titulo de lia",
        "link_tip": "Lia interna",
        "extlink_sample": "http://www.example.com titulo de lia",
-       "extlink_tip": "Lia esterna (recorda la prefisa http://)",
+       "extlink_tip": "Lia esterna (no oblida la prefisa http://)",
        "headline_sample": "Testo de titulo",
        "headline_tip": "Titulo de nivel 2",
-       "nowiki_sample": "Ajunta testo nonformatida asi",
-       "nowiki_tip": "Iniora la formati de vici",
+       "nowiki_sample": "Ajunta asi testo nonformatida",
+       "nowiki_tip": "Iniora sintatica de vici",
        "image_tip": "Fix interna",
-       "media_tip": "Lia a fix",
-       "sig_tip": "Tua suscrive con marca de ora",
+       "media_tip": "Lia a un fix",
+       "sig_tip": "Tua suscrive con indica de ora",
        "hr_tip": "Linia orizonal (per usas rara)",
        "summary": "Resoma:",
-       "subject": "Sujeto:",
+       "subject": "Tema:",
        "minoredit": "Esta es un cambia minor",
        "watchthis": "Monitori esta paje",
        "savearticle": "Fisa la paje",
+       "savechanges": "Fisa cambias",
        "publishpage": "Publici paje",
-       "publishchanges": "Publica la cambias",
+       "publishchanges": "Publici cambias",
        "preview": "Previde",
        "showpreview": "Mostra previde",
-       "showdiff": "Mostra diferes",
-       "anoneditwarning": "<strong>Avisa:</strong> Tu no ia identifia tu. Tua adirije IP va es publica vidable si tu fa un edita. Si tu <strong>[$1 identifia tu]</strong> o <strong>[$2 crea un conta]</strong>, tua editas va es atribuida a tua nom de usor, entre otra beneficas.",
-       "summary-preview": "Previde soma:",
+       "showdiff": "Mostra cambias",
+       "blankarticle": "<strong>Avisa:</strong> La paje cual tu crea es vacua.\nSi tu clica \"$1\" denova, la paje va es creada sin contenida.",
+       "anoneditwarning": "<strong>Avisa:</strong> Tu no es autenticida. Tua adirije IP va es publica vidable si tu fa editas. Si tu <strong>[$1 autentici]</strong> o <strong>[$2 crea un conta]</strong>, tua editas va es atribuida a tua nom de usor, entre otra beneficas.",
+       "anonpreviewwarning": "<em>Tu no es autenticida. Si tu fisa cambias, tua adirije IP va es rejistrada en la istoria de esta paje.</em>",
+       "missingsummary": "<strong>Avisa:</strong> Tu no ia furni un resoma de la edita.\nSi tu clica \"$1\" denova, tua edita va es fisada sin resoma.",
+       "selfredirect": "<strong>Avisa:</strong> Tu redirije esta paje a se.\nCisa tu no ia spesifa coreta la gol de la redirije, o cisa tu no edita la paje intendeda.\nSi tu clica \"$1\" denova, la redirije va es creada an tal.",
+       "missingcommenttext": "Tape un comenta a su, per favore.",
+       "missingcommentheader": "<strong>Avisa:</strong> Tu no ia furni un tema per esta comenta.\nSi tu clica \"$1\" denova, tua edita va es fisada sin tema.",
+       "summary-preview": "Previde de resoma:",
+       "subject-preview": "Previde de tema:",
+       "previewerrortext": "Un era ia aveni en atenta previde tua cambias.",
        "blockedtitle": "Usor es impedida",
-       "blockedtext": "'''Tua nom de usor o adirije IP es impedida.'''\n\nLa impedi ia es fada par $1.\nLa razona donada es ''$2''.\n\n* Comensa de impedi: $8\n* Fini de impedi: $6\n* Conta impedida: $7\n\nTu pote contata $1 o un otra [[{{MediaWiki:Grouppage-sysop}}|dirijor]] per discute esta impedi.\nTu no pote usa la funsiona \"envia un e-posta a esta usor\" estra si un adirije valida de e-posta legal es spesifada en tua [[Special:Preferences|preferes de conta]] e tu no es impedida de usa lo.\nTua adirije IP presente es $3, e la numero de impedi es #$5.\nInclui tota esta detalias en cualce demandas cual tu fa, per favore.",
-       "loginreqtitle": "Entra de identia nesesada",
-       "loginreqlink": "identifia",
+       "blockedtext": "<strong>Tua nom de usor o adirije IP es impedida.</strong>\n\nLa impedi ia es fada par $1.\nLa razona donada es ''$2''.\n\n* Comensa de impedi: $8\n* Fini de impedi: $6\n* Conta impedida: $7\n\nTu pote contata $1 o un otra [[{{MediaWiki:Grouppage-sysop}}|dirijor]] per discute esta impedi.\nTu no pote usa la funsiona \"envia un eposta a esta usor\" estra si un adirije valida\nde eposta es spesifada en tua [[Special:Preferences|preferes de conta]] e tu no es impedida de usa lo.\nTua adirije IP presente es $3, e la numero de impedi es #$5.\nInclui tota esta detalias en cualce demandas cual tu fa, per favore.",
+       "autoblockedtext": "Tua adirije IP ia es automata impedida car lo ia es usada par un otra usor, ci ia es impedida par $1.\nLa razona donada es ''$2''.\n\n* Comensa de impedi: $8\n* Fini de impedi: $6\n* Conta impedida: $7\n\nTu pote contata $1 o un otra [[{{MediaWiki:Grouppage-sysop}}|dirijor]] per discute esta impedi.\nTu no pote usa la funsiona \"envia un eposta a esta usor\" estra si un adirije valida de eposta es spesifada en tua [[Special:Preferences|preferes de conta]] e tu no es impedida de usa lo.\nTua adirije IP presente es $3, e la numero de impedi es #$5.\nInclui tota esta detalias en cualce demandas cual tu fa, per favore.",
+       "systemblockedtext": "Tua nom de usor o adirije IP ia es automata impedida par MediaWiki.\nLa razona donada es <em>$2</em>.\n\n* Comensa de impedi: $8\n* Fini de impedi: $6\n* Conta impedida: $7\nTua adirije IP presente es $3.\nInclui tota esta detalias en cualce demandas cual tu fa, per favore.",
+       "blockednoreason": "no razona donada",
+       "whitelistedittext": "Per favore, $1 per edita pajes.",
+       "confirmedittext": "Tu debe confirma tua adirije de eposta ante edita pajes.\nPer favore, defini e validi tua adirije de eposta en tua [[Special:Preferences|preferes]].",
+       "nosuchsectiontitle": "Parte no trovada",
+       "nosuchsectiontext": "Tu ia atenta edita un parte cual no esiste.\nCisa on ia move o sutrae lo en cuando tu ia regarda la paje.",
+       "loginreqtitle": "Autentici es nesesada",
+       "loginreqlink": "autentici",
+       "loginreqpagetext": "Per favore, $1 per regarda otra pajes.",
+       "accmailtitle": "Clave enviada",
+       "accmailtext": "On ia envia un clave acaso jenerada per [[User talk:$1|$1]] a $2. Pos autentici, tu pote cambia esta a la paje de <em?[[Special:ChangePassword|cambia de clave]]</em>.",
        "newarticle": "(Nova)",
-       "newarticletext": "Tu ia segue un lia a un paje cual ancora no esista. Per crea la paje, comensa tape en la caxa a su (vide la [$1 paje de aida] per plu informa).\nSi tu ia veni asi par era, clica la boton <strong>retro</strong> de tua surfador.",
-       "anontalkpagetext": "<em>Esta es la paje de discute per un usor anonim ci ancora no ia crea un conta, o ci no usa lo.</em>\n Donce nos identifia el par adirije IP numeral.\nUn tal adirije pote es compartida par plu ca un usor.\nSi tu es un usor anonim e opina ce on ia dirije comentas nonpertinente a tu, per favore [[Special:CreateAccount|crea un conta]] o [[Special:UserLogin|identifia tu]] per evita confusas futur con otra usores anonim.",
-       "noarticletext": "No testo esiste en esta paje. Tu pote [[Special:Search/{{PAGENAME}}|xerca la titulo de esta paje]] en otra pajes, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} xerca en la arcivos relatada], o [{{fullurl:{{FULLPAGENAME}}|action=edit}} crea esta paje]</span>.",
-       "noarticletext-nopermission": "No testo esiste en esta paje. Tu pote [[Special:Search/{{PAGENAME}}|xerca esta titulo de paje]] en otra pajes, o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} xerca en arcivos relatada]</span>, ma on no permete ce tu crea esta paje.",
-       "userpage-userdoesnotexist-view": "La conta de usor \"$1\" no es rejistrada",
+       "newarticletext": "Tu ia segue un lia a un paje cual ancora no esiste. Per crea la paje, comensa tape en la caxa a su (vide la [$1 paje de aida] per plu informa).\nSi tu ia veni asi par era, clica la boton <strong>retro</strong> de tua surfador.",
+       "anontalkpagetext": "<em>Esta es la paje de discute per un usor anonim ci ancora no ia crea un conta, o ci no usa lo.</em>\n Donce nos identifia el par adirije IP numeral.\nUn tal adirije pote es compartida par plu ca un usor.\nSi tu es un usor anonim e opina ce on ia dirije comentas nonpertinente a tu,\nper favore [[Special:CreateAccount|crea un conta]] o [[Special:UserLogin|autentici]] per evita confusas futur con otra usores anonim.",
+       "noarticletext": "No testo esiste en esta paje. Tu pote [[Special:Search/{{PAGENAME}}|xerca la titulo de esta paje]] en otra pajes, <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} xerca en la rejistras relatada], o [{{fullurl:{{FULLPAGENAME}}|action=edit}} crea esta paje]</span>.",
+       "noarticletext-nopermission": "No testo esiste en esta paje. Tu pote [[Special:Search/{{PAGENAME}}|xerca esta titulo de paje]] en otra pajes, o <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} xerca en rejistras relatada]</span>, ma on no permete ce tu crea esta paje.",
+       "missing-revision": "La revisa $1 de la paje nomida \"{{FULLPAGENAME}}\" no esiste.\n\nEsta es usual causada par segue un lia nonfresca de istoria a un paje cual on ia sutrae.\nDetalias es trovable en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistra de sutraes].",
+       "userpage-userdoesnotexist": "Conta de usor \"$1\" no es rejistrada.\nPer favore, deside esce tu vole crea/edita esta paje.",
+       "userpage-userdoesnotexist-view": "Conta de usor \"$1\" no es rejistrada.",
+       "blocked-notice-logextract": "Esta usor es impedida a presente.\nLa entrada la plu resente en la rejistra de impedis es presentada a su per clari:",
        "clearyourcache": "<strong>Nota:</strong> Pos fisa, tu debe cisa sircoveni la memoria de tua surfador per vide la cambias.\n* <strong>Firefox / Safari:</strong> Presa la tecla <em>Maj</em> (<em>Shift</em>) e clica <em>Refresci</em>, o presa o <em>Ctrl-F5</em> o <em>Ctrl-R</em> (<em>⌘-R</em> a Mac)\n* <strong>Google Chrome:</strong> Presa <em>Ctrl-Shift-R</em> (<em>⌘-Shift-R</em> a Mac)\n* <strong>Internet Explorer:</strong> Presa <em>Ctrl</em> e clica <em>Refresci</em>, o presa <em>Ctrl-F5</em>\n* <strong>Opera:</strong> Vade a <em>Menu → Settings</em> (<em>Opera → Preferences</em> a Mac) e de ala a <em>Privacy & security → Clear browsing data → Cached images and files</em>.",
-       "previewnote": "<strong>Recorda ce esta es sola un previde.</strong> Tua cambias es ancora no fisada!",
-       "continue-editing": "Vade a la loca de edita",
+       "usercssyoucanpreview": "<strong>Aviseta:</strong> Usa la boton \"{{int:showpreview}}\" per proba tua CSS nova ante fisa.",
+       "userjsyoucanpreview": "<strong>Aviseta:</strong> Usa la boton \"{{int:showpreview}}\" per proba tua JavaScript nova ante fisa.",
+       "usercsspreview": "<strong>Recorda ce tu regarda mera un previde de tua CSS de usor.\nLo es ancora no fisada!</strong>",
+       "userjspreview": "<strong>Recorda ce tu regarda mera un proba/previde de tua JavaScript de usor.\nLo es ancora no fisada!</strong>",
+       "sitecsspreview": "<strong>Recorda ce tu regarda mera un previde de esta CSS.\nLo es ancora no fisada!</strong>",
+       "sitejspreview": "<strong>Recorda ce tu regarda mera un previde de esta codigo JavaScript.\nLo es ancora no fisada!</strong>",
+       "userinvalidcssjstitle": "<strong>Avisa:</strong> No pel \"$1\" esiste.\nPajes .css e .js personal usa un titulo con leteras minor, pe {{ns:user}}:Foo/vector.css en loca de {{ns:user}}:Foo/Vector.css.",
+       "updated": "(Cambiada)",
+       "note": "<strong>Nota:</strong>",
+       "previewnote": "<strong>Recorda ce esta es mera un previde.</strong>\nTua cambias es ancora no fisada!",
+       "continue-editing": "Vade a la caxa de edita",
+       "previewconflict": "Esta previde refleta la testo en la caxa alta de edita, como lo va apare si tu eleje fisa.",
+       "session_fail_preview": "Pardona! Nos no ia pote trata tua edita par causa de un perde de datos de sesion.\n\nCisa tu ia deveni desautenticida. <strong>Per favore, serti ce tu es ancora autenticida e atenta denova.</strong>\nSi lo ancora no susede, proba [[Special:UserLogout|desautentici]] e reautentici, e serti ce tua surfador permete cucis de esta pajeria.",
+       "session_fail_preview_html": "Pardona! Nos no ia pote trata tua edita par causa de un perde de datos de sesion.\n\n<em>Car {{SITENAME}} ia comuta la usa cru de HTML, la previde es ascondeda per defende contra atacas par JavaScript.</em>\n\n<strong>Si esta es un atenta vera de edita, atenta denova, per favore.</strong>\nSi lo ancora no susede, proba [[Special:UserLogout|desautentici]] e reautentici, e serti ce tua surfador permete cucis de esta pajeria.",
+       "token_suffix_mismatch": "<strong>Tua edita ia es refusada car tua surfador ia malfa la sinias de puntua en la marca de edita.</strong>\nLa edita ia es refusada per preveni mali de la testo de la paje.\nEsta aveni a veses si on usa un proxi ueb anonim e defetosa.",
+       "edit_form_incomplete": "<strong>Alga partes de la formulario de edita no ia ateni la servador; serti ce tua editas es intata e atenta denova.</strong>",
        "editing": "Editante $1",
        "creating": "Creante $1",
        "editingsection": "Editante $1 (un parte)",
-       "editingcomment": "Edita $1 (sesion nova)",
+       "editingcomment": "Edita $1 (un parte nova)",
+       "editconflict": "Desacorda de editas: $1",
+       "explainconflict": "Un otra usor ia cambia esta paje pos cuando tu ia comensa edita lo.\nLa caxa alta de testo conteni la paje como lo esiste a presente.\nTua cambias apare en la caxa basa de testo.\nTu debe fusa tua cambias con la testo esistente.\n<strong>Sola</strong> la testo en la caxa alta va es fisada cuando tu clica \"$1\".",
+       "yourtext": "Tua testo",
+       "storedversion": "Testo esistente",
+       "nonunicodebrowser": "<strong>Avisa: Tua surfador no comprende Unicode.</strong>\nUn solve tempora es ativida per permete ce tu edita pajes sin problem: Sinias estra ASCII va apare en la caxa de edita como codigos exadesimal.",
+       "editingold": "<strong>Avisa: Tu edita un revisa nonfresca de esta paje.</strong>\nSi tu fisa lo, cualce cambias fada pos esta revisa va es perdeda.",
        "yourdiff": "Diferes",
-       "copyrightwarning": "Per favore nota ce tota labora a {{SITENAME}} es judida ce el es relasada su la $2 (vide $1 per detalias). Si tu no desira ce tu scrives ta es editada sin compati e redistribui sin tu permite, no sumita el asi!<br />\nTu ance promete a nos ce tu ia scriveda esta par tu mesma, o copiada esta de un domina publica o otra orijin libre.\n'''NO SUMITA LABORA SU DIRETOS DE AUTOR SIN PERMITE!!'''",
-       "templatesused": "{{PLURAL:$1|Modele|Modeles}} usada en esta paje:",
+       "copyrightwarning": "Per favore, nota ce tota contribuis a {{SITENAME}} es regardada como relasada su la $2 (vide $1 per detalias). Si tu no desira ce on edita tua scrives sin compatia e redistribui libre los, alora no ajunta los asi.<br />\nTu promete ance a nos ce tu mesma ia scrive esta, o ia copia lo de un recurso de domina publica o simil libre.\n<strong>No ajunta testo restrinjeda par direto de autor sin permete!</strong>",
+       "copyrightwarning2": "Per favore, nota ce tota contribuis a {{SITENAME}} pote es editada, alterada o sutraeda par otra contribuores.\nSi tu no desira ce on edita tua scrives sin compatia, alora no ajunta los asi.<br />\nTu promete ance a nos ce tu mesma ia scrive esta, o ia copia lo de un recurso de domina publica o simil libre (vide $1 per detalias).\n<strong>No ajunta testo restrinjeda par direto de autor sin permete!</strong>",
+       "editpage-cannot-use-custom-model": "La model de contenida de esta paje no pote es cambiada.",
+       "longpageerror": "<strong>Era: La testo cual tu ia envia ave un longia de {{PLURAL:$1|un cilobait|$1 cilobaites}}, cual es plu ca la masima de {{PLURAL:$2|un cilobait|$2 cilobaites}}.</strong>\nLo no pote es fisada.",
+       "readonlywarning": "<strong>Avisa:</strong> La banco de datos es cluida per manteni, donce tu no va pote fisa tua editas a esta tempo.</strong>\nCisa tu ta vole copia e coli tua testo a un fix de testo e fisa lo per plu tarda.\n\nLa dirijor ci ia fa la clui ia ofre esta esplica: $1",
+       "protectedpagewarning": "<strong>Avisa: Esta paje es protejeda, tal ce sola usores con diretos dirijal pote edita lo.</strong>\nLa entrada la plu resente de la rejistra es presentada a su per clari:",
+       "semiprotectedpagewarning": "<strong>Nota:</strong> Esta paje es protejeda, tal ce sola usores rejistrada pote edita lo.\nLa entrada la plu resente de la rejistra es presentada a su per clari:",
+       "cascadeprotectedwarning": "<strong>Avisa:</strong> Esta paje es protejeda, tal ce sola usores con [[Special:ListGroupRights|diretos spesifada]] pote edita lo, car lo es transcluida en la {{PLURAL:$1|paje|pajes}} seguente cual es cascadin protejeda:",
+       "titleprotectedwarning": "<strong>Avisa:</strong> Esta paje es protejeda, tal ce on nesesa [[Special:ListGroupRights|diretos spesifada]] per crea lo.\nLa entrada la plu resente de la rejistra es presentada a su per clari:",
+       "templatesused": "{{PLURAL:$1|Stensil|Stensiles}} usada en esta paje:",
        "templatesusedpreview": "{{PLURAL:$1|Stensil|Stensiles}} usada en esta previde:",
+       "templatesusedsection": "{{PLURAL:$1|Stensil|Stensiles}} usada en esta parte:",
        "template-protected": "(protejeda)",
-       "template-semiprotected": "(partal protejeda)",
-       "hiddencategories": "Esta paje es un membro de {{PLURAL:$1|1 categoria ascondeda|$1 categorias ascondeda}}:",
-       "nocreatetext": "{{SITENAME}} ave un restringe a la capas per crea pajes nova.\nTu pote vade a retro e edita un paje esistente, o  [[Special:UserLogin|sinia per entra o crea un conta]].",
+       "template-semiprotected": "(semiprotejeda)",
+       "hiddencategories": "Esta paje es un membro de {{PLURAL:$1|1 categoria|$1 categorias}} ascondeda:",
+       "nocreatetext": "{{SITENAME}} ia restrinje la capasia de crea pajes nova.\nTu pote vade a retro e edita un paje esistente, o  [[Special:UserLogin|autentici o crea un conta]].",
+       "nocreate-loggedin": "Tu no es permeteda a crea pajes nova.",
+       "sectioneditnotsupported-title": "La edita de partes no es suportada",
+       "sectioneditnotsupported-text": "La edita de partes no es suportada en esta paje.",
        "permissionserrors": "Era de permete",
-       "permissionserrorstext-withaction": "Tu no pote $2, per la {{PLURAL:$1|razona|razonas}} seguente:",
-       "recreate-moveddeleted-warn": "<strong>Avisa: Tu recrea un paje cual on ia sutrae a ante.</strong>\n\nConsidera esce lo conveni ce tu continua edita esta paje. La arcivos de sutrae e move per la paje es presentada asi per aida:",
-       "moveddeleted-notice": "On ia sutrae esta paje. La arcivos de sutrae e move per la paje es presentada a su per clari.",
+       "permissionserrorstext": "Tu no es permeteda a fa acel, per esta {{PLURAL:$1|razona|razonas}}:",
+       "permissionserrorstext-withaction": "Tu no es permeteda a $2, per la {{PLURAL:$1|razona|razonas}} seguente:",
+       "contentmodelediterror": "Tu no pote edita esta revisa car sua model de contenida es <code>$1</code>, cual difere de la model de contenida presente de la paje, <code>$2</code>.",
+       "recreate-moveddeleted-warn": "<strong>Avisa: Tu recrea un paje cual on ia sutrae a ante.</strong>\n\nConsidera esce lo conveni ce tu continua edita esta paje. La rejistras de sutrae e move per la paje es presentada asi per aida:",
+       "moveddeleted-notice": "On ia sutrae esta paje. La rejistras de sutrae e move per la paje es presentada a su per clari.",
+       "moveddeleted-notice-recent": "Pardona, esta paje ia es resente sutraeda (en la 24 oras pasada).\nLa rejistras de sutrae, proteje e move per la paje es presentada a su per clari.",
+       "log-fulllog": "Regarda rejistra intera",
+       "edit-hook-aborted": "Edita ia es abortada par program estendente.\nLo ia dona no esplica.",
+       "edit-gone-missing": "La paje no ia pote es cambiada.\nLo pare ce on ia sutrae lo.",
+       "edit-conflict": "Desacorda de editas",
+       "edit-no-change": "Tua edita ia es iniorada car la testo ia conteni no cambias.",
+       "postedit-confirmation-created": "La paje es creada.",
+       "postedit-confirmation-restored": "La paje es restorada.",
+       "postedit-confirmation-saved": "Tua edita es fisada.",
+       "edit-already-exists": "Un paje nova no ia pote es creada.\nLo esiste ja.",
+       "defaultmessagetext": "Testo inisial de mesaje",
+       "content-failed-to-parse": "La contenida $2 per model $1 no ia pote es analiseda: $3",
+       "invalid-content-data": "Datos nonvalida de contenida",
+       "content-not-allowed-here": "Contenida \"$1\" no es permeteda en paje [[$2]]",
+       "editwarning-warning": "Si tu vade a via de esta paje, tu va perde cisa cualce cambias cual tu ia fa.\nSi tu es autenticida, tu pote descomuta esta avisa en la parte \"{{int:prefs-editing}}\" de tua preferes.",
+       "editpage-invalidcontentmodel-title": "Model de contenida no es suportada",
+       "editpage-invalidcontentmodel-text": "La model de contenida \"$1\" no es suportada.",
+       "editpage-notsupportedcontentformat-title": "Formato de contenida no es suportada",
+       "editpage-notsupportedcontentformat-text": "La formato de contenida $1 no es suportada par la model de contenida $2.",
        "content-model-wikitext": "vicitesto",
-       "undo-failure": "Esta edita no pote es desfada par causa de editas interveninte cual contradise lo.",
-       "viewpagelogs": "Mostra la arcivos per esta paje",
-       "currentrev": "Cambia presente",
+       "content-model-text": "testo plata",
+       "content-model-javascript": "JavaScript",
+       "content-json-empty-object": "Ojeto vacua",
+       "content-json-empty-array": "Lista vacua",
+       "deprecated-self-close-category": "Pajes con eticetas HTML autocluinte nonvalida",
+       "deprecated-self-close-category-desc": "La paje conteni eticetas HTML autocluinte nonvalida, como <code>&lt;b/></code> o <code>&lt;span/></code>. La condui de estas va cambia en la futur prosima per coere con la spesifa HTML5, donce on desaproba usa los en vicitesto.",
+       "duplicate-args-warning": "<strong>Averti:</strong> [[:$1]] clama [[:$2]] con plu ca un valua per la parametre \"$3\". Sola la valua final furnida va es usada.",
+       "duplicate-args-category": "Pajes con parametres duplida en clamas de stensil",
+       "duplicate-args-category-desc": "La paje conteni clamas de stensil cual dupli sua parametres, como en <code><nowiki>{{foo|bar=1|bar=2}}</nowiki></code> o <code><nowiki>{{foo|bar|1=baz}}</nowiki></code>.",
+       "expensive-parserfunction-warning": "<strong>Avisa:</strong> Esta paje conteni tro multe clamas custosa a funsionas de analisador.\n\nLo debe ave min ca $2 {{PLURAL:$2|clama|clamas}}, ma aora lo ave {{PLURAL:$1|$1 clama|$1 clamas}}.",
+       "expensive-parserfunction-category": "Pajes con tro multe clamas custosa a funsionas de analisador",
+       "post-expand-template-inclusion-warning": "<strong>Avisa:</strong> La grandia de stensiles incluida es tro grande.\nAlga stensiles no va es incluida.",
+       "post-expand-template-inclusion-category": "Pajes cual esede la grandia de stensiles incluida",
+       "post-expand-template-argument-warning": "<strong>Avisa:</strong> Esta paje conteni a la min un parametre de stensil cual es tro grande cuando estendeda.\nEsta parametres es ometeda.",
+       "post-expand-template-argument-category": "Pajes conteninte parametres ometeda de stensil",
+       "parser-template-loop-warning": "Sicle de stensil es detetada: [[$1]]",
+       "template-loop-category": "Pajes con sicles de stensil",
+       "template-loop-category-desc": "Esta paje conteni un sicle de stensil, pd un stensil cual clama se en modo recorsante.",
+       "parser-template-recursion-depth-warning": "Esede de profondia masima de recorsa de stensil ($1)",
+       "language-converter-depth-warning": "Esede de profondia masima de convertador de lingua ($1)",
+       "node-count-exceeded-category": "Pajes do la conta de nodas es esededa",
+       "node-count-exceeded-category-desc": "La paje esede la conta masima de nodas.",
+       "node-count-exceeded-warning": "La paje ia esede la conta de nodas",
+       "expansion-depth-exceeded-category": "Pajes do la profondia de estende es esededa",
+       "expansion-depth-exceeded-category-desc": "La paje esede la profondia masima de estende.",
+       "expansion-depth-exceeded-warning": "La paje ia esede la profondia de estende",
+       "parser-unstrip-loop-warning": "Sicle de unstrip() detetada",
+       "parser-unstrip-recursion-limit": "Esede de la recorsa masima de unstrip() ($1)",
+       "converter-manual-rule-error": "Era detetada en regula nonautomata de converti de lingua",
+       "undo-success": "La edita pote es desfada.\nPer favore, esamina la compara a su per serti ce tu vole fa esta, e alora fisa la cambias a su per fini desfa la edita.",
+       "undo-failure": "La edita no pote es desfada par causa de editas interveninte cual contradise lo.",
+       "undo-norev": "La edita no pote es desfada car lo no esiste o ia es sutraeda.",
+       "undo-nochange": "Lo pare ce la edita es ja desfada.",
+       "undo-summary": "Desfa revisa $1 par [[Special:Contributions/$2|$2]] ([[User talk:$2|discute]])",
+       "undo-summary-username-hidden": "Desfa revisa $1 par un usor ascondeda",
+       "cantcreateaccount-text": "La crea de contas de esta adirije IP (<strong>$1</strong>) ia es impedida par [[User:$3|$3]].\n\nLa razona donada par $3 es <em>$2</em>",
+       "cantcreateaccount-range-text": "La crea de contas de adirijes IP en la estende <strong>$1</strong>, cual inclui tua adirije IP (<strong>$4</strong>), ia es impedida par [[User:$3|$3]].\n\nLa razona donada par $3 es <em>$2</em>",
+       "viewpagelogs": "Mostra rejistras per esta paje",
+       "nohistory": "Esta paje ave no istoria de editas.",
+       "currentrev": "Revisa la plu resente",
        "currentrev-asof": "Revisa la plu resente de $1",
        "revisionasof": "Revisa de $1",
-       "revision-info": "Revisa de $1 par $2",
-       "previousrevision": "← Revisa presedente",
+       "revision-info": "Revisa de $1 par {{GENDER:$6|$2}}$7",
+       "previousrevision": "← Revisa plu vea",
        "nextrevision": "Revisa plu nova →",
        "currentrevisionlink": "Revisa la plu resente",
        "cur": "aora",
-       "next": "seguente",
-       "last": "dife",
+       "next": "seg",
+       "last": "pres",
        "page_first": "prima",
        "page_last": "final",
-       "histlegend": "Eleje de diferes: Marca la caxas de la revisas cual tu vole compara. Alora presa la tecla de entra, o clica la boton a su.<br />\nLegend: <strong>({{int:cur}})</strong> = compara con la revisa la plu resente, <strong>({{int:last}})</strong> = compara con la revisa presedente, <strong>{{int:minoreditletter}}</strong> = edita minor.",
+       "histlegend": "Eleje de diferes: Marca la caxas de la revisas cual tu vole compara. Alora presa la tecla de entra, o clica la boton a su.<br />\nEsplica: <strong>({{int:cur}})</strong> = compara con la revisa la plu resente, <strong>({{int:last}})</strong> = compara con la revisa presedente, <strong>{{int:minoreditletter}}</strong> = edita minor.",
        "history-fieldset-title": "Xerca revisas",
-       "histfirst": "la plu vea",
-       "histlast": "la plu nova",
-       "historysize": "({{PLURAL:$1|1 otuple|$1 otuples}})",
+       "history-show-deleted": "Sola revisas sutraeda",
+       "histfirst": "la plu veas",
+       "histlast": "la plu novas",
+       "historysize": "({{PLURAL:$1|1 bait|$1 baites}})",
        "historyempty": "(vacua)",
-       "history-feed-title": "Istoria de revises",
+       "history-feed-title": "Istoria de revisas",
        "history-feed-description": "Istoria de revisas per esta paje en la vici",
        "history-feed-item-nocomment": "$1 a $2",
-       "rev-delundel": "mostra/asconde",
+       "history-feed-empty": "La paje solisitada no esiste.\nCisa on ia sutrae lo de la vici o ia renomi lo.\nProba [[Special:Search|xerca]] pajes nova pertinente en la vici.",
+       "history-edit-tags": "Edita eticetas de revisas elejeda",
+       "rev-deleted-comment": "(resoma sutraeda)",
+       "rev-deleted-user": "(nom de usor sutraeda)",
+       "rev-deleted-event": "(detalias de rejistra sutraeda)",
+       "rev-deleted-user-contribs": "[nom de usor o adirije IP sutraeda - edita es ascondeda de contribuis]",
+       "rev-deleted-text-permission": "Esta revisa de la paje es <strong>sutraeda</strong>.\nDetalias es trovable en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistra de sutraes].",
+       "rev-suppressed-text-permission": "Esta revisa de la paje es <strong>supresada</strong>.\nDetalias es trovable en la [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejistra de supresas].",
+       "rev-deleted-text-unhide": "Esta revisa de la paje es <strong>sutraeda</strong>.\nDetalias es trovable en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistra de sutraes].\nTu pote ancora [$1 regarda esta revisa] si tu desira continua.",
+       "rev-suppressed-text-unhide": "Esta revisa de la paje es <strong>supresada</strong>.\nDetalias es trovable en la [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejistra de supresas].\nTu pote ancora [$1 regarda esta revisa] si tu desira continua.",
+       "rev-deleted-text-view": "Esta revisa de la paje es <strong>sutraeda</strong>.\nTu pote regarda lo; detalias es trovable en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistra de sutraes].",
+       "rev-suppressed-text-view": "Esta revisa de la paje es <strong>supresada</strong>.\nTu pote regarda lo; detalias es trovable en la [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejistra de supresas].",
+       "rev-deleted-no-diff": "Tu no pote regarda esta difere, car un de la revisas es <strong>sutraeda</strong>.\nDetalias es trovable en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistra de sutraes].",
+       "rev-suppressed-no-diff": "Tu no pote regarda esta difere, car un de la revisas es <strong>supresada</strong>.",
+       "rev-deleted-unhide-diff": "Un de la revisas de esta difere es <strong>sutraeda</strong>.\nDetalias es trovable en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistra de sutraes].\nTu pote ancora [$1 regarda esta revisa] si tu desira continua.",
+       "rev-suppressed-unhide-diff": "Un de la revisas de esta difere es <strong>supresada</strong>.\nDetalias es trovable en la [{{fullurl:{{#Special:Log}}/suppress|page={{FULLPAGENAMEE}}}} rejistra de supresas].\nTu pote ancora [$1 regarda esta revisa] si tu desira continua.",
+       "rev-deleted-diff-view": "Un de la revisas de esta difere es <strong>sutraeda</strong>.\nTu pote regarda esta difere; detalias es trovable en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistra de sutraes].",
+       "rev-suppressed-diff-view": "Un de la revisas de esta difere es <strong>sutraeda</strong>.\nTu pote regarda esta difere; detalias es trovable en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistra de sutraes].",
+       "rev-delundel": "cambia vidablia",
        "rev-showdeleted": "mostra",
+       "revisiondelete": "Sutrae/desutrae revisas",
+       "revdelete-nooldid-title": "Revisa spesifada es nonvalida",
+       "revdelete-nooldid-text": "O tu no ia spesifa a cual revisa tu vole aplica esta funsiona, o la revisa spesifada no esiste, o tu atenta asconde la revisa presente.",
+       "revdelete-no-file": "La fix spesifada no esiste.",
+       "revdelete-show-file-confirm": "Esce tu es serta ce tu vole regarda un revisa sutraeda de la fix \"<nowiki>$1</nowiki>\" de $2 a $3?",
        "revdelete-show-file-submit": "Si",
+       "revdelete-selected-text": "{{PLURAL:$1|Revisa|Revisas}} elejeda de [[:$2]]:",
+       "revdelete-selected-file": "{{PLURAL:$1|Revisa|Revisas}} elejeda de fix de [[:$2]]:",
+       "logdelete-selected": "{{PLURAL:$1|Entrada|Entradas}} elejeda de rejistra:",
+       "revdelete-text-text": "Revisas sutraeda va apare ancora en la istoria de paje, ma partes de sua contenida va es nonasedable per la publica.",
+       "revdelete-text-file": "Revisas sutraeda de un fix va apare ancora en la istoria de paje, ma partes de sua contenida va es nonasedable per la publica.",
+       "logdelete-text": "Entradas sutraeda va apare ancora en la rejistras, ma partes de sua contenida va es nonasedable per la publica.",
+       "revdelete-text-others": "Otra dirijores va pote ancora asede la contenida ascondeda e desutrae lo, estra si plu restrinjes es aplicada.",
+       "revdelete-confirm": "Per favore, confirma ce tu intende fa esta, ce tu comprende la efetos, e ce tu ata longo [[{{MediaWiki:Policy-url}}|la politica]].",
+       "revdelete-suppress-text": "Supresas debe es usada <strong>sola</strong> en la casos seguente:\n* informas cisa malacusante\n* informas personal cual no conveni\n:* <em>adirijes e numeros telefonal de casa, numeros de identia nasional, etc.</em>",
+       "revdelete-legend": "Defini restrinjes de vidablia",
+       "revdelete-hide-text": "Testo de revisa",
+       "revdelete-hide-image": "Asconde contenida de fix",
+       "revdelete-hide-name": "Asconde nom e parametres",
+       "revdelete-hide-comment": "Resoma de edita",
+       "revdelete-hide-user": "Nom o adirije IP de editor",
+       "revdelete-hide-restricted": "Supresa datos de dirijores, no sola de otras",
+       "revdelete-radio-same": "(no cambia)",
        "revdelete-radio-set": "Ascondeda",
        "revdelete-radio-unset": "Vidable",
+       "revdelete-suppress": "Supresa datos de dirijores, no sola de otras",
+       "revdelete-unsuppress": "Sutrae restrinjes de revisas restorada",
+       "revdelete-log": "Razona:",
+       "revdelete-submit": "Aplica a {{PLURAL:$1|revisa|revisas}} elejeda",
+       "revdelete-success": "La vidablia de la revisa ia es cambiada.",
+       "revdelete-failure": "La vidablia de la revisa no ia pote es cambiada:\n$1",
+       "logdelete-success": "La vidablia de la rejistra es cambiada.",
+       "logdelete-failure": "La vidablia de la revisa no ia pote es cambiada:\n$1",
+       "revdel-restore": "cambia vidablia",
        "pagehist": "Istoria de paje",
        "deletedhist": "Istoria sutraeda",
-       "mergelog": "Fusa arcivo",
+       "revdelete-hide-current": "Era en asconde la entrada de $2, $1: Esta es la revisa presente.\nOn no pote asconde lo.",
+       "revdelete-show-no-access": "Era en mostra la entrada de $2, $1: On ia marca esta entrada como \"restrinjeda\".\nTu no pote asede lo.",
+       "revdelete-modify-no-access": "Era en altera la entrada de $2, $1: On ia marca esta entrada como \"restrinjeda\".\nTu no pote asede lo.",
+       "revdelete-modify-missing": "Era en altera la entrada con numero $1: Lo manca de la banco de datos!",
+       "revdelete-no-change": "<strong>Avisa:</strong> La entrada de $2, $1 ia ave ja la vidablia solisitada.",
+       "revdelete-concurrent-change": "Era en altera la entrada de $2, $1: Lo pare ce un otra usor ia cambia sua state en cuando tu ia atenta altera lo.\nRegarda la rejistras, per favore.",
+       "revdelete-only-restricted": "Era en asconde la entrada de $2, $1: Tu no pote supresa entradas de la regarda de dirijores si tu no eleje ance un de la otra posibles de vidablia.",
+       "revdelete-reason-dropdown": "*Razonas comun de sutrae\n** Viole de direto de autor\n** Comenta o informa personal cual no conveni\n** Nom de usor cual no conveni\n** Informas cisa malacusante",
+       "revdelete-otherreason": "Otra/plu razona:",
+       "revdelete-reasonotherlist": "Otra razona",
+       "revdelete-edit-reasonlist": "Edita razonas de sutrae",
+       "revdelete-offender": "Autor de revisa:",
+       "suppressionlog": "Rejistra de supresas",
+       "suppressionlogtext": "A su es un lista de sutraes e impedis cual envolve contenida ascondeda de dirijores.\nVide la [[Special:BlockList|lista de impedis]] per la proibis e impedis cual es ativa a presente.",
+       "mergehistory": "Fusa istorias de paje",
+       "mergehistory-header": "Esta paje permete ce tu fusa revisas de la istoria de un paje fontal con un paje plu nova.\nSerti ce esta cambia va manteni la continua istorial de pajes.",
+       "mergehistory-box": "Fusa revisas de du pajes:",
+       "mergehistory-from": "Paje fontal:",
+       "mergehistory-into": "Paje destinal:",
+       "mergehistory-list": "Istoria fusable de editas",
+       "mergehistory-merge": "La revisas seguente de [[:$1]] pote es fusada con [[:$2]].\nUsa la colona de botones de radio per fusa sola la revisas creada a e ante la tempo spesifada.\nNota ce si tu usa la lias de naviga, esta colona va es reinisiada.",
+       "mergehistory-go": "Mostra editas fusable",
+       "mergehistory-submit": "Fusa revisas",
+       "mergehistory-empty": "No revisas pote es fusada.",
+       "mergehistory-done": "$3 {{PLURAL:$3|revisa|revisas}} de $1 ia es fusada con [[:$2]].",
+       "mergehistory-fail": "La fusa de istoria no pote aveni. Per favore, reesamina la parametres de paje e tempo.",
+       "mergehistory-fail-bad-timestamp": "La indica de ora no es valida.",
+       "mergehistory-fail-invalid-source": "La paje fontal no es valida.",
+       "mergehistory-fail-invalid-dest": "La pajes destinal no es valida.",
+       "mergehistory-fail-no-change": "La fusa de istoria ia fusa no revisas. Per favore, reesamina la parametres de paje e tempo.",
+       "mergehistory-fail-permission": "Tua permetes no sufisi per fusa istoria.",
+       "mergehistory-fail-self-merge": "La pajes fontal e destinal es la mesma.",
+       "mergehistory-fail-timestamps-overlap": "La revisas fontal inclui o segue la revisas destinal.",
+       "mergehistory-fail-toobig": "La fusa de istoria no pote aveni car lo ta move plu ca la masima de $1 {{PLURAL:$1|revisa|revisas}}.",
+       "mergehistory-no-source": "La paje fontal $1 no esiste.",
+       "mergehistory-no-destination": "La paje destinal $1 no esiste.",
+       "mergehistory-invalid-source": "La paje fontal debe es un titulo valida.",
+       "mergehistory-invalid-destination": "La paje destinal debe es un titulo valida.",
+       "mergehistory-autocomment": "[[:$1]] ia es fusada con [[:$2]]",
+       "mergehistory-comment": "[[:$1]] ia es fusada con [[:$2]]: $3",
+       "mergehistory-same-destination": "La pajes fontal e destinal no pote es la mesma.",
+       "mergehistory-reason": "Razona:",
+       "mergelog": "Rejistra de fusas",
+       "revertmerge": "Desfusa",
+       "mergelogpagetext": "A su es un lista de la fusas la plu resente de la istoria de un paje con un otra.",
        "history-title": "Istoria de revisas de \"$1\"",
        "difference-title": "Difere entre revisas de \"$1\"",
+       "difference-title-multipage": "Difere entre pajes \"$1\" e \"$2\"",
+       "difference-multipage": "(Difere entre pajes)",
        "lineno": "Linia $1:",
        "compareselectedversions": "Compara revisas elejeda",
+       "showhideselectedversions": "Cambia vidablia de revisas elejeda",
        "editundo": "desfa",
        "diff-empty": "(No diferes)",
-       "diff-multi-sameuser": "({{PLURAL:$1|Un revisa media|$1 revisas media}} par la mesma usor no es mostrada)",
-       "diff-multi-otherusers": "({{PLURAL:$1|Un revisa media|$1 revisas media}} par {{PLURAL:$2|un otra usor|$2 usores}} no es mostrada)",
-       "searchresults": "Trovadas",
-       "searchresults-title": "Trovadas per \"$1\"",
-       "prevn": "{{PLURAL:$1|$1}} presedente",
-       "nextn": "{{PLURAL:$1|$1}} seguente",
+       "diff-multi-sameuser": "({{PLURAL:$1|Un revisa|$1 revisas}} media par la mesma usor no es mostrada)",
+       "diff-multi-otherusers": "({{PLURAL:$1|Un revisa|$1 revisas}} media par {{PLURAL:$2|un otra usor|$2 usores}} no es mostrada)",
+       "diff-multi-manyusers": "({{PLURAL:$1|Un revisa|$1 revisas}} media par plu ca $2 {{PLURAL:$2|usor|$2 usores}} no es mostrada)",
+       "difference-missing-revision": "La revisa $1 de la paje nomida \"{{FULLPAGENAME}}\" no esiste.\n\nEsta es usual causada par segue un lia nonfresca de istoria a un paje cual on ia sutrae.\nDetalias es trovable en la [{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} rejistra de sutraes].",
+       "searchresults": "Resultas de xerca",
+       "searchresults-title": "Resultas de xerca \"$1\"",
+       "titlematches": "Trovadas en titulo de paje",
+       "textmatches": "Trovadas en testo de paje",
+       "notextmatches": "No resultas trovada",
+       "prevn": "{{PLURAL:$1 presedente|$1 presedentes}}",
+       "nextn": "{{PLURAL:$1 seguente|$1 seguentes}}",
+       "prev-page": "paje presedente",
+       "next-page": "paje seguente",
        "prevn-title": "$1 {{PLURAL:$1|resulta|resultas}} presedente",
        "nextn-title": "$1 {{PLURAL:$1|resulta|resultas}} seguente",
        "shown-title": "Mostra $1 {{PLURAL:$1|resulta|resultas}} en cada paje",
-       "viewprevnext": "Mostra ($1 {{int:pipe-separator}} $2) ($3)",
-       "searchmenu-exists": "<strong>Un paje nomida \"[[:$1]]\" esiste en esta vici.</strong> {{PLURAL:$2|0=|Vide ance la otra trovadas.}}",
-       "searchmenu-new": "<strong>Crea la paje \"[[:$1]]\" en esta vici!</strong> {{PLURAL:$2|0=|Vide ance la paje trovada par tua xerca.|Vide ance la pajes trovada par tua xerca.}}",
+       "viewprevnext": "Regarda ($1 {{int:pipe-separator}} $2) ($3)",
+       "searchmenu-exists": "<strong>Un paje nomida \"[[:$1]]\" esiste en esta vici.</strong> {{PLURAL:$2|0=|Vide ance la otra resultas trovada.}}",
+       "searchmenu-new": "<strong>Crea la paje \"[[:$1]]\" en esta vici!</strong> {{PLURAL:$2|0=|Vide ance la paje trovada par tua xerca.|Vide ance la resultas trovada par tua xerca.}}",
        "searchprofile-articles": "Pajes de contenida",
-       "searchprofile-images": "Multimediales",
+       "searchprofile-images": "Multimedial",
        "searchprofile-everything": "Tota",
        "searchprofile-advanced": "Avansada",
        "searchprofile-articles-tooltip": "Xerca en $1",
        "searchprofile-images-tooltip": "Xerca fixes",
        "searchprofile-everything-tooltip": "Xerca en la contenida intera (incluinte pajes de discute)",
-       "searchprofile-advanced-tooltip": "Spesifa spasios de nom",
+       "searchprofile-advanced-tooltip": "Xerca en spasios de nom spesifada",
        "search-result-size": "$1 ({{PLURAL:$2|1 parola|$2 parolas}})",
-       "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 sucategoria|$2 sucategorias}}, {{PLURAL:$3|1 arcivo|$3 arcivos}})",
+       "search-result-category-size": "{{PLURAL:$1|1 membro|$1 membros}} ({{PLURAL:$2|1 sucategoria|$2 sucategorias}}, {{PLURAL:$3|1 fix|$3 fixes}})",
        "search-redirect": "(redirije de $1)",
        "search-section": "(parte $1)",
-       "search-file-match": "(coresponde a la contenida de fix)",
-       "search-suggest": "Esce tu ia intende: $1",
+       "search-category": "(categoria $1)",
+       "search-file-match": "(trovada en contenida de fix)",
+       "search-suggest": "Esce tu ia vole dise: $1",
+       "search-rewritten": "Resultas es mostrada per $1. Xerca $2 en loca.",
+       "search-interwiki-caption": "Resultas de projetas relatada",
        "search-interwiki-default": "Resultas de $1:",
        "search-interwiki-more": "(plu)",
+       "search-interwiki-more-results": "plu resultas",
+       "search-relatedarticle": "Relatada",
+       "searchrelated": "relatada",
        "searchall": "tota",
+       "showingresults": "Asta {{PLURAL:$1|<strong>1</strong> resulta|<strong>$1</strong> resultas}} es mostrada a su, comensante con numero <strong>$2</strong>.",
+       "showingresultsinrange": "Asta {{PLURAL:$1|<strong>1</strong> resulta|<strong>$1</strong> resultas}} es mostrada a su, de numero <strong>$2</strong> asta numero <strong>$3</strong>.",
        "search-showingresults": "{{PLURAL:$4|Resulta <strong>$1</strong> de <strong>$3</strong>|Resultas <strong>$1 - $2</strong> de <strong>$3</strong>}}",
        "search-nonefound": "No resultas ia es trovada per la xerca.",
+       "search-nonefound-thiswiki": "No resultas ia es trovada per la xerca en esta pajeria.",
+       "powersearch-legend": "Xerca avansada",
+       "powersearch-ns": "Xerca en spasios de nom:",
+       "powersearch-togglelabel": "Eleje:",
        "powersearch-toggleall": "Tota",
        "powersearch-togglenone": "Zero",
-       "preferences": "Preferis",
+       "powersearch-remember": "Memori la eleje per xercas futur",
+       "search-external": "Xerca esterna",
+       "searchdisabled": "Xercas de {{SITENAME}} no es disponable.\nTu pote usa Google per xerca entretempo.\nNota ce sua catalogos de la contenida de {{SITENAME}} es cisa nonfresca.",
+       "search-error": "Un era ia aveni en xerca: $1",
+       "search-warning": "Un averti ia aveni en xerca: $1",
+       "preferences": "Preferes",
        "mypreferences": "Preferes",
+       "prefs-edits": "Cuantia de editas:",
+       "prefsnologintext2": "Per cambia tua preferes, autentici, per favore.",
+       "prefs-skin": "Pel",
        "skin-preview": "Previde",
+       "datedefault": "No prefere",
+       "prefs-labs": "Capasias esperimental",
+       "prefs-user-pages": "Pajes de usor",
+       "prefs-personal": "Profil de usor",
+       "prefs-rc": "Cambias resente",
+       "prefs-watchlist": "Pajes monitorida",
+       "prefs-editwatchlist": "Edita la lista monitorida",
+       "prefs-editwatchlist-label": "Edita entradas en tua lista monitorida",
+       "prefs-editwatchlist-edit": "Regarda e sutrae titulos en tua lista monitorida",
+       "prefs-editwatchlist-raw": "Edita tua lista cru de pajes monitorida",
+       "prefs-editwatchlist-clear": "Vacui tua lista monitorida",
+       "prefs-watchlist-days": "Mostra en lista monitorida per cuanto dias:",
+       "prefs-watchlist-days-max": "Masima $1 {{PLURAL:$1|dia|dias}}",
+       "prefs-watchlist-edits": "Cuantia masima de cambias mostrada en lista monitorida",
+       "prefs-watchlist-edits-max": "Limita: 1000",
+       "prefs-watchlist-token": "Marca de lista monitorida",
+       "prefs-misc": "Diversa",
+       "prefs-resetpass": "Cambia clave",
+       "prefs-changeemail": "Cambia o sutrae adirije de eposta",
+       "prefs-setemail": "Defini un adirije de eposta",
+       "prefs-email": "Elejes de eposta",
+       "prefs-rendering": "Aspeta",
        "saveprefs": "Fisa",
+       "restoreprefs": "Reinisia tota preferes (en tota partes)",
+       "prefs-editing": "Edita",
        "searchresultshead": "Xerca",
-       "savedprefs": "Tu preferis es fisada",
+       "stub-threshold": "Limita per formati de lias a jermes ($1):",
+       "stub-threshold-sample-link": "esemplo",
+       "stub-threshold-disabled": "Descomutada",
+       "recentchangesdays": "Mostra cambias resente per cuanto dias:",
+       "recentchangesdays-max": "Masima $1 {{PLURAL:$1|dia|dias}}",
+       "recentchangescount": "Mostra inisial cuanto editas:",
+       "prefs-help-recentchangescount": "Esta inclui cambias resente, istorias de paje e rejistras.",
+       "prefs-help-watchlist-token2": "Esta es la clave secreta per la flue ueb de tua lista monitorida.\nCualcun ci sabe lo va pote leje tua lista monitorida, donce no comparti lo.\nSi tu nesesa, [[Special:ResetTokens|tu pote reinisia lo]].",
+       "savedprefs": "Tu preferes ia es fisada.",
+       "savedrights": "La grupos de usor de {{GENDER:$1|$1}} ia es fisada.",
+       "timezonelegend": "Zona de ora:",
+       "localtime": "Ora local:",
+       "timezoneuseserverdefault": "Implicada par vici ($1)",
+       "timezoneuseoffset": "Otra (spesifa un desloca)",
+       "servertime": "Ora de servador:",
+       "guesstimezone": "Completi par surfador",
        "timezoneregion-africa": "Africa",
        "timezoneregion-america": "America",
        "timezoneregion-antarctica": "Antartica",
        "timezoneregion-europe": "Europa",
        "timezoneregion-indian": "Mar Indian",
        "timezoneregion-pacific": "Mar Pasifica",
+       "allowemail": "Permete epostas de otra usores",
+       "prefs-searchoptions": "Xerca",
+       "prefs-namespaces": "Spasios de nom",
+       "default": "inisial",
        "prefs-files": "Fixes",
+       "prefs-custom-css": "CSS personal",
+       "prefs-custom-js": "JavaScript personal",
+       "prefs-common-css-js": "CSS/JavaScript comun per tota peles:",
+       "prefs-reset-intro": "Tu pote usa esta paje per reinisia tua preferes a la inisiales per esta pajeria.\nTu no pote desfa esta.",
+       "prefs-emailconfirm-label": "Confirma de eposta:",
        "youremail": "Eposta:",
        "username": "{{GENDER:$1|Nom de usor}}:",
        "prefs-memberingroups": "{{GENDER:$2|Membro}} de {{PLURAL:$1|grupo|grupos}}:",
+       "group-membership-link-with-expiry": "$1 (asta $2)",
+       "prefs-registration": "Tempo de rejistra:",
        "yourrealname": "Nom vera:",
        "yourlanguage": "Lingua:",
-       "yournick": "Suscrive:",
-       "yourgender": "Como tu prefere ce tu es descriveda?",
-       "gender-male": "El edita pajes de wiki",
-       "gender-female": "El edita pajes de wiki",
+       "yourvariant": "Varia de lingua de contenida:",
+       "prefs-help-variant": "La varia o ortografia en cual tu prefere mostra la pajes de contenida de esta vici.",
+       "yournick": "Suscrive nova:",
+       "prefs-help-signature": "Comentas a pajes de discute debe es suscriveda con \"<nowiki>~~~~</nowiki>\", cual va es convertida a tua suscrive e un indica de data e ora.",
+       "badsig": "Suscrive cru nonvalida.\nEsamina la eticetas HTML.",
+       "badsiglength": "Tua suscrive es tro longa.\nLo debe conteni no plu ca {{PLURAL:$1|sinia|sinias}}.",
+       "yourgender": "Como tu prefere ce on descrive tu?",
+       "gender-unknown": "Cuando lo refere a tu, la program va usa parolas de jenero neutra, sempre cuando posible",
+       "gender-male": "El es mas",
+       "gender-female": "El es fema",
+       "prefs-help-gender": "La defini de esta prefere es nonobligante.\nLa program consulta lo per usa la jenero gramatical conveninte cuando lo refere a tu en comunicas a tu o otras.\nEsta informa va es publica.",
        "email": "Eposta",
-       "prefs-help-realname": "Tu nom vera no es obligada, ma si tu vole dona tu nom vera, el va es usada per onora tu per tu labora.\n\nTu no debe entra tua nom vera. Ma si tu entra tua noma vera, lo pote es usada per atribui tua laboras a tu.",
+       "prefs-help-realname": "Tua nom vera es nonobligante.\nSi tu dona lo, lo va es usada per atribui tua laboras a tu.",
+       "prefs-help-email": "La adirije de eposta es nonobligante, ma lo es nesesada per reinisia tua clave, en la caso ce tu oblida lo.",
+       "prefs-help-email-others": "Tu pote ance eleje ce otras contata tu par eposta par un lia en tua paje de usor o discute.\nTua adirije de eposta no es revelada cuando otra usores contata tu.",
+       "prefs-help-email-required": "Adirije de eposta es nesesada.",
+       "prefs-info": "Informas fundal",
+       "prefs-i18n": "Internasionali",
        "prefs-signature": "Suscrive",
-       "userrights": "Dirije de la diretos de usores",
-       "saveusergroups": "Fisa la grupo de usores",
+       "prefs-dateformat": "Forma de data",
+       "prefs-timeoffset": "Desloca de ora",
+       "prefs-advancedediting": "Elejes jeneral",
+       "prefs-editor": "Editador",
+       "prefs-preview": "Previde",
+       "prefs-advancedrc": "Elejes avansada",
+       "prefs-advancedrendering": "Elejes avansada",
+       "prefs-advancedsearchoptions": "Elejes avansada",
+       "prefs-advancedwatchlist": "Elejes avansada",
+       "prefs-displayrc": "Elejes de mostra",
+       "prefs-displaywatchlist": "Elejes de mostra",
+       "prefs-tokenwatchlist": "Marca",
+       "prefs-diffs": "Diferes",
+       "prefs-help-prefershttps": "Esta prefere va deveni ativa pos tua autentici seguente.",
+       "prefswarning-warning": "Tu ia fa cambias a tua preferes cual ancora no es fisada.\nSi tu parti de esta paje sin clica \"$1\", tua preferes no va es cambiada.",
+       "prefs-tabs-navigation-hint": "Aviseta: Tu pote usa la teclas de flexa sinistra e destra per naviga entre la oretas en la lista de oretas.",
+       "userrights": "Diretos de usores",
+       "userrights-lookup-user": "Eleje un usor",
+       "userrights-user-editname": "Tape un nom de usor:",
+       "editusergroup": "Carga grupos de usor",
+       "editinguser": "Cambiante diretos de {{GENDER:$1|usor}} <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "Regardante diretos de {{GENDER:$1|usor}} <strong>[[User:$1|$1]]</strong> $2",
+       "userrights-editusergroup": "Edita grupos de {{GENDER:$1|usor}}",
+       "userrights-viewusergroup": "Regarda grupos de {{GENDER:$1|usor}}",
+       "saveusergroups": "Fisa la grupo de {{GENDER:$1|usor}}",
+       "userrights-groupsmember": "Membro de:",
+       "userrights-groupsmember-auto": "Membro implicada de:",
+       "userrights-groups-help": "Tu pote cambia la grupos a cual esta usor parteni:\n* Un caxa marcada indica ce la usor es en acel grupo.\n* Un caxa nonmarcada indica ce la usor no es en acel grupo.\n* Un * indica ce tu no pote sutrae la grupo pos ajunta lo, o la reversa.\n* Un # indica ce tu pote sola retarda la tempo de desvalidi de esta membria de grupo; tu no pote avansa lo.",
+       "userrights-reason": "Razona:",
+       "userrights-no-interwiki": "Tu no es permeteda a edita diretos de usor en otra vicis.",
+       "userrights-nodatabase": "Banco de datos $1 no esiste o no es local.",
+       "userrights-changeable-col": "Grupos cual tu pote cambia",
+       "userrights-unchangeable-col": "Grupos cual tu no pote cambia",
+       "userrights-expiry-current": "Desvalidi a $1",
+       "userrights-expiry-none": "No desvalidi",
+       "userrights-expiry": "Desvalidi:",
+       "userrights-expiry-existing": "Tempo esistente de desvalidi: $3, $2",
+       "userrights-expiry-othertime": "Otra tempo:",
+       "userrights-expiry-options": "1 dia:1 day,1 semana:1 week,1 mense:1 month,3 menses:3 months,6 menses:6 months,1 anio:1 year",
+       "userrights-invalid-expiry": "La tempo de desvalidi per grupo \"$1\" es nonvalida.",
+       "userrights-expiry-in-past": "La tempo de desvalidi per grupo \"$1\" ia pasa ja.",
+       "userrights-cannot-shorten-expiry": "Tu no pote avansa la desvalidi de membria en grupo \"$1\". Sola usores permeteda a ajunta e sutrae esta grupo pote avansa tempos de desvalidi.",
+       "userrights-conflict": "Desacorda de cambias de diretos de usor! Per favore, revisa e confirma tua cambias.",
        "group": "Grupo:",
        "group-user": "Usores",
+       "group-autoconfirmed": "Usores autoconfirmada",
        "group-bot": "Botes",
        "group-sysop": "Dirijores",
+       "group-bureaucrat": "Burocratas",
+       "group-suppress": "Supresores",
        "group-all": "(tota)",
        "group-user-member": "{{GENDER:$1|usor}}",
+       "group-autoconfirmed-member": "{{GENDER:$1|usor autoconfirmada}}",
+       "group-bot-member": "{{GENDER:$1|bot}}",
+       "group-sysop-member": "{{GENDER:$1|dirijor}}",
+       "group-bureaucrat-member": "{{GENDER:$1|burocrata}}",
+       "group-suppress-member": "{{GENDER:$1|supresor}}",
        "grouppage-user": "{{ns:project}}:Usores",
+       "grouppage-autoconfirmed": "{{ns:project}}:Usores autoconfirmada",
        "grouppage-bot": "{{ns:project}}:Botes",
        "grouppage-sysop": "{{ns:project}}:Dirijores",
-       "right-writeapi": "Usa de la api de scrive",
-       "newuserlogpage": "Arcivo de creas de usor",
-       "rightslog": "Arcivo de diretos de usor",
+       "grouppage-bureaucrat": "{{ns:project}}:Burocratas",
+       "grouppage-suppress": "{{ns:project}}:Supresa",
+       "right-read": "Leje pajes",
+       "right-edit": "Edita pajes",
+       "right-createpage": "Crea pajes (cual no es pajes de discute)",
+       "right-createtalk": "Crea pajes de discute",
+       "right-createaccount": "Crea contas nova de usor",
+       "right-autocreateaccount": "Autentici automata con un conta de usor esterna",
+       "right-minoredit": "Marca editas como minor",
+       "right-move": "Move pajes",
+       "right-move-subpages": "Move pajes con sua supajes",
+       "right-move-rootuserpages": "Move pajes de usor fundal",
+       "right-move-categorypages": "Move pajes de categoria",
+       "right-movefile": "Move fixes",
+       "right-suppressredirect": "No crea redirijes de pajes orijinal cuando pajes move",
+       "right-upload": "Carga fixes",
+       "right-reupload": "Suprascrive fixes esistente",
+       "right-reupload-own": "Suprascrive fixes esistente cual tu mesma ia carga",
+       "right-reupload-shared": "Suprascrive local fixes en la arciveria de medias compartida",
+       "right-upload_by_url": "Carga fixes de un URL",
+       "right-purge": "Vacui la prememoria de pajeria per un paje sin confirma",
+       "right-autoconfirmed": "No es afetada par limitas IP de rapidia",
+       "right-bot": "Es tratada como un prosede automatida",
+       "right-nominornewtalk": "No fa ce editas minor a pajes de discute provoca la avisa de mesajes nova",
+       "right-apihighlimits": "Usa limitas plu alta en solisitas API",
+       "right-writeapi": "Usa la API de scrive",
+       "right-delete": "Sutrae pajes",
+       "right-bigdelete": "Sutrae pajes con istorias grande",
+       "right-deletelogentry": "Sutrae e desutrae entradas spesifada de rejistras",
+       "right-deleterevision": "Sutrae e desutrae revisas spesifada de pajes",
+       "right-deletedhistory": "Regarda entradas sutraeda de istoria, sin sua testo asosiada",
+       "right-deletedtext": "Regarda testo sutraeda e cambias entre revisas sutraeda",
+       "right-browsearchive": "Xerca en pajes sutraeda",
+       "right-undelete": "Desutrae un paje",
+       "right-suppressrevision": "Regarda, asconde e desasconde revisas spesifada de pajes de cualce usor",
+       "right-viewsuppressed": "Regarda revisas ascondeda de cualce usor",
+       "right-suppressionlog": "Regarda rejistras privata",
+       "right-block": "Impedi otra usores de edita",
+       "right-blockemail": "Impedi un usor de envia eposta",
+       "right-hideuser": "Impedi un nom de usor, ascondente lo de la publica",
+       "right-ipblock-exempt": "Sircoveni impedis de IP, autoimpedis e impedis de estende",
+       "right-unblockself": "Desimpedi tu",
+       "right-protect": "Cambia niveles de proteje e edita pajes cascadin protejeda",
+       "right-editprotected": "Edita pajes protejeda como \"{{int:protect-level-sysop}}\"",
+       "right-editsemiprotected": "Edita pajes protejeda como \"{{int:protect-level-autoconfirmed}}\"",
+       "right-editcontentmodel": "Edita la model de contenida de un paje",
+       "right-editinterface": "Edita la interfas de usor",
+       "right-editusercss": "Edita la fixes CSS de otra usores",
+       "right-edituserjs": "Edita la fixes JavaScript de otra usores",
+       "right-editmyusercss": "Edita tua propre fixes de CSS personal",
+       "right-editmyuserjs": "Edita tua propre fixes de JavaScript personal",
+       "right-viewmywatchlist": "Regarda tua propre lista monitorida",
+       "right-editmywatchlist": "Edita tua propre lista monitorida. Nota ce alga atas va ajunta pajes an sin esta direto.",
+       "right-viewmyprivateinfo": "Regarda tua datos privata (pe adirije de eposta, nom vera)",
+       "right-editmyprivateinfo": "Edita tua datos privata (pe adirije de eposta, nom vera)",
+       "right-editmyoptions": "Edita tua propre preferes",
+       "right-rollback": "Reversa rapida la editas de la usor la plu resente ci ia edita un paje spesifada",
+       "right-markbotedits": "Marca editas reversada como editas de bot",
+       "right-noratelimit": "No es afetada par limitas de rapidia",
+       "right-import": "Emporta pajes de otra vicis",
+       "right-importupload": "Emporta pajes de un carga de fix",
+       "right-patrol": "Marca editas de otras como patruliada",
+       "right-autopatrol": "Fa ce tua propre editas es automata marcada como patruliada",
+       "right-patrolmarks": "Vide marcas de patrulia en cambias resente",
+       "right-unwatchedpages": "Vide un lista de pajes nonmonitorida",
+       "right-mergehistory": "Fusa la istoria de pajes",
+       "right-userrights": "Edita tota diretos de usor",
+       "right-userrights-interwiki": "Edita diretos de usores en otra vicis",
+       "right-siteadmin": "Clavi e desclavi la banco de datos",
+       "right-override-export-depth": "Esporta pajes incluinte pajes liada asta profondia de 5",
+       "right-sendemail": "Envia eposta a otra usores",
+       "right-managechangetags": "Crea e (des)ativi [[Special:Tags|eticetas]]",
+       "right-applychangetags": "Aplica [[Special:Tags|eticetas]] con tua propre cambias",
+       "right-changetags": "Ajunta e sutrae [[Special:Tags|eticetas]] acaso a revisas individua e entradas de rejistra",
+       "right-deletechangetags": "Sutrae [[Special:Tags|eticetas]] de la banco de datos",
+       "grant-generic": "Paco de diretos \"$1\"",
+       "grant-group-page-interaction": "Interata con pajes",
+       "grant-group-file-interaction": "Interata con medias",
+       "grant-group-watchlist-interaction": "Interata con tua lista monitorida",
+       "grant-group-email": "Envia epostas",
+       "grant-group-high-volume": "Atas con cuantia alta",
+       "grant-group-customization": "Personali e preferes",
+       "grant-group-administration": "Fa atas dirijal",
+       "grant-group-private-information": "Asede datos privata sur tu",
+       "grant-group-other": "Atas diversa",
+       "grant-blockusers": "Impedi e desimpedi usores",
+       "grant-createaccount": "Crea contas",
+       "grant-createeditmovepage": "Crea, edita e move pajes",
+       "grant-delete": "Sutrae pajes, revisas e entradas de rejistra",
+       "grant-editinterface": "Edita la spasio de nom MediaWiki e CSS/JavaScript personal",
+       "grant-editmycssjs": "Edita tua CSS/JavaScript personal",
+       "grant-editmyoptions": "Edita tua preferes de usor",
+       "grant-editmywatchlist": "Edita tua lista monitorida",
+       "grant-editpage": "Edita pajes esistente",
+       "grant-editprotected": "Edita pajes protejeda",
+       "grant-highvolume": "Edita con cuantia alta",
+       "grant-oversight": "Asconde usores e supresa revisas",
+       "grant-patrol": "Patrulia cambias de pajes",
+       "grant-privateinfo": "Asede informas privata",
+       "grant-protect": "Proteje e desproteje pajes",
+       "grant-rollback": "Reversa cambias de pajes",
+       "grant-sendemail": "Envia eposta a otra usores",
+       "grant-uploadeditmovefile": "Carga, suprascrive e move fixes",
+       "grant-uploadfile": "Carga fixes nova",
+       "grant-basic": "Diretos fundal",
+       "grant-viewdeleted": "Regarda fixes e pajes sutraeda",
+       "grant-viewmywatchlist": "Regarda tua lista monitorida",
+       "grant-viewrestrictedlogs": "Regarda entradas restrinjeda de rejistras",
+       "newuserlogpage": "Rejistra de creas de usor",
+       "newuserlogpagetext": "Esta es un rejistra de creas de usor.",
+       "rightslog": "Rejistra de diretos de usor",
+       "rightslogtext": "Esta es un rejistra de cambias de diretos de usor.",
+       "action-read": "leje esta paje",
        "action-edit": "edita esta paje",
+       "action-createpage": "crea esta paje",
+       "action-createtalk": "crea esta paje de discute",
        "action-createaccount": "crea esta conta de usor",
+       "action-autocreateaccount": "crea automata esta conta de usor esterna",
+       "action-history": "regarda la istoria de esta paje",
+       "action-minoredit": "marca esta edita como minor",
+       "action-move": "move esta paje",
+       "action-move-subpages": "move esta paje e sua supajes",
+       "action-move-rootuserpages": "move pajes de usor fundal",
+       "action-move-categorypages": "move pajes de categoria",
+       "action-movefile": "move esta fix",
+       "action-upload": "carga esta fix",
+       "action-reupload": "suprascrive esta fix esistente",
+       "action-reupload-shared": "suprascrive esta fix en un arciveria compartida",
+       "action-upload_by_url": "carga esta fix de un URL",
+       "action-writeapi": "usa la API de scrive",
+       "action-delete": "sutrae esta paje",
+       "action-deleterevision": "sutrae revisas",
+       "action-deletelogentry": "sutrae entradas de rejistra",
+       "action-deletedhistory": "regarda la istoria sutraeda de pajes",
+       "action-deletedtext": "regarda testo de revisas sutraeda",
+       "action-browsearchive": "xerca en pajes sutraeda",
+       "action-undelete": "desutrae pajes",
+       "action-suppressrevision": "regarda e restora revisas ascondeda",
+       "action-suppressionlog": "regarda esta rejistra privata",
+       "action-block": "impedi esta usor de edita",
+       "action-protect": "cambia niveles de proteje per esta paje",
+       "action-rollback": "reversa rapida la editas de la usor la plu resente ci ia edita un paje spesifada",
+       "action-import": "emporta pajes de un otra vici",
+       "action-importupload": "emporta pajes de un carga de fix",
+       "action-patrol": "marca la editas de otras como patruliada",
+       "action-autopatrol": "fa ce tua editas es marcada como patruliada",
+       "action-unwatchedpages": "regarda la lista de pajes nonmonitorida",
+       "action-mergehistory": "fusa la istoria de esta paje",
+       "action-userrights": "edita tota diretos de usor",
+       "action-userrights-interwiki": "edita diretos de usores en otra vicis",
+       "action-siteadmin": "clavi o desclavi la banco de datos",
+       "action-sendemail": "envia epostas",
+       "action-editmyoptions": "edita tua preferes",
+       "action-editmywatchlist": "edita tua lista monitorida",
+       "action-viewmywatchlist": "regarda tua lista monitorida",
+       "action-viewmyprivateinfo": "regarda tua informas privata",
+       "action-editmyprivateinfo": "edita tua informas privata",
+       "action-editcontentmodel": "edita la model de contenida de un paje",
+       "action-managechangetags": "crea e (des)ativi eticetas",
+       "action-applychangetags": "aplica eticetas con tua cambias",
+       "action-changetags": "ajunta e sutrae eticetas acaso a revisas individua e entradas de rejistra",
+       "action-deletechangetags": "sutrae eticetas de la banco de datos",
+       "action-purge": "vacui esta paje",
        "nchanges": "$1 {{PLURAL:$1|cambia|cambias}}",
+       "enhancedrc-since-last-visit": "$1 {{PLURAL:$1|pos tua visita la plu resente}}",
        "enhancedrc-history": "istoria",
        "recentchanges": "Cambias resente",
        "recentchanges-legend": "Elejes per cambias resente",
        "recentchanges-label-plusminus": "La grandia de esta paje ia es cambiada par esta cuantia de baites",
        "recentchanges-legend-heading": "<strong>Esplica:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (vide ance la [[Special:NewPages|lista de pajes nova]])",
-       "rcnotefrom": "A su {{PLURAL:$5|es la cambia|es la cambias}} de <strong>$3, $4</strong> (mostrante asta <strong>$1</strong>).",
+       "recentchanges-submit": "Mostra",
+       "rcfilters-legend-heading": "<strong>Lista de cortis:</strong>",
+       "rcfilters-other-review-tools": "<strong>Otra utiles de revisa</strong>",
+       "rcfilters-group-results-by-page": "Grupi resultas par paje",
+       "rcfilters-grouping-title": "Grupi",
+       "rcfilters-activefilters": "Filtros ativa",
+       "rcfilters-advancedfilters": "Filtros avansada",
+       "rcfilters-limit-title": "Mostra cuanto cambias",
+       "rcfilters-limit-shownum": "Mostra {{PLURAL:$1|cambia|$1 cambias}} la plu resente",
+       "rcfilters-days-title": "Dias resente",
+       "rcfilters-hours-title": "Oras resente",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|dia|dias}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ora|oras}}",
+       "rcfilters-quickfilters": "Filtros fisada",
+       "rcfilters-quickfilters-placeholder-title": "No lias es fisada",
+       "rcfilters-quickfilters-placeholder-description": "Per fisa tua ajustas de filtro e reusa los en la futur, clica la icon de sinta de libro en la area \"Filtros ativa\", a su.",
+       "rcfilters-savedqueries-defaultlabel": "Filtros fisada",
+       "rcfilters-savedqueries-rename": "Renomi",
+       "rcfilters-savedqueries-setdefault": "Defini como filtro inisial",
+       "rcfilters-savedqueries-unsetdefault": "Sutrae como filtro inisial",
+       "rcfilters-savedqueries-remove": "Sutrae",
+       "rcfilters-savedqueries-new-name-label": "Nom",
+       "rcfilters-savedqueries-new-name-placeholder": "Descrive la intende de la filtro",
+       "rcfilters-savedqueries-apply-label": "Crea filtro",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Crea filtro inisial",
+       "rcfilters-savedqueries-cancel-label": "Cansela",
+       "rcfilters-savedqueries-add-new-title": "Fisa ajustas presente de filtro",
+       "rcfilters-restore-default-filters": "Restora filtros inisial",
+       "rcfilters-clear-all-filters": "Vacui tota filtros",
+       "rcfilters-show-new-changes": "Regarda cambias la plu resente",
+       "rcfilters-search-placeholder": "Filtri cambias resente (eleje o comensa tape)",
+       "rcfilters-invalid-filter": "Filtro nonvalida",
+       "rcfilters-empty-filter": "No filtros es ativa. Tota contribuis es mostrada.",
+       "rcfilters-filterlist-title": "Filtros",
+       "rcfilters-filterlist-whatsthis": "Como estas funsiona?",
+       "rcfilters-filterlist-feedbacklink": "Dona comentas sur la filtros nova (a beta)",
+       "rcfilters-highlightbutton-title": "Lumina resultas",
+       "rcfilters-highlightmenu-title": "Eleje un color",
+       "rcfilters-highlightmenu-help": "Eleje un color per lumina esta cualia",
+       "rcfilters-filterlist-noresults": "No filtros trovada",
+       "rcfilters-noresults-conflict": "No resultas trovada car la criterios de xerca desacorda",
+       "rcfilters-state-message-subset": "Esta filtro ave no efeto car sua resultas es incluida con los de la {{PLURAL:$2|filtro|filtros}} seguente, cual es plu jeneral (proba lumina per distingui lo): $1",
+       "rcfilters-state-message-fullcoverage": "La eleje de tota filtros en esta grupo es la mesma como la eleje de no filtros, donce esta filtro ave no efeto. La grupo inclui: $1",
+       "rcfilters-filtergroup-authorship": "Autores de contribuis",
+       "rcfilters-filter-editsbyself-label": "Cambias par tu",
+       "rcfilters-filter-editsbyself-description": "Tua propre contribuis.",
+       "rcfilters-filter-editsbyother-label": "Cambias par otras",
+       "rcfilters-filter-editsbyother-description": "Tota cambias estra la tuas.",
+       "rcfilters-filtergroup-userExpLevel": "Rejistra e esperia de usor",
+       "rcfilters-filter-user-experience-level-registered-label": "Autenticida",
+       "rcfilters-filter-user-experience-level-registered-description": "Editores autenticida.",
+       "rcfilters-filter-user-experience-level-unregistered-label": "Anonim",
+       "rcfilters-filter-user-experience-level-unregistered-description": "Editores ci no ia autentici",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Comensores",
+       "rcfilters-filter-user-experience-level-newcomer-description": "Editores autenticida con min ca 10 editas e 4 dias de ativia.",
+       "rcfilters-filter-user-experience-level-learner-label": "Aprendores",
+       "rcfilters-filter-user-experience-level-learner-description": "Editores autenticida de ci sua esperia es entre \"Comensores\" e \"Usores esperiosa\".",
+       "rcfilters-filter-user-experience-level-experienced-label": "Usores esperiosa",
+       "rcfilters-filter-user-experience-level-experienced-description": "Editores autenticida con plu ca 500 editas e 30 dias de ativia.",
+       "rcfilters-filtergroup-automated": "Contribuis automatida",
+       "rcfilters-filter-bots-label": "Bot",
+       "rcfilters-filter-bots-description": "Editas par utiles automatida",
+       "rcfilters-filter-humans-label": "Umana (no bot)",
+       "rcfilters-filter-humans-description": "Editas par editores umana.",
+       "rcfilters-filtergroup-reviewstatus": "State de validi",
+       "rcfilters-filter-patrolled-label": "Patrulia",
+       "rcfilters-filter-patrolled-description": "Editas marcada como patruliada.",
+       "rcfilters-filter-unpatrolled-label": "Nonpatruliada",
+       "rcfilters-filter-unpatrolled-description": "Editas no marcada como patruliada.",
+       "rcfilters-filtergroup-significance": "Importa",
+       "rcfilters-filter-minor-label": "Editas minor",
+       "rcfilters-filter-minor-description": "Editas cual la autor ia descrive como minor.",
+       "rcfilters-filter-major-label": "Editas nonminor",
+       "rcfilters-filter-major-description": "Editas no descriveda como minor.",
+       "rcfilters-filtergroup-watchlist": "Pajes monitorida",
+       "rcfilters-filter-watchlist-watched-label": "Monitorida",
+       "rcfilters-filter-watchlist-watched-description": "Cambias a pajes en tua lista monitorida",
+       "rcfilters-filter-watchlist-watchednew-label": "Cambias nova monitorida",
+       "rcfilters-filter-watchlist-watchednew-description": "Cambias a pajes monitorida cual tu no ia visita pos la aveni de la cambias.",
+       "rcfilters-filter-watchlist-notwatched-label": "Nonmonitorida",
+       "rcfilters-filter-watchlist-notwatched-description": "Tota estra cambias a tua pajes monitorida.",
+       "rcfilters-filtergroup-watchlistactivity": "Ativia en pajes monitorida",
+       "rcfilters-filter-watchlistactivity-unseen-label": "Cambias nonvideda",
+       "rcfilters-filter-watchlistactivity-unseen-description": "Cambias a pajes cual tu no ia visita pos la aveni de la cambias.",
+       "rcfilters-filter-watchlistactivity-seen-label": "Cambias videda",
+       "rcfilters-filter-watchlistactivity-seen-description": "Cambias a pajes cual tu ia visita pos la aveni de la cambias.",
+       "rcfilters-filtergroup-changetype": "Spesie de cambia",
+       "rcfilters-filter-pageedits-label": "Editas de paje",
+       "rcfilters-filter-pageedits-description": "Editas de contenida de vici, discutes, descrives de categoria…",
+       "rcfilters-filter-newpages-label": "Creas de paje",
+       "rcfilters-filter-newpages-description": "Editas cual crea pajes nova.",
+       "rcfilters-filter-categorization-label": "Cambias de categoria",
+       "rcfilters-filter-categorization-description": "Rejistras de la ajunta o sutrae de pajes en categorias",
+       "rcfilters-filter-logactions-label": "Atas rejistrada",
+       "rcfilters-filter-logactions-description": "Atas dirijal, creas de conta, sutraes de paje, cargas…",
+       "rcfilters-hideminor-conflicts-typeofchange-global": "La filtro \"Editas minor\" desacorda con un o plu filtros de \"Spesie de cambia\", car alga spesies de cambia no pote es indicada como \"minor\". La filtros desacordante es marcada en la area \"Filtros ativa\", a supra.",
+       "rcfilters-hideminor-conflicts-typeofchange": "Alga spesies de cambia no pote es indicada como \"minor\", donce esta filtro desacorda con la filtros seguente de \"Spesie de cambia\": $1",
+       "rcfilters-typeofchange-conflicts-hideminor": "Esta filtro de \"Spesie de cambia\" desacorda con la filtro \"Editas minor\". Alga spesies de cambia no pote es indicada como \"minor\".",
+       "rcfilters-filtergroup-lastRevision": "Revisas la plu resente",
+       "rcfilters-filter-lastrevision-label": "Revisa la plu tarda",
+       "rcfilters-filter-lastrevision-description": "Sola la cambia la plu resente a un paje.",
+       "rcfilters-filter-previousrevision-label": "No la revisa la plu tarda",
+       "rcfilters-filter-previousrevision-description": "Tota cambias cual no es la \"revisa la plu tarda\".",
+       "rcfilters-filter-excluded": "Escluida",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:no</strong> $1",
+       "rcfilters-exclude-button-off": "Esclui elejedas",
+       "rcfilters-exclude-button-on": "Escluinte elejedas",
+       "rcfilters-view-advanced-filters-label": "Filtros avansada",
+       "rcfilters-view-tags": "Editas eticetida",
+       "rcfilters-view-namespaces-tooltip": "Filtri resultas par spasio de nom",
+       "rcfilters-view-tags-tooltip": "Filtri resultas par eticetas de edita",
+       "rcfilters-view-return-to-default-tooltip": "Revade a menu xef de filtros",
+       "rcfilters-liveupdates-button": "Refrescis automata",
+       "rcfilters-liveupdates-button-title-on": "Descomuta refrescis automata",
+       "rcfilters-liveupdates-button-title-off": "Mostra cambias nova, direta cuando los aveni",
+       "rcfilters-watchlist-markseen-button": "Marca tota cambias como videda",
+       "rcnotefrom": "A su es la {{PLURAL:$5|cambia|cambias}} de <strong>$3, $4</strong> (asta <strong>$1</strong>).",
+       "rclistfromreset": "Reinisia la eleje de data",
        "rclistfrom": "Mostra cambias nova, comensante de $2, $3",
        "rcshowhideminor": "$1 editas minor",
        "rcshowhideminor-show": "Mostra",
        "rcshowhideliu": "$1 usores rejistrada",
        "rcshowhideliu-show": "Mostra",
        "rcshowhideliu-hide": "Asconde",
-       "rcshowhideanons": "$1 usores sin nom",
+       "rcshowhideanons": "$1 usores anonim",
        "rcshowhideanons-show": "Mostra",
        "rcshowhideanons-hide": "Asconde",
        "rcshowhidepatr": "$1 editas patruliada",
+       "rcshowhidepatr-show": "Mostra",
+       "rcshowhidepatr-hide": "Asconde",
        "rcshowhidemine": "$1 mea editas",
        "rcshowhidemine-show": "Mostra",
        "rcshowhidemine-hide": "Asconde",
+       "rcshowhidecategorization": "$1 categorias de pajes",
+       "rcshowhidecategorization-show": "Mostra",
+       "rcshowhidecategorization-hide": "Asconde",
        "rclinks": "Mostra la $1 cambias resente en la $2 dias presedente",
-       "diff": "dife",
-       "hist": "isto",
+       "diff": "dif",
+       "hist": "ist",
        "hide": "Asconde",
-       "show": "mostra",
+       "show": "Mostra",
        "minoreditletter": "m",
        "newpageletter": "N",
        "boteditletter": "b",
-       "rc_categories_any": "Cualce de la elejeda",
+       "number_of_watching_users_pageview": "[$1 {{PLURAL:$1|usor|usores}} monitorinte]",
+       "rc_categories": "Limita de categorias (separa con \"|\"):",
+       "rc_categories_any": "Cualce de la elejedas",
        "rc-change-size-new": "$1 {{PLURAL:$1|bait|baites}} pos cambia",
+       "newsectionsummary": "/* $1 */ parte nova",
        "rc-enhanced-expand": "Mostra detalias",
        "rc-enhanced-hide": "Asconde detalias",
        "rc-old-title": "orijinal creada como \"$1\"",
        "recentchangeslinked-feed": "Cambias relatada",
        "recentchangeslinked-toolbox": "Cambias relatada",
        "recentchangeslinked-title": "Cambias relatada a \"$1\"",
-       "recentchangeslinked-summary": "Esta es un lista de cambias resente a pajes liada (o a la membros de un categoria spesifada). Pajes en [[Special:Watchlist|tua lista de pajes monitorida]] es <strong>spesa</strong>.",
+       "recentchangeslinked-summary": "Esta es un lista de cambias resente a pajes liada de un paje spesifada (o a membros de un categoria spesifada).\nPajes en [[Special:Watchlist|tua lista monitorida]] es <strong>spesa</strong>.",
        "recentchangeslinked-page": "Nom de paje:",
        "recentchangeslinked-to": "Mostra cambias a pajes cual lia a la paje indicada, en loca",
-       "upload": "Carga un fix",
-       "uploadbtn": "Envia la fix",
-       "uploadlogpage": "Carga arcivo",
+       "recentchanges-page-added-to-category": "[[:$1]] ajuntada a categoria",
+       "recentchanges-page-added-to-category-bundled": "[[:$1]] ajuntada a categoria; [[Special:WhatLinksHere/$1|esta paje es incluida en otra pajes]]",
+       "recentchanges-page-removed-from-category": "[[:$1]] sutraeda de categoria",
+       "recentchanges-page-removed-from-category-bundled": "[[:$1]] sutraeda de categoria; [[Special:WhatLinksHere/$1|esta paje es incluida en otra pajes]]",
+       "autochange-username": "Cambia automata de MediaWiki",
+       "upload": "Carga fix",
+       "uploadbtn": "Envia fix",
+       "reuploaddesc": "Cansela carga e revade a la formulario de carga",
+       "upload-tryagain": "Envia descrive alterada de fix",
+       "uploadnologin": "No autenticida",
+       "uploadnologintext": "Per favore, $1 per carga fixes.",
+       "upload_directory_missing": "La arcivo de carga ($1) manca e la servador no ia pote crea lo.",
+       "upload_directory_read_only": "La arcivo de carga ($1) no es scrivable per la servador.",
+       "uploaderror": "Era de carga",
+       "upload-recreate-warning": "<strong>Avisa: Un fix con acel nom es ja sutraeda o moveda.</strong>\n\nLa rejistra de sutraes e moves per esta paje es mostrada a su per clari:",
+       "uploadtext": "Usa la formulario a su per carga fixes.\nPer regarda o xerca fixes cargada en la pasada, vade a la [[Special:FileList|lista de fixes cargada]]; (re)cargas es ance notada en la [[Special:Log/upload|rejistra de cargas]]; sutraes en la [[Special:Log/delete|rejistra de sutraes]].\n\nPer inclui un fix en un paje, usa un lia en un de la formas seguente:\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.jpg]]</nowiki></code></strong> per usa la varia completa de la fix\n* <strong><code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:File.png|200px|thumb|left|testo alternativa]]</nowiki></code></strong> per usa un varia con largia de 200 pixeles en un caxa en la marjin sinistra, con \"testo alternativa\" como sua descrive\n* <strong><code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:File.ogg]]</nowiki></code></strong> per lia direta a la fix sin mostra lo",
+       "upload-permitted": "{{PLURAL:$2|Tipo|Tipos}} de fix permeteda: $1.",
+       "upload-preferred": "{{PLURAL:$2|Tipo|Tipos}} de fix prefereda: $1.",
+       "upload-prohibited": "{{PLURAL:$2|Tipo|Tipos}} de fix proibida: $1.",
+       "uploadlogpage": "Rejistra de cargas",
+       "uploadlogpagetext": "A su es un lista de la cargas la plu resente de fix.\nVide la [[Special:NewFiles|galeria de fixes nova]] per un vista jeneral plu vidal.",
+       "filename": "Nom de fix",
        "filedesc": "Resoma",
+       "fileuploadsummary": "Resoma:",
+       "filereuploadsummary": "Cambias de fix:",
+       "filestatus": "Diretos de autor:",
+       "filesource": "Fonte:",
+       "ignorewarning": "Iniora la avisa e fisa la fix an tal",
+       "ignorewarnings": "Inioras tota avisas",
+       "minlength1": "Nomes de fix debe conteni a la min un letera.",
+       "illegalfilename": "La nom \"$1\" conteni sinias cual no es permeteda en titulos de paje.\nPer favore, renomi la fix e proba denova carga lo.",
+       "filename-toolong": "Un nom de fix no pote es plu longa ca 240 baites.",
+       "badfilename": "Nom de fix es cambiada a \"$1\".",
+       "filetype-mime-mismatch": "Sufisa \"$1\" no coresponde a la tipo MIME detetada per la fix ($2).",
+       "filetype-badmime": "On no permete la carga de fixes de tipo MIME \"$1\".",
+       "filetype-bad-ie-mime": "Esta fix no pote es cargada car Internet Explorer ta deteta lo como \"$1\", cual es un tipo de fix proibida e cisa perilosa.",
+       "filetype-unwanted-type": "<strong>\".$1\"</strong> es un tipo de fix nondesirada.\n{{PLURAL:$3|Tipo|Tipos}} de fix prefereda es $2.",
+       "filetype-banned-type": "<strong>\".$1\"</strong> no es {{PLURAL:$4|un tipo|tipos}} de fix permeteda.\n{{PLURAL:$3|Tipo|Tipos}} de fix permeteda es $2.",
+       "filetype-missing": "La fix ave no sufisa (como \".jpg\").",
+       "empty-file": "La fix cual tu ia enviada es vacua.",
+       "file-too-large": "La fix cual tu ia envia es tro grande.",
+       "filename-tooshort": "La nom de fix es tro corta.",
+       "filetype-banned": "Esta tipo de fix es proibida.",
+       "verification-error": "Esta fix no ia susede sua esamina.",
+       "hookaborted": "La altera cual tu ia atenta fa ia es abortada par un program estendente.",
+       "illegal-filename": "Nom de fix no es permeteda.",
+       "overwrite": "La suprascrive de un fix esistente no es permeteda.",
+       "unknown-error": "Un era nonconoseda ia aveni.",
+       "tmp-create-error": "Fix tempora no ia pote es creada.",
+       "tmp-write-error": "Era en scrive fix tempora.",
+       "large-file": "On recomenda ce fixes es no plu grande ca $1;\nesta fix ave $2.",
+       "largefileserver": "Esta fix es plu grande ca permeteda par la ajusta de la servador.",
+       "emptyfile": "La fix cual tu ia envia pare es vacua.\nCisa esta resulta de un maltape en la nom de fix.\nPer favore, serti esce tu desira vera carga esta fix.",
+       "windows-nonascii-filename": "Esta vici no suporta nomes de fix con sinias spesial.",
+       "fileexists": "Un fix con esta nom esiste ja. Per favore, regarda <strong>[[:$1]]</strong> si {{GENDER:|tu}} no es serta esce tu vole cambia lo.\n[[$1|thumb]]",
+       "filepageexists": "La paje de descrive per esta fix es ja creada a <strong>[[:$1]]</strong>, ma no fix con esta nom esiste a presente.\nLa resoma cual tu furni no va apare a la paje de descrive.\nPer fa ce tua resoma apare ala, tu va debe edita lo par mano.\n[[$1|thumb]]",
+       "fileexists-extension": "Un fix con nom simil esiste: [[$2|thumb]]\n* Nom de la fix cargada: <strong>[[:$1]]</strong>\n* Nom de la fix esistente: <strong>[[:$2]]</strong>\nEsce tu vole cisa usa un nom plu distinguinte?",
+       "fileexists-thumbnail-yes": "La fix pare es un imaje de grandia reduida <em>(imajeta)</em>.\n[[$1|thumb]]\nPer favore, esamina la fix <strong>[[:$1]]</strong>.\nSi acel fix es la mesma imaje con grandia orijinal, lo no es nesesada ce tu carga un plu imajeta.",
+       "file-thumbnail-no": "La nom de fix comensa con <strong>$1</strong>.\nLo pare es un imaje de grandia reduida <em>(imajeta)</em>.\nSi tu ave esta imaje con grandia plen, carga lo; si no, cambia la nom de fix, per favore.",
+       "fileexists-forbidden": "Un fix con esta nom esiste ja, e no pote es suprascriveda.\nSi tu desira ancora carga tua fix, per favore revade e usa un nom nova.\n[[File:$1|thumb|center|$1]]",
+       "fileexists-shared-forbidden": "Un fix con esta nom esiste ja en la arciveria de fixes compartida.\nSi tu desira ancora carga tua fix, per favore revade e usa un nom nova.\n[[File:$1|thumb|center|$1]]",
+       "fileexists-no-change": "La carga es esata identica con la revisa presente de <strong>[[:$1]]</strong>.",
+       "fileexists-duplicate-version": "La carga es esata identica con {{PLURAL:$2|un revisa|revisas}} plu vea de <strong>[[:$1]]</strong>.",
+       "file-exists-duplicate": "Esta fix es identica con la {{PLURAL:$1|fix|fixes}} seguente:",
+       "file-deleted-duplicate": "Un fix identica con esta fix ([[:$1]]) es ja sutraeda.\nTu debe esamina la istoria de sutrae de acel fix ante continua recarga lo.",
+       "file-deleted-duplicate-notitle": "Un fix identica con esta fix es ja sutraeda, e la titulo ia es supresada.\nTu debe demanda a algun ci pote regarda datos supresada de fix ce el esamina la situa ante continua recarga lo.",
+       "uploadwarning": "Averti de carga",
+       "uploadwarning-text": "Per favore, altera la descrive de fix a su e atenta denova.",
        "savefile": "Fisa fix",
+       "uploaddisabled": "Cargas es descomutada.",
+       "copyuploaddisabled": "Cargas par URL es descomutada.",
+       "uploaddisabledtext": "Cargas de fix es descomutada.",
+       "php-uploaddisabledtext": "Cargas de fix es descomutada en PHP.\nEsamina la ajusta file_uploads, per favore.",
+       "uploadscripted": "Esta fix conteni HTML o codigo cual ta pote es noncoreta interpreteda par un surfador.",
+       "upload-scripted-pi-callback": "On no pote carga un fix cual conteni un instrui tratal de folia de stilo XML.",
+       "upload-scripted-dtd": "On no pote carga fixes SVG cual conteni un declara DTD nonormal.",
+       "uploaded-script-svg": "Elemento automatable \"$1\" ia es trovada en la fix SVG cargada.",
+       "uploaded-hostile-svg": "CSS nonsecur ia es trovada en la stilo de la fix SVG cargada.",
+       "uploaded-event-handler-on-svg": "On no permete defini atribuidas per trata avenis <code>$1=\"$2\"</code> en fixes de SVG.",
+       "uploaded-href-attribute-svg": "Atribuidas href en fixes SVG es sola permeteda a lia a adirijes http:// o https://, ma <code>&lt;$1 $2=\"$3\"&gt;</code> ia es trovada.",
+       "uploaded-href-unsafe-target-svg": "Un href a datos nonsecur ia es trovada en la fix SVG cargada: adirije destinal <code>&lt;$1 $2=\"$3\"&gt;</code>.",
+       "uploaded-animate-svg": "Un eticeta \"animate\" cual ta pote cambia href, usante la atribuida \"from\" <code>&lt;$1 $2=\"$3\"&gt;</code>, ia es trovada en la fix SVG cargada.",
+       "uploaded-setting-event-handler-svg": "On proibi la defini de atribuidas per trata avenis, ma <code>&lt;$1 $2=\"$3\"&gt;</code> ia es trovada en la fix SVG cargada.",
+       "uploaded-setting-href-svg": "On proibi usa la eticeta \"set\" per ajunta la atribuida \"href\" a la elemento conteninte.",
+       "uploaded-wrong-setting-svg": "On proibi usa la eticeta \"set\" per ajunta un destina distante o de datos/codigo a cualce atribuida, ma <code>&lt;set to=\"$1\"&gt;</code> ia es trovada en la fix SVG cargada.",
+       "uploaded-setting-handler-svg": "On proibi SVG cual defini la atribuida \"handler\" a distante o datos/codigo, ma <code>$1=\"$2\"</code> ia es trovada en la fix SVG cargada.",
+       "uploaded-remote-url-svg": "On proibi SVG cual defini cualce atribuida de stilo a un URL esterna, ma <code>$1=\"$2\"</code> ia es trovada en la fix SVG cargada.",
+       "uploaded-image-filter-svg": "Filtro de imaje con URL <code>&lt;$1 $2=\"$3\"&gt;</code> ia es trovada en la fix SVG cargada.",
+       "uploadscriptednamespace": "Esta fix SVG conteni un nom de spasio nonvalida \"<nowiki>$1</nowiki>\".",
+       "uploadinvalidxml": "La XML en la fix cargada no ia pote es analiseda.",
+       "uploadvirus": "La fix conteni un virus!\nDetalias: $1",
+       "uploadjava": "La fix es un fix ZIP cual conteni un fix .class de Java.\nOn no permete carga fixes de Java car los pote causa la sircoveni de restrinjes de securia.",
+       "upload-source": "Fix fontal",
+       "sourcefilename": "Nom de fix fontal:",
+       "sourceurl": "URL fontal:",
+       "destfilename": "Nom de fix destinal:",
+       "upload-maxfilesize": "Grandia masima de fix: $1",
+       "upload-description": "Descrive de fix",
+       "upload-options": "Ajustas de carga",
+       "watchthisupload": "Monitori esta fix",
+       "filewasdeleted": "Un fix con esta nom es ja cargada e sutraeda a pos.\nTu debe regarda la $1 ante continua recarga lo.",
+       "filename-thumb-name": "Esta pare es un titulo de imajeta. Per favore, no recarga imajetas a la mesma vici. Si no, per favore, boni la nom de fix afin lo es plu sinifiosa e no ave la prefisa de imajeta.",
+       "filename-bad-prefix": "La nom de la fix cual tu carga comensa con <strong>\"$1\"</strong>, cual es un nom nondescrivente, tipal asiniada en modo automata par cameras dijital.\nPer favore, eleje un nom plu descrivente per tua fix.",
+       "filename-prefix-blacklist": " #<!-- leave this line exactly as it is --> <pre>\n# La sintatica es la seguente:\n#   * Tota testo de un sinia \"#\" asta la fini de la linia es un comenta\n#   * Cada linia nonvacua es un prefisa per nomes de fix tipal asiniada en modo automata par cameras dijital\nCIMG # Casio\nDSC_ # Nikon\nDSCF # Fuji\nDSCN # Nikon\nDUW # alga telefonetas\nIMG # jeneral\nJD # Jenoptik\nMGP # Pentax\nPICT # diversa\n #</pre> <!-- leave this line exactly as it is -->",
+       "upload-proto-error": "Protocol noncoreta",
+       "upload-proto-error-text": "Per carga distante, la URL nesesa comensa con <code>http://</code> o <code>ftp://</code>.",
        "upload-file-error": "Era interna",
+       "upload-file-error-text": "Un era interna ia aveni en atenta crea un fix tempora en la servador.\nPer favore, contata un [[Special:ListUsers/sysop|dirijor]].",
+       "upload-misc-error": "Era nonconoseda de carga",
+       "upload-misc-error-text": "Un era nonconoseda ia aveni en la carga.\nPer favore, serti ce la URL es valida e asedable, e atenta denova.\nSi la problem persiste, contata un [[Special:ListUsers/sysop|dirijor]].",
+       "upload-too-many-redirects": "La URL ia conteni tro multe redirijes",
+       "upload-http-error": "Un era HTTP ia aveni: $1",
+       "upload-copy-upload-invalid-domain": "Cargas copiante no es disponable de esta domina.",
+       "upload-foreign-cant-upload": "Esta vici no es ajustada per carga fixes a la arciveria esterna solisitada.",
+       "upload-foreign-cant-load-config": "La ajusta per cargas de fix no ia pote es cargada a la arciveria esterna.",
+       "upload-dialog-disabled": "Cargas de fix par esta dialogo es descomutada en esta vici.",
+       "upload-dialog-title": "Carga fix",
+       "upload-dialog-button-cancel": "Cansela",
+       "upload-dialog-button-back": "Retro",
+       "upload-dialog-button-done": "Fada",
+       "upload-dialog-button-save": "Fisa",
+       "upload-dialog-button-upload": "Carga",
+       "upload-form-label-infoform-title": "Detalias",
+       "upload-form-label-infoform-name": "Nom",
+       "upload-form-label-infoform-name-tooltip": "Un titulo unica e descrivente per la fix, cual va funsiona como un nom de fix. Tu pote usa linguaje comun con spasios. No inclui la sufisa de fix.",
+       "upload-form-label-infoform-description": "Descrive",
+       "upload-form-label-infoform-description-tooltip": "Descrive corta tota cualias notable de la obra.\nPer un foto, inclui la cosas xef cual es presentada, la aveni o la loca.",
+       "upload-form-label-usage-title": "Usas",
+       "upload-form-label-usage-filename": "Nom de fix",
+       "upload-form-label-own-work": "Esta es mea propre obra",
+       "upload-form-label-infoform-categories": "Categorias",
+       "upload-form-label-infoform-date": "Data",
+       "upload-form-label-own-work-message-generic-local": "Me confirma ce me carga esta fix longo la regulas de servi e la politicas de lisensa de {{SITENAME}}.",
+       "upload-form-label-not-own-work-message-generic-local": "Si tu no pote carga esta fix longo la politicas de {{SITENAME}}, clui esta dialogo e proba un otra metodo, per favore.",
+       "upload-form-label-not-own-work-local-generic-local": "Tu ta pote ance proba [[Special:Upload|la paje xef de carga]].",
+       "upload-form-label-own-work-message-generic-foreign": "Me comprende ce me carga esta fix a un arciveria compartida. Me confirma ce me fa esta longo la regulas de servi e politicas de lisensa ala.",
+       "upload-form-label-not-own-work-message-generic-foreign": "Si tu no pote carga esta fix longo la politicas de la arciveria compartida, clui esta dialogo e proba un otra metodo, per favore.",
+       "upload-form-label-not-own-work-local-generic-foreign": "Tu ta pote ance proba [[Special:Upload|la paje de carga en {{SITENAME}}]], si esta fix pote es cargada ala longo sua politicas.",
+       "backend-fail-stream": "Fix \"$1\" no ia pote es flueda.",
+       "backend-fail-backup": "Fix \"$1\" no ia pote es copiada.",
+       "backend-fail-notexists": "Fix $1 no esiste.",
+       "backend-fail-hashes": "Axis de fix no ia es disponable per compara.",
+       "backend-fail-notsame": "Un fix nonidentica esiste ja a \"$1\".",
+       "backend-fail-invalidpath": "\"$1\" no es un adirije valida.",
+       "backend-fail-delete": "Fix \"$1\" no ia pote es sutraeda.",
+       "backend-fail-describe": "Metadatos per fix \"$1\" no ia pote es cambiada.",
+       "backend-fail-alreadyexists": "La fix \"$1\" esiste ja.",
+       "backend-fail-store": "Fix \"$1\" no ia pote es poneda a \"$2\".",
+       "backend-fail-copy": "Fix \"$1\" no ia pote es copiada a \"$2\".",
+       "backend-fail-move": "Fix \"$1\" no ia pote es moveda a \"$2\".",
+       "backend-fail-opentemp": "Fix tempora no ia pote es abrida.",
+       "backend-fail-writetemp": "Fix tempora no ia pote es scriveda.",
+       "backend-fail-closetemp": "Fix tempora no ia pote es cluida.",
+       "backend-fail-read": "Fix \"$1\" no ia pote es lejeda.",
+       "backend-fail-create": "Fix \"$1\" no ia pote es scriveda.",
+       "backend-fail-maxsize": "Fix \"$1\" no ia pote es scriveda car lo es plu grande ca {{PLURAL:$2|un bait|$2 baites}}.",
+       "backend-fail-readonly": "La conservador \"$1\" es nonscrivable a presente. La razona donada es: <em>$2</em>",
+       "backend-fail-synced": "La fix \"$1\" es en un state noncoerente en la conservadores interna",
+       "backend-fail-connect": "La conservador \"$1\" no ia pote es asededa.",
+       "backend-fail-internal": "Un era nonconoseda ia aveni en conservador \"$1\".",
+       "backend-fail-contenttype": "La tipo de contenida de la fix per pone a \"$1\" no ia pote es determinada.",
+       "backend-fail-batchsize": "La conservador ia reseta un grupo de $1 {{PLURAL:$1|opera|operas}} de fix; la limita es $2 {{PLURAL:$2|opera|operas}}.",
+       "backend-fail-usable": "Fix \"$1\" no ia pote es lejeda o scriveda par causa de permetes nonsufisinte o arcivos/contenadores mancante.",
+       "filejournal-fail-dbconnect": "La banco de jornales per conservador \"$1\" no ia pote es asededa.",
+       "filejournal-fail-dbquery": "La banco de jornales per conservador \"$1\" no ia pote es cambiada.",
+       "lockmanager-notlocked": "\"$1\" no ia pote es desclavida; lo no porta un semafor.",
+       "lockmanager-fail-closelock": "La fix de semafor per \"$1\" no ia pote es cluida.",
+       "lockmanager-fail-deletelock": "La fix de semafor per \"$1\" no ia pote es sutraeda.",
+       "lockmanager-fail-acquirelock": "La semafor per \"$1\" no ia pote es otenida.",
+       "lockmanager-fail-openlock": "La fix de semafor per \"$1\" no ia pote es abrida.",
+       "lockmanager-fail-releaselock": "La semafor per \"$1\" no ia pote es relasada.",
+       "lockmanager-fail-db-bucket": "Tro poca bancos de semafor ia pote es contatada en balde $1.",
+       "lockmanager-fail-db-release": "Semafores per banco de datos $1 no ia pote es relasada.",
+       "lockmanager-fail-svr-acquire": "Semafores per banco de datos $1 no ia pote es otenida.",
+       "lockmanager-fail-svr-release": "Semafores per servador $1 no ia pote es relasada.",
+       "zip-file-open-error": "Un era ia aveni en abri la fix ZIP per esamina.",
+       "zip-wrong-format": "La fix spesifada no ia es un fix ZIP.",
+       "zip-bad": "La fix ZIP es malida o nonlejable.\nOn no pote esamina bon lo per securia.",
+       "zip-unsupported": "La fix ZIP usa cualias ZIP cual MediaWiki no suporta.\nOn no pote esamina bon lo per securia.",
+       "uploadstash": "Cargas pendente",
+       "uploadstash-summary": "Esta paje permete asede fixes cual es cargada o cargante, ma es ancora no publicida en la vici. Esta fixes es vidable sola a la usor ci ia carga los.",
+       "uploadstash-clear": "Vacui fixes pendente",
+       "uploadstash-nofiles": "Tu ave no fixes pendente.",
+       "uploadstash-badtoken": "Acel ata ia fali, cisa car tua identia ia desvalidi. Atenta denova, per favore.",
+       "uploadstash-errclear": "La vacui de la fixes ia fali.",
+       "uploadstash-refresh": "Refresci la lista de fixes",
+       "uploadstash-thumbnail": "regarda imajeta",
+       "uploadstash-exception": "Carga no ia pote es ajuntada a la cargas pendente ($1): \"$2\".",
+       "invalid-chunk-offset": "Bloco con numero nonvalida",
+       "img-auth-accessdenied": "Nonasedable",
+       "img-auth-nopathinfo": "PATH_INFO manca.\nTua servador no es ajustada per envia esta informa.Cisa lo usa CGI e no pote suporta img_auth.\nVide https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:Image_Authorization.",
+       "img-auth-notindir": "La adirije solisitada no es en la arcivo definida per cargas.",
+       "img-auth-badtitle": "Un titulo valida no ia pote es construida de \"$1\".",
+       "img-auth-nologinnWL": "Tu no es autenticida e \"$1\" no es en la lista blanca.",
+       "img-auth-nofile": "Fix \"$1\" no esiste.",
+       "img-auth-isdir": "Tu atenta asede un arcivo \"$1\".\nSola asede de fixes es permeteda.",
+       "img-auth-streaming": "\"$1\" flue.",
+       "img-auth-public": "La funsiona de img_auth.php es la esflue de fixes de un vici privata.\nEsta vici es definida como un vici publica.\nPer securia, img_auth.php es descomutada.",
+       "img-auth-noread": "La usor no pote asede per leje \"$1\".",
+       "http-invalid-url": "URL nonvalida: $1",
+       "http-invalid-scheme": "URLes con scema \"$1\" no es suportada.",
+       "http-request-error": "Fali de solisita HTTP con era nonconoseda.",
+       "http-read-error": "Era HTTP de leje.",
+       "http-timed-out": "Abandona de solisita HTTP.",
+       "http-curl-error": "Era en retrae URL: $1",
+       "http-bad-status": "Un problem ia aveni en la solisita HTTP: $1 $2",
+       "upload-curl-error6": "URL nonasedable",
+       "upload-curl-error6-text": "La URL spesifada no ia pote es asededa.\nPer favore, serti ce la URL es coreta e ce la pajeria funsiona.",
+       "upload-curl-error28": "Abandona de carga",
+       "upload-curl-error28-text": "La pajeria ia pasa tro multe tempo en responde.\nPer favore, serti ce la pajeria funsiona, pausa per un tempo corta e atenta denova.\nCisa tu ta reatenta a un ora min ocupada.",
        "license": "Lisensa:",
        "license-header": "Lisensa",
+       "nolicense": "No eleje",
+       "licenses-edit": "Edita preferes de lisensa",
+       "license-nopreview": "(Previde nondisponable)",
+       "upload_source_url": "(tua fix elejeda de un URL valida e publica asedable)",
+       "upload_source_file": "(tua fix elejeda de tua computador)",
+       "listfiles-delete": "sutrae",
+       "listfiles-summary": "Esta paje spesial mostra tota fixes cargada.",
+       "listfiles_search_for": "Xerca nom de media:",
+       "listfiles-userdoesnotexist": "Conta de usor \"$1\" no es rejistrada.",
        "imgfile": "fix",
        "listfiles": "Lista de fixes",
+       "listfiles_thumb": "Imajeta",
+       "listfiles_date": "Data",
        "listfiles_name": "Nom",
+       "listfiles_user": "Usor",
+       "listfiles_size": "Grandia",
+       "listfiles_description": "Descrive",
+       "listfiles_count": "Revisas",
+       "listfiles-show-all": "Inclui revisas vea de imajes",
+       "listfiles-latestversion": "Revisa presente",
+       "listfiles-latestversion-yes": "Si",
+       "listfiles-latestversion-no": "No",
        "file-anchor-link": "Fix",
        "filehist": "Istoria de fix",
-       "filehist-help": "Clica un data/tempo per vide la fix en sua forma de alora.",
+       "filehist-help": "Clica un data/ora per vide la fix en sua forma de alora.",
+       "filehist-deleteall": "sutrae tota",
+       "filehist-deleteone": "sutrae",
        "filehist-revert": "reversa",
        "filehist-current": "aora",
-       "filehist-datetime": "Data/Tempo",
+       "filehist-datetime": "Data/Ora",
        "filehist-thumb": "Imajeta",
-       "filehist-thumbtext": "Imajeta per varia de $1",
+       "filehist-thumbtext": "Imajeta per revisa de $1",
        "filehist-nothumb": "No imajeta",
        "filehist-user": "Usor",
        "filehist-dimensions": "Mesuras",
        "linkstoimage": "La {{PLURAL:$1|paje|pajes}} seguente lia a esta fix:",
        "linkstoimage-more": "Plu ca $1 {{PLURAL:$1|paje|pajes}} lia a esta fix.\nLa lista seguente mostra sola la {{PLURAL:$1|lia|$1 lias}} prima a esta fix.\nUn [[Special:WhatLinksHere/$2|lista completa]] es disponable.",
        "nolinkstoimage": "No pajes lia a esta fix.",
+       "morelinkstoimage": "Regarda [[Special:WhatLinksHere/$1|plu lias]] a esta fix.",
        "linkstoimage-redirect": "$1 (redirije de fix) $2",
-       "sharedupload": "Esta fix es parte de $1 e pote es usada par otra projetas.",
-       "sharedupload-desc-here": "Esta fix es de $1 e es cisa usada par otra projetas.\nLa descrive en sua [$2 paje de descrive de fix] ala es mostrada a su.",
+       "duplicatesoffile": "La {{PLURAL:$1|fix|fixes}} seguente es identica con esta fix ([[Special:FileDuplicateSearch/$2|plu detalias]]):",
+       "sharedupload": "Esta fix veni de $1 e es cisa usada par otra projetas.",
+       "sharedupload-desc-there": "Esta fix veni de $1 e es cisa usada par otra projetas.\nVide la [$2 paje de descrive de fix] per plu informas, per favore.",
+       "sharedupload-desc-here": "Esta fix veni de $1 e es cisa usada par otra projetas.\nLa descrive en sua [$2 paje de descrive de fix] ala es mostrada a su.",
+       "sharedupload-desc-edit": "Esta fix veni de $1 e es cisa usada par otra projetas.\nCisa tu vole edita la descrive en sua [$2 paje de descrive de fix] ala.",
+       "sharedupload-desc-create": "Esta fix veni de $1 e es cisa usada par otra projetas.\nCisa tu vole edita la descrive en sua [$2 paje de descrive de fix] ala.",
        "filepage-nofile": "No fix con esta nom esiste.",
-       "uploadnewversion-linktext": "Envia un varia nova de esta fix",
-       "upload-disallowed-here": "Tu no pote recambia esta arcivo.",
-       "mimesearch": "Xerca de MIME",
-       "listredirects": "Lista redirijes",
-       "unusedtemplates": "modeles no usada",
+       "filepage-nofile-link": "No fix con esta nom esiste, ma tu pote [$1 carga lo].",
+       "uploadnewversion-linktext": "Envia un revisa nova de esta fix",
+       "shared-repo-from": "de $1",
+       "shared-repo": "un arciveria compartida",
+       "upload-disallowed-here": "Tu no pote suprascrive esta fix.",
+       "filerevert": "Reversa $1",
+       "filerevert-legend": "Reversa fix",
+       "filerevert-intro": "Tu es a punto de reversa la fix <strong>[[Media:$1|$1]]</strong> a la [$4 revisa de $3, $2].",
+       "filerevert-comment": "Razona:",
+       "filerevert-defaultcomment": "Reversada a revisa de $2, $1 ($3)",
+       "filerevert-submit": "Reversa",
+       "filerevert-success": "<strong>[[Media:$1|$1]]</strong> ia es reversada a la [$4 revisa de $3, $2].",
+       "filerevert-badversion": "No revisa local pasada esiste de esta fix con la indica de ora spesifada.",
+       "filerevert-identical": "La revisa presente de la fix es ja identica con la elejeda.",
+       "filedelete": "Sutrae $1",
+       "filedelete-legend": "Sutrae fix",
+       "filedelete-intro": "Tu es a punto de sutrae la fix <strong>[[Media:$1|$1]]</strong> con tota sua istoria.",
+       "filedelete-intro-old": "Tu sutrae la revisa de <strong>[[Media:$1|$1]]</strong> de [$4 $3, $2].",
+       "filedelete-comment": "Razona:",
+       "filedelete-submit": "Sutrae",
+       "filedelete-success": "<strong>$1</strong> es sutraeda.",
+       "filedelete-success-old": "La revisa de <strong>[[Media:$1|$1]]</strong> de $3, $2 es sutraeda.",
+       "filedelete-nofile": "<strong>$1</strong> no esiste.",
+       "filedelete-nofile-old": "No revisa arcivida de <strong>$1</strong> esiste con la atribuidas spesifada.",
+       "filedelete-otherreason": "Otra/plu razona:",
+       "filedelete-reason-otherlist": "Otra razona:",
+       "filedelete-reason-dropdown": "*Razonas comun per sutrae\n** Viole de diretos de autor\n** Fix duplida",
+       "filedelete-edit-reasonlist": "Edita razonas per sutrae",
+       "filedelete-maintenance": "La sutrae e restora de fixes es tempora descomutada per manteni.",
+       "filedelete-maintenance-title": "Fix no pote es sutraeda",
+       "mimesearch": "Xerca MIME",
+       "mimesearch-summary": "Esta paje permete filtri fixes longo sua tipo MIME.\nEnflue: tipo/sutipo o tipo/*, pe <code>image/jpeg</code>.",
+       "mimetype": "Tipo MIME:",
+       "download": "descarga",
+       "unwatchedpages": "Pajes nonmonitorida",
+       "listredirects": "Lista de redirijes",
+       "listduplicatedfiles": "Lista de fixes jemelo",
+       "listduplicatedfiles-summary": "Esta es un lista de fixes de cual sua revisa la plu resente es identica con la revisa la plu resente de alga otra fix. Sola fixes local es considerada.",
+       "listduplicatedfiles-entry": "[[:File:$1|$1]] ave [[$3|{{PLURAL:$2|un jemelo|$2 jemelos}}]].",
+       "unusedtemplates": "modeles nonusada",
+       "unusedtemplatestext": "Esta paje lista tota pajes en la spasio de nom {{ns:template}} cual no es incluida en un otra paje.\nNo oblida esplora otra lias a la stensiles ante sutrae los.",
+       "unusedtemplateswlh": "otra lias",
        "randompage": "Paje acaso",
+       "randompage-nopages": "No pajes esiste en la {{PLURAL:$2|spasio|spasios}} de nom seguente: $1.",
+       "randomincategory": "Paje acaso en categoria",
+       "randomincategory-invalidcategory": "\"$1\" no es un nom valida de categoria.",
+       "randomincategory-nopages": "No pajes esiste en la categoria [[:Category:$1|$1]].",
+       "randomincategory-category": "Categoria:",
+       "randomincategory-legend": "Paje acaso en categoria",
+       "randomincategory-submit": "Vade",
        "randomredirect": "Redirije acaso",
+       "randomredirect-nopages": "No redirijes esiste en la spasio de nom \"$1\".",
        "statistics": "Statisticas",
+       "statistics-header-pages": "Statisticas de paje",
+       "statistics-header-edits": "Edita statisticas",
+       "statistics-header-users": "Statisticas de usor",
+       "statistics-header-hooks": "Otra statisticas",
+       "statistics-articles": "Pajes de contenida",
+       "statistics-pages": "Pajes",
+       "statistics-pages-desc": "Tota pajes en la vici, incluinte pajes de discute, redirijes, etc.",
+       "statistics-files": "Fixes cargada",
+       "statistics-edits": "Editas de pajes de pos la inisia de {{SITENAME}}",
+       "statistics-edits-average": "Editas promedia per paje",
+       "statistics-users": "[[Special:ListUsers|Usores]] rejistrada",
+       "statistics-users-active": "Usores ativa",
+       "statistics-users-active-desc": "Usores ci ia fa un ata en la {{PLURAL:$1|dia|$1 dias}} la plu resente",
+       "pageswithprop": "Pajes con atribuidas de paje",
+       "pageswithprop-legend": "Pajes con atribuidas de paje",
+       "pageswithprop-text": "Esta paje lista pajes cual usa un atribuida spesifada de paje.",
+       "pageswithprop-prop": "Nom de atribuida:",
+       "pageswithprop-reverse": "Reversa la ordina",
+       "pageswithprop-sortbyvalue": "Ordina per valua de atribuida",
+       "pageswithprop-submit": "Vade",
+       "pageswithprop-prophidden-long": "valua de testo longa ascondeda ($1)",
+       "pageswithprop-prophidden-binary": "valua binaria ascondeda ($1)",
        "doubleredirects": "Redirijes duple",
+       "doubleredirectstext": "Esta paje lista pajes cual redirije a otra pajes redirijente.\nCada linia conteni linias a la redirije prima e du, como ance la gol de la redirije du, cual es usual la paje \"vera\" a cual la redirije prima debe punta.\nEntradas <del>barida</del> es ja solveda.",
+       "double-redirect-fixed-move": "[[$1]] es moveda.\nLo ia es automata cambiada e aora lo redirije a [[$2]].",
+       "double-redirect-fixed-maintenance": "Automata reparante redirije duple de [[$1]] a [[$2]] en taxe de manteni.",
        "double-redirect-fixer": "Reparor de redirijes",
        "brokenredirects": "Redirijes rompeda",
+       "brokenredirectstext": "La redirijes seguente lia a pajes nonesistente:",
+       "brokenredirects-edit": "edita",
+       "brokenredirects-delete": "sutrae",
        "withoutinterwiki": "Pajes sin lias de lingua",
-       "fewestrevisions": "Pajes con la min revides",
+       "withoutinterwiki-summary": "La pajes seguente no lia a varias en otra linguas.",
+       "withoutinterwiki-legend": "Prefisa",
+       "withoutinterwiki-submit": "Mostra",
+       "fewestrevisions": "Pajes con la min revisas",
        "nbytes": "$1 {{PLURAL:$1|bait|baites}}",
+       "ncategories": "$1 {{PLURAL:$1|categoria|categorias}}",
+       "ninterwikis": "$1 {{PLURAL:$1|intervical|intervicales}}",
        "nlinks": "$1 {{PLURAL:$1|lia|lias}}",
        "nmembers": "$1 {{PLURAL:$1|membro|membros}}",
+       "nmemberschanged": "$1 → $2 {{PLURAL:$2|membro|membros}}",
+       "nrevisions": "$1 {{PLURAL:$1|revisa|revisas}}",
+       "nimagelinks": "Usada a $1 {{PLURAL:$1|paje|pajes}}",
+       "ntransclusions": "usada a $1 {{PLURAL:$1|paje|pajes}}",
+       "specialpage-empty": "No resultas esiste per esta reporta.",
        "lonelypages": "Pajes orfanida",
-       "uncategorizedpages": "Pajes sin categoria",
-       "uncategorizedcategories": "Categorias sin categoria",
-       "uncategorizedimages": "Fixes sin categoria",
-       "uncategorizedtemplates": "Modeles sin categoria",
+       "lonelypagestext": "La pajes seguente no es liada de o transcluida en otra pajes en {{SITENAME}}.",
+       "uncategorizedpages": "Pajes noncategorida",
+       "uncategorizedcategories": "Categorias noncategorida",
+       "uncategorizedimages": "Fixes noncategorida",
+       "uncategorizedtemplates": "Stensiles noncategorida",
+       "uncategorized-categories-exceptionlist": " # Conteni un lista de categorias, cual no debe es listada en Special:UncategorizedCategories. Un per linia, comensante con \"*\". Linias cual comensa con cualce otra sinia (incluinte spasios) es iniorada. Usa \"#\" per comentas.",
        "unusedcategories": "Categorias nonusada",
-       "unusedimages": "Images nonusada",
-       "wantedcategories": "Categorias desireda",
+       "unusedimages": "Fixes nonusada",
+       "wantedcategories": "Categorias desirada",
        "wantedpages": "Pajes desirada",
+       "wantedpages-summary": "Lista de pajes nonesistente cual ave la plu lias a se, escluinte pajes cual ave sola redirijedas a se. Per un lista de pajes nonesistente cual ave redirijes liante a se, vide [[{{#special:BrokenRedirects}}|la lista de redirijes rompeda]].",
+       "wantedpages-badtitle": "Titulo nonvalida en resultas: $1",
+       "wantedfiles": "Fixes desirada",
+       "wantedfiletext-cat": "La fixes seguente es usada ma no esiste. Fixes de arciverias esterna es cisa listada an si los esiste. Cualce tal positivas falsa es <del>barida</del>. En ajunta, pajes cual conteni fixes cual no esiste es listada en [[:$1]].",
+       "wantedfiletext-cat-noforeign": "La fixes seguente es usada ma no esiste. En ajunta, pajes cual conteni fixes cual no esiste es listada en [[:$1]].",
+       "wantedfiletext-nocat": "La fixes seguente es usada ma no esiste. Fixes de arciverias esterna es cisa listada an si los esiste. Cualce tal positivas falsa es <del>barida</del>.",
+       "wantedfiletext-nocat-noforeign": "La fixes seguente es usada ma no esiste.",
+       "wantedtemplates": "Stensiles desirada",
        "mostlinked": "Pajes la plu liada",
-       "mostlinkedcategories": "Categorias a ce es la plu lias",
-       "mostlinkedtemplates": "Pajes la plu liada",
+       "mostlinkedcategories": "Categorias la plu liada",
+       "mostlinkedtemplates": "Pajes la plu transcluida",
        "mostcategories": "Pajes con la plu categorias",
-       "mostimages": "Fixes a ce es la plu lias",
+       "mostimages": "Fixes la plu liada",
+       "mostinterwikis": "Pajes con la plu intervicales",
        "mostrevisions": "Pajes con la plu revisas",
        "prefixindex": "Tota pajes con prefisa",
+       "prefixindex-namespace": "Tota pajes con prefisa (spasio de nom $1)",
+       "prefixindex-submit": "Mostra",
+       "prefixindex-strip": "Asconde prefisa en lista",
        "shortpages": "Pajes corta",
        "longpages": "Pajes longa",
        "deadendpages": "Pajes sin sorti",
+       "deadendpagestext": "La pajes seguente no lia a otra pajes en {{SITENAME}}.",
        "protectedpages": "Pajes protejeda",
+       "protectedpages-indef": "Sola protejes nunca desvalidinte",
+       "protectedpages-summary": "Esta paje lista pajes esistente cual es protejeda a presente. Per un lista de titulos cual es protejeda contra crea, vide [[{{#special:ProtectedTitles}}|{{int:protectedtitles}}]].",
+       "protectedpages-cascade": "Sola protejes cascadin",
+       "protectedpages-noredirect": "Asconde redirijes",
+       "protectedpagesempty": "No pajes es protejeda con esta parametres a presente.",
+       "protectedpages-timestamp": "Indica de ora",
        "protectedpages-page": "Paje",
        "protectedpages-expiry": "Desvalidi",
+       "protectedpages-performer": "Usor protejente",
+       "protectedpages-params": "Parametres de proteje",
+       "protectedpages-reason": "Razona",
+       "protectedpages-submit": "Mostra pajes",
+       "protectedpages-unknown-timestamp": "Nonconoseda",
+       "protectedpages-unknown-performer": "Usor nonconoseda",
+       "protectedtitles": "Titulos protejeda",
+       "protectedtitles-summary": "Esta paje lista titulos cual es protejeda contra crea a presente. Per un lista de pajes esistente cual es protejeda, vide [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitlesempty": "No titulos es protejeda con esta parametres a presente.",
+       "protectedtitles-submit": "Mostra titulos",
        "listusers": "Lista de usores",
+       "listusers-editsonly": "Mostra sola usores con editas",
+       "listusers-creationsort": "Ordina per data de crea",
+       "listusers-desc": "Ordina desendente",
+       "usereditcount": "$1 {{PLURAL:$1|edita|editas}}",
+       "usercreated": "{{GENDER:$3|Creada}} a $1 a $2",
        "newpages": "Pajes nova",
+       "newpages-submit": "Mostra",
+       "newpages-username": "Nom de usor:",
        "ancientpages": "Pajes la plu vea",
        "move": "Move",
        "movethispage": "Move esta paje",
-       "unusedimagestext": "<p>Nota ce otra locas de rede pote lia a un imaje con un URL direta, e donce el pote continua es listada asi contra ce el es usada ativa.</p>",
-       "unusedcategoriestext": "La categorias seguente esiste sin es usada par otra articles o categorias.",
+       "unusedimagestext": "La fixes seguente esiste ma no apare en un paje.\nPer favore, nota ce otra pajerias pote usa un URL direta per lia a un imaje, donce los pote continua es listada asi an si vera usada.",
+       "unusedcategoriestext": "La categorias seguente esiste, an si no otra paje o categoria usa los.",
+       "notargettitle": "No destina",
+       "notargettext": "Tu no ia spesifa un paje o usor a cual esta funsiona va aplica.",
+       "nopagetitle": "No tal paje destinal",
+       "nopagetext": "La paje destinal cual tu ia spesifa no esiste.",
        "pager-newer-n": "{{PLURAL:$1|1 plu resente|$1 plu resentes}}",
        "pager-older-n": "{{PLURAL:$1|1 plu vea|$1 plu veas}}",
+       "suppress": "Supresa",
+       "querypage-disabled": "Esta paje spesial es descomutada per razonas de nonperosia.",
+       "apihelp": "Aida de API",
+       "apihelp-no-such-module": "Modulo \"$1\" no ia es trovada.",
+       "apisandbox": "Caxa de arena API",
+       "apisandbox-jsonly": "JavaScript es nesesada per la usa de la caxa de arena.",
+       "apisandbox-api-disabled": "La API es descomutada en esta pajeria.",
+       "apisandbox-intro": "Usa esta paje per esperimenta con la <strong>API MediaWiki per servis de ueb</strong>.\nConsulta [[mw:API:Main page|la documentos de API]] per plu detalias de la usa de la API. Esemplo: [https://www.mediawiki.org/wiki/API#A_simple_example retrae la contenida de un Paje Xef]. Eleje un ata per vide plu esemplos.\n\nNota ce, an si esta es un caxa de arena, atas cual tu fa en esta paje pote afeta la vici.",
+       "apisandbox-fullscreen": "Crese panel",
+       "apisandbox-fullscreen-tooltip": "Crese la caxa de arena per pleni la fenetra de surfador.",
+       "apisandbox-unfullscreen": "Mostra paje",
+       "apisandbox-unfullscreen-tooltip": "Redui la caxa de arena per vide lias navigal de MediaWiki.",
+       "apisandbox-submit": "Fa solisita",
+       "apisandbox-reset": "Vacui",
+       "apisandbox-retry": "Reatenta",
+       "apisandbox-loading": "Cargante informas de modulo API \"$1\"...",
+       "apisandbox-load-error": "Un era ia aveni en carga informas de modulo API \"$1\": $2",
+       "apisandbox-no-parameters": "Esta modulo de API ave no parametres.",
+       "apisandbox-helpurls": "Lias de aida",
+       "apisandbox-examples": "Esemplos",
+       "apisandbox-dynamic-parameters": "Parametres ajuntada",
+       "apisandbox-dynamic-parameters-add-label": "Ajunta parametre:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Nom de parametre:",
+       "apisandbox-dynamic-error-exists": "Un parametre nomida \"$1\" esiste ja.",
+       "apisandbox-deprecated-parameters": "Parametres desaprobada",
+       "apisandbox-fetch-token": "Autopleni la marca",
+       "apisandbox-submit-invalid-fields-title": "Alga campos es nonvalida",
+       "apisandbox-submit-invalid-fields-message": "Coreti la campos indicada, per favore, e reatenta.",
+       "apisandbox-results": "Resultas",
+       "apisandbox-sending-request": "Enviante solisita API...",
+       "apisandbox-loading-results": "Resetante resultas de API...",
+       "apisandbox-results-error": "Un era ia aveni en carga la responde de la solisita API: $1",
+       "apisandbox-results-login-suppressed": "Esta solisita ia es tratada como un usor nonautenticida, car lo ta pote es usada per sircoveni la securia de Mesma Orijina. Nota ce la trata automata de marcas par la caxa de arena API no funsiona bon con tal solisitas: completi los par mano, per favore.",
+       "apisandbox-request-selectformat-label": "Mostra datos de solisita como:",
+       "apisandbox-request-format-url-label": "Cadena demandal de URL",
+       "apisandbox-request-url-label": "URL de solisita:",
+       "apisandbox-request-json-label": "Solisita JSON:",
+       "apisandbox-request-time": "Solisita tempo: {{PLURAL:$1|$1 ms}}",
+       "apisandbox-results-fixtoken": "Coreti marca e reenvia",
+       "apisandbox-results-fixtoken-fail": "La marca \"$1\" no ia pote es retraeda.",
+       "apisandbox-alert-page": "Campos en esta paje no es valida.",
+       "apisandbox-alert-field": "La valua de esta campo no es valida.",
+       "apisandbox-continue": "Continua",
+       "apisandbox-continue-clear": "Vacui",
+       "apisandbox-continue-help": "{{int:apisandbox-continue}} va [https://www.mediawiki.org/wiki/API:Query#Continuing_queries continua] la solisita la plu resente; {{int:apisandbox-continue-clear}} va vacui parametres relatada a continua.",
+       "apisandbox-param-limit": "Entra <kbd>max</kbd> per usa la limita masima.",
+       "apisandbox-multivalue-all-namespaces": "$1 (Tota spasios de nom)",
+       "apisandbox-multivalue-all-values": "$1 (Tota valuas)",
        "booksources": "Fontes de libros",
        "booksources-search-legend": "Xerca fontes de libros",
        "booksources-search": "Xerca",
+       "booksources-text": "A su es un lista de lias a otra pajerias cual vende libros nova e usada, e cual ave cisa plu informas sur libros cual tu xerca:",
+       "booksources-invalid-isbn": "La ISBN spesifada no pare valida; serti ce eras no ia es fada en copia de la fonte orijinal.",
+       "magiclink-tracking-rfc": "Pajes usante lias majiosa RFC",
+       "magiclink-tracking-rfc-desc": "Esta paje usa lias majiosa RFC. Vide [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] sur modos de migra.",
+       "magiclink-tracking-pmid": "Pajes usante lias majiosa PMID",
+       "magiclink-tracking-pmid-desc": "Esta paje usa lias majiosa PMID. Vide [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] sur modos de migra.",
+       "magiclink-tracking-isbn": "Pajes usante lias majiosa ISBN",
+       "magiclink-tracking-isbn-desc": "Esta paje usa lias majiosa ISBN. Vide [https://www.mediawiki.org/wiki/Special:MyLanguage/Help:Magic_links mediawiki.org] sur modos de migra.",
        "specialloguserlabel": "Faor:",
        "speciallogtitlelabel": "Ojeto (titulo o {{ns:usor}}:Nom per un usor):",
        "log": "Arcivos",
+       "logeventslist-submit": "Mostra",
        "all-logs-page": "Tota arcivos publica",
        "alllogstext": "Un presenta combinada de tota arcivos disponable de {{SITENAME}}. On pote restrinje la presenta par eleje un tipo de arcivo, la nom de usor (distinguinte leteras major), o la paje afetada (ance distinguinte leteras major).",
-       "logempty": "No operas corespondente en la arcivos.",
+       "logempty": "No entradas corespondente en la rejistra.",
+       "log-title-wildcard": "Xerca titulos cual comensa con esta testo",
+       "showhideselectedlogentries": "Cambia vidablia de entradas elejeda",
+       "log-edit-tags": "Edita eticetas de entradas elejeda",
+       "checkbox-select": "Eleje: $1",
+       "checkbox-all": "Tota",
+       "checkbox-none": "Zero",
+       "checkbox-invert": "Inversa",
        "allpages": "Tota pajes",
        "nextpage": "Paje seguente ($1)",
        "prevpage": "Paje presedente ($1)",
        "allpagesfrom": "Mostra pajes comensante a:",
+       "allpagesto": "Mostra pajes fininte a:",
        "allarticles": "Tota pajes",
+       "allinnamespace": "Tota pajes (spasio de nom $1)",
        "allpagessubmit": "Vade",
-       "allpagesprefix": "Mostra pajes con prefis:",
+       "allpagesprefix": "Mostra pajes con prefisa:",
+       "allpagesbadtitle": "La titulo de paje spesifada ia es nonvalida o ia ave un prefisa interlingual o intervical.\nCisa lo conteni un o plu sinias cual on no pote usa en titulos.",
+       "allpages-bad-ns": "{{SITENAME}} no ave spasio de nom \"$1\".",
        "allpages-hide-redirects": "Asconde redirijes",
+       "cachedspecial-viewing-cached-ttl": "Tu regarda un varia prememorida de esta paje, cual pote es nonfresca par asta $1.",
+       "cachedspecial-viewing-cached-ts": "Tu regarda un varia prememorida de esta paje, cual es cisa no intera corente.",
+       "cachedspecial-refresh-now": "Regarda la plu resente.",
        "categories": "Categorias",
-       "categoriespagetext": "Es la categorias seguente en la vici.\n[[Special:UnusedCategories|Unused categories]] are not shown here.\nAlso see [[Special:WantedCategories|wanted categories]].",
+       "categories-submit": "Mostra",
+       "categoriespagetext": "La {{PLURAL:$1|categoria|categorias}} conteni pajes o medias.\n[[Special:UnusedCategories|Categorias nonusada]] no es mostrada asi.\nVide ance [[Special:WantedCategories|categorias desirada]].",
+       "categoriesfrom": "Mostra categorias comensante a:",
+       "deletedcontributions": "Contribuis sutraeda",
+       "deletedcontributions-title": "Contribuis sutraeda",
+       "sp-deletedcontributions-contribs": "contribuis",
+       "linksearch": "Xerca lias esterna",
+       "linksearch-pat": "Motif de xerca:",
+       "linksearch-ns": "Spasio de nom:",
        "linksearch-ok": "Xerca",
+       "linksearch-text": "Bufones como \"*.wikipedia.org\" pote es usada.\nA la min un domina de nivel xef es nesesada, per esemplo \"*.org\".<br />\n{{PLURAL:$2|Protocol|Protocoles}} suportada: $1 (http:// es usada si on no spesifa un protocol).",
+       "linksearch-line": "$1 es liada de $2",
+       "linksearch-error": "Bufones pote apare sola a la comensa de la nom de servador.",
+       "listusersfrom": "Mostra usores comensante a:",
+       "listusers-submit": "Mostra",
+       "listusers-noresult": "No usor trovada.",
+       "listusers-blocked": "(impedida)",
+       "activeusers": "Lista ativa de usores",
+       "activeusers-intro": "Esta es un lista de usores ci ia es ativa en alga modo en la {{PLURAL:$1|dia|dias}} la plu resente.",
+       "activeusers-count": "$1 {{PLURAL:$1|ata|atas}} en la {{PLURAL:$3|dia|$3 dias}} la plu resente.",
+       "activeusers-from": "Mostra usores comensante a:",
+       "activeusers-groups": "Mostra usores parteninte a grupos:",
+       "activeusers-excludegroups": "Esclui usores parteninte a grupos:",
+       "activeusers-noresult": "No usores trovada.",
+       "activeusers-submit": "Mostra usores ativa",
+       "listgrouprights": "Diretos de grupo de usor",
+       "listgrouprights-summary": "La seguente es un lista de grupos de usor definida en esta vici, con sua diretos asosiada de asede.\nCisa [[{{MediaWiki:Listgrouprights-helppage}}|plu informa]] es disponable sur diretos individua.",
+       "listgrouprights-key": "Esplica:\n* <span class=\"listgrouprights-granted\">Direto donada</span>\n* <span class=\"listgrouprights-revoked\">Direto canselada</span>",
        "listgrouprights-group": "Grupo",
+       "listgrouprights-rights": "Diretos",
+       "listgrouprights-helppage": "Help:Diretos de grupo",
        "listgrouprights-members": "(lista de membros)",
-       "emailuser": "Envia un e-posta a esta usor",
+       "listgrouprights-addgroup": "Ajunta {{PLURAL:$2|grupo|grupos}}: $1",
+       "listgrouprights-removegroup": "Sutrae {{PLURAL:$2|grupo|grupos}}: $1",
+       "listgrouprights-addgroup-all": "Ajunta tota grupos",
+       "listgrouprights-removegroup-all": "Sutrae tota grupos",
+       "listgrouprights-addgroup-self": "Ajunta {{PLURAL:$2|grupo|grupos}} a propre conta: $1",
+       "listgrouprights-removegroup-self": "Sutrae {{PLURAL:$2|grupo|grupos}} de propre conta: $1",
+       "listgrouprights-addgroup-self-all": "Ajunta tota grupos a propre conta",
+       "listgrouprights-removegroup-self-all": "Sutrae tota grupos de propre conta",
+       "listgrouprights-namespaceprotection-header": "Restrinjes de spasio de nom",
+       "listgrouprights-namespaceprotection-namespace": "Spasio de nom",
+       "listgrouprights-namespaceprotection-restrictedto": "Direto(s) permetente editas par usor",
+       "listgrants": "Permetes",
+       "listgrants-summary": "La seguente es un lista de permetes con sua diretos asosiada de asede. Usores pote autori programes a usa sua conta, ma con permetes limitada, fundida sur la permetes cual la usor dona a la program. Ma un program cual funsiona per un usor no pote usa diretos cual la usor no ave.\nCisa [[{{MediaWiki:Listgrouprights-helppage}}|plu informa]] es disponable sur diretos individua.",
+       "listgrants-grant": "Permete",
+       "listgrants-rights": "Diretos",
+       "trackingcategories": "Categorias manejal",
+       "trackingcategories-summary": "Esta paje lista categorias manejal cual es automata poplada par la programes de MediaWiki. On pote cambia sua nomes par altera la mesajes pertinente de sistem en la spasio de nom {{ns:8}}.",
+       "trackingcategories-msg": "Categoria manejal",
+       "trackingcategories-name": "Nom de mesaje",
+       "trackingcategories-desc": "Criterios per inclui en categoria",
+       "restricted-displaytitle-ignored": "Pajes con DISPLAYTITLE iniorada",
+       "restricted-displaytitle-ignored-desc": "La paje ave un <code><nowiki>{{DISPLAYTITLE}}</nowiki></code> iniorada car lo no coresponde a la titulo vera de la paje.",
+       "noindex-category-desc": "La paje no es catalogida par robotes car lo conteni la parola majiosa <code><nowiki>__NOINDEX__</nowiki></code> e es en un spasio de nom do on no permete acel marca.",
+       "index-category-desc": "La paje conteni la parola majiosa <code><nowiki>__NOINDEX__</nowiki></code> (e es en un spasio de nom do on permete acel marca), e donce es catalogida par robotes an si esta no ta aveni normal.",
+       "post-expand-template-inclusion-category-desc": "La paje es plu grande ca <code>$wgMaxArticleSize</code> pos estende tota la stensiles, donce alga stensiles no ia es estendeda.",
+       "post-expand-template-argument-category-desc": "La paje es plu grande ca <code>$wgMaxArticleSize</code> pos estende un parametre de stensil (alga cosa en brasetas risa truple, como <code>{{{Foo}}}</code>).",
+       "expensive-parserfunction-category-desc": "La paje usa tro multe funsionas custosa de analisador (como <code>#ifexist</code>). Vide [https://www.mediawiki.org/wiki/Special:MyLanguage/Manual:$wgExpensiveParserFunctionLimit Manual:$wgExpensiveParserFunctionLimit].",
+       "broken-file-category-desc": "La paje conteni un lia rompeda de fix (un lia per mostra un fix cuando la fix no esiste).",
+       "hidden-category-category-desc": "La categoria conteni <code><nowiki>__HIDDENCAT__</nowiki></code> en sua contenida de paje, cual preveni ce lo apare inisial en la caxa de lias de categoria en pajes.",
+       "trackingcategories-nodesc": "No descrive es disponable.",
+       "trackingcategories-disabled": "Categoria es descomutada",
+       "mailnologin": "No adirije de envia",
+       "mailnologintext": "Tu debe es [[Special:UserLogin|autenticida]] e ave un adirije valida de eposta en tua [[Special:Preferences|preferes]] per envia epostas a otra usores.",
+       "emailuser": "Envia un eposta a esta usor",
+       "emailuser-title-target": "Envia un eposta a esta {{GENDER:$1|usor}}",
+       "emailuser-title-notarget": "Envia eposta a usor",
+       "emailpagetext": "Tu pote usa la formulario a su per envia un eposta a esta {{GENDER:$1|usor}}.\nLa adirije de eposta cual tu ia spesifa en [[Special:Preferences|tua preferes de usor]] va apare como la adirije \"De\" de la eposta, donce la resetor va pote responde direta a tu.",
+       "defemailsubject": "{{SITENAME}} - eposta de usor \"$1\"",
+       "usermaildisabled": "Epostas de usor es descomutada",
+       "usermaildisabledtext": "Tu no pote envia epostas a otra usores en esta vici",
+       "noemailtitle": "No adirije de eposta",
+       "noemailtext": "Esta usor no ia spesifa un adirije valida de eposta.",
+       "nowikiemailtext": "Esta usor ia eleje no reseta epostas de otra usores.",
+       "emailnotarget": "La nom de usor per la resetor no esiste o es nonvalida.",
+       "emailtarget": "Tape nom de usor de resetor",
+       "emailusername": "Nom de usor",
+       "emailusernamesubmit": "Envia",
+       "email-legend": "Envia un eposta a un otra usor de {{SITENAME}}",
        "emailfrom": "De:",
        "emailto": "A:",
-       "emailsubject": "Sujeto:",
+       "emailsubject": "Tema:",
        "emailmessage": "Mesaje:",
        "emailsend": "Envia",
-       "emailsent": "E-posta ia es enviada",
+       "emailccme": "Envia un copia de mea mesaje a me",
+       "emailccsubject": "Copia de tua mesaje a $1: $2",
+       "emailsent": "Eposta enviada",
+       "emailsenttext": "Tua eposta ia es enviada.",
+       "emailuserfooter": "Esta eposta ia es enviada par $1 a $2 par la funsiona \"{{int:emailuser}}\" a {{SITENAME}}. Si tu responde a esta eposta, tua eposta va es direta enviada a la envior orijinal, revelante tua adirije de eposta a el.",
+       "usermessage-summary": "Scrivente mesaje de sistem.",
        "usermessage-editor": "Mesajor de sistem",
        "watchlist": "Pajes monitorida",
-       "mywatchlist": "Lista de pajes monitorida",
+       "mywatchlist": "Pajes monitorida",
        "watchlistfor2": "Per $1 $2",
-       "nowatchlist": "Tu ave no cosas en tu lista oservada",
-       "addedwatchtext": "La paje \"[[:$1]]\" ia es juntada a tu [[Special:Watchlist|lista de pajes oservada]].\nCambias future a esta paje e se paje de discutes va es listada ala, e la paje va apera en leteras '''forte''' en la [[Special:RecentChanges|lista de cambias resente]] per es plu fasil oservada.\n\nSi tu vole sutrae la paje de tu lista de pajes oservada en la futur, clica a \"no oserva\" en la bara a la lado.",
-       "removedwatchtext": "La paje \"[[:$1]]\" ia es sutraeda de [[Special:Watchlist|tu lista de pajes oservada]].",
+       "nowatchlist": "Tu ave no pajes en tu lista monitorida",
+       "watchlistanontext": "Per favore, autentici per regarda o edita la contenida de tua lista monitorida.",
+       "watchnologin": "No autenticida",
+       "addwatch": "Ajunta a pajes monitorida",
+       "addedwatchtext": "\"[[:$1]]\" e sua paje de discute ia es ajuntada a tua [[Special:Watchlist|pajes monitorida]].",
+       "addedwatchtext-talk": "\"[[:$1]]\" e sua paje asosiada ia es ajuntada a tua [[Special:Watchlist|pajes monitorida]].",
+       "addedwatchtext-short": "La paje \"$1\" ia es ajuntada a tua pajes monitorida.",
+       "removewatch": "Sutrae de pajes monitorida",
+       "removedwatchtext": "\"[[:$1]]\" e sua paje de discute ia es sutraeda de tua [[Special:Watchlist|pajes monitorida]].",
+       "removedwatchtext-talk": "\"[[:$1]]\" e sua paje asosiada ia es sutraeda de tua [[Special:Watchlist|pajes monitorida]].",
+       "removedwatchtext-short": "La paje \"$1\" ia es sutraeda de tua pajes monitorida.",
        "watch": "Monitori",
-       "watchthispage": "Oserva esta paje",
+       "watchthispage": "Monitori esta paje",
        "unwatch": "Desmonitori",
+       "unwatchthispage": "Sesa monitori esta paje",
+       "notanarticle": "No un paje de contenida",
+       "notvisiblerev": "La revisa la plu resente par un otra usor ia es sutraeda",
        "watchlist-details": "Tu monitori {{PLURAL:$1|$1 paje|$1 pajes}}, iniorante pajes de discute.",
+       "wlheader-enotif": "Avisas par eposta es comutada.",
        "wlheader-showupdated": "Pajes cual on ia cambia pos tua visita la plu resente apare en leteras <strong>spesa</strong>.",
        "wlnote": "A su es la {{PLURAL:$1|cambia|<strong>$1</strong> cambias}} en la {{PLURAL:$2|ora|<strong>$2</strong> oras}} la plu resente, a $3, $4.",
        "wlshowlast": "Mostra la $1 oras e $2 dias presedente",
-       "watchlist-options": "Preferes per la lista de pajes monitorida.",
-       "watching": "Oserva...",
-       "unwatching": "No oserva...",
+       "watchlist-hide": "Asconde",
+       "watchlist-submit": "Mostra",
+       "wlshowtime": "Periodo de tempo mostrada:",
+       "wlshowhideminor": "editas minor",
+       "wlshowhidebots": "botes",
+       "wlshowhideliu": "usores rejistrada",
+       "wlshowhideanons": "usores anonim",
+       "wlshowhidepatr": "editas patruliada",
+       "wlshowhidemine": "mea editas",
+       "wlshowhidecategorization": "categori de pajes",
+       "watchlist-options": "Preferes per pajes monitorida",
+       "watching": "Monitorinte...",
+       "unwatching": "Desmonitorinte...",
+       "watcherrortext": "Un era ia aveni en cambia tua preferes de pajes monitorida per \"$1\".",
        "enotif_reset": "Marca tota pajes como visitada",
-       "created": "Creada",
-       "deletepage": "Sutrae la paje",
+       "enotif_impersonal_salutation": "Usor de {{SITENAME}}",
+       "enotif_subject_deleted": "Paje $1 de {{SITENAME}} ia es sutraeda par $2",
+       "enotif_subject_created": "Paje $1 de {{SITENAME}} ia es creada par $2",
+       "enotif_subject_moved": "Paje $1 de {{SITENAME}} ia es moveda par $2",
+       "enotif_subject_restored": "Paje $1 de {{SITENAME}} ia es restorada par $2",
+       "enotif_subject_changed": "Paje $1 de {{SITENAME}} ia es cambiada par $2",
+       "enotif_body_intro_deleted": "La paje $1 de {{SITENAME}} ia es sutraeda a $PAGEEDITDATE par $2; vide $3.",
+       "enotif_body_intro_created": "La paje $1 de {{SITENAME}} ia es creada a $PAGEEDITDATE par $2; vide $3 per la revisa presente.",
+       "enotif_body_intro_moved": "La paje $1 de {{SITENAME}} ia es moveda a $PAGEEDITDATE par $2; vide $3 per la revisa presente.",
+       "enotif_body_intro_restored": "La paje $1 de {{SITENAME}} ia es restorada a $PAGEEDITDATE par $2; vide $3 per la revisa presente.",
+       "enotif_body_intro_changed": "La paje $1 de {{SITENAME}} ia es cambiada a $PAGEEDITDATE par $2; vide $3 per la revisa presente.",
+       "enotif_lastvisited": "Per tota cambias pos tua visita la plu resente, vide $1",
+       "enotif_lastdiff": "Per regarda esta cambia, vide $1",
+       "enotif_anon_editor": "usor anonim $1",
+       "enotif_body": "Cara $WATCHINGUSERNAME,\n\n$PAGEINTRO $NEWPAGE\n\nResoma de editor: $PAGESUMMARY $PAGEMINOREDIT\n\nContata la editor:\neposta: $PAGEEDITOR_EMAIL\nvici: $PAGEEDITOR_WIKI\n\nNo plu avisas va aveni pos plu cambias, estra si tu visita esta paje cuando tu es autenticida. Tu pote ance reinisia la ajustas de avisa per tota la pajes cual tu monitori.\n\nTua sistem amin de avisa de {{SITENAME}}\n\n--\nPer cambia tua preferes de avisa par eposta, visita\n{{canonicalurl:{{#special:Preferences}}}}\n\nPer cambia tua lista de pajes monitorida, visita\n{{canonicalurl:{{#special:EditWatchlist}}}}\n\nPer sutrae la paje de tua lista monitorida, visita\n$UNWATCHURL\n\nComentas e plu aida:\n$HELPPAGE",
+       "enotif_minoredit": "Esta es un edita minor",
+       "created": "creada",
+       "changed": "cambiada",
+       "deletepage": "Sutrae paje",
        "confirm": "Aproba",
-       "historywarning": "Avisa! La paje ce tu intende sutrae, el ave un istoria:",
-       "confirmdeletetext": "Tu va pronto sutrae un paje con tota se istoria. Per favore, afirma ce tu intende esta, ce tu comprende la resultas, e ce tu fa esta en acorda con [[{{MediaWiki:Policy-url}}|la prometes]].",
-       "actioncomplete": "Ata completada",
+       "excontent": "contenida ia es: \"$1\"",
+       "excontentauthor": "contenida ia es: \"$1\", e la sola contribuor ia es \"[[Special:Contributions/$2|$2]]\" ([[User talk:$2|discute]])",
+       "exbeforeblank": "contenida ante vacui ia es: \"$1\"",
+       "delete-confirm": "Sutrae \"$1\"",
+       "delete-legend": "Sutrae",
+       "historywarning": "<strong>Avisa:</strong> La paje cual tu es a punto de sutrae ave un istoria con $1 {{PLURAL:$1|revisa|revisas}}:",
+       "historyaction-submit": "Mostra",
+       "confirmdeletetext": "Tu es a punto de sutrae un paje con tota sua istoria.\nPer favore, confirma ce tu intende fa esta, ce tu comprende la resultas, e ce tu fa esta en acorda con [[{{MediaWiki:Policy-url}}|la politica]].",
+       "actioncomplete": "Ata ia susede",
+       "actionfailed": "Ata ia fali",
        "deletedtext": "\"$1\" ia es sutraeda.\nVide $2 per un catalogo de sutraes resente.",
-       "dellogpage": "Arcivo de sutraes",
+       "dellogpage": "Rejistra de sutraes",
+       "dellogpagetext": "A su es un lista de la sutraes la plu resente.",
+       "deletionlog": "rejistra de sutraes",
+       "reverted": "Reversada a revisa plu temprana",
        "deletecomment": "Razona:",
        "deleteotherreason": "Otra/plu razona:",
        "deletereasonotherlist": "Otra razona",
+       "deletereason-dropdown": "*Razonas comun de sutrae\n** Spam\n** Vandalisme\n** Viole de direto de autor\n** Solisitada par autor\n** Redirije rompeda",
+       "delete-edit-reasonlist": "Edita razonas de sutrae",
+       "delete-toobig": "Esta paje ave un istoria grande de edita, con plu ca $1 {{PLURAL:$1|revisa|revisas}}.\nLa sutrae de tal pajes es restrinjeda per preveni disturbas nonintendeda a {{SITENAME}}.",
+       "delete-warning-toobig": "Esta paje ave un istoria grande de edita, con plu ca $1 {{PLURAL:$1|revisa|revisas}}.\nSi tu sutrae lo, esta va disturba cisa la opera de la banco de datos de {{SITENAME}};\ncontinua cauta.",
+       "deleteprotected": "Tu no pote sutrae esta paje car lo es protejeda.",
+       "deleting-backlinks-warning": "<strong>Avisa:</strong> [[Special:WhatLinksHere/{{FULLPAGENAME}}|Otra pajes]] lia a o transclui la paje cual tu es a punto de sutrae.",
+       "deleting-subpages-warning": "<strong>Avisa:</strong> La paje cual tu es a punto de sutrae ave [Special:PrefixIndex/{{FULLPAGENAME}}/|{{PLURAL:$1|un supaje|$1 supajes|51=plu ca 50 supajes}}]].",
+       "rollback": "Reversa editas",
        "rollbacklink": "reversa",
        "rollbacklinkcount": "reversa $1 {{PLURAL:$1|edita|editas}}",
-       "protectlogpage": "Arcivo de protejes",
+       "rollbacklinkcount-morethan": "reversa plu ca $1 {{PLURAL:$1|edita|editas}}",
+       "rollbackfailed": "Reversa ia fali",
+       "rollback-missingparam": "Parametres nesesada no ia spesifada en la solisita.",
+       "rollback-missingrevision": "La datos de revisa no pote es cargada.",
+       "cantrollback": "La edita no pote es reversada;\nla contribuor la plu resente es la sola autor de esta paje.",
+       "alreadyrolled": "La edita la plu resente de [[:$1]] par [[User:$2|$2]] ([[User talk:$2|discute]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) no pote es reversada;\nun otra usor ia edita o reversa ja la paje.\n\nLa edita la plu resente a la paje ia es par [[User:$3|$3]] ([[User talk:$3|discute]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "editcomment": "La resoma de edita ia es: <em>$1</em>.",
+       "revertpage": "Editas par [[Special:Contributions/$2|$2]] ([[User talk:$2|discute]]) ia es reversada a la revisa la plu resente par [[User:$1|$1]]",
+       "revertpage-nouser": "Editas par un usor ascondeda ia es reversada a la revisa la plu resente par [[User:$1|$1]]",
+       "rollback-success": "Editas par {{GENDER:$3|$1}} ia es reversada e cambiada a la revisa la plu resente par {{GENDER:$4|$2}}",
+       "rollback-success-notify": "Editas par $1 ia es reversada e cambiada a la revisa la plu resente par $1. [$3 Mostra cambias]",
+       "sessionfailure-title": "Fali de sesion",
+       "sessionfailure": "Lo pare ce tua sesion de autentici ave un problem;\nesta ata ia es canselada per proteje contra saisis de sesion.\nRevade a la paje presedente, recarga acel paje, e atenta alora denova.",
+       "changecontentmodel": "Cambia model de contenida de un paje",
+       "changecontentmodel-legend": "Cambia model de contenida",
+       "changecontentmodel-title-label": "Titulo de paje",
+       "changecontentmodel-model-label": "Model nova de contenida",
+       "changecontentmodel-reason-label": "Razona:",
+       "changecontentmodel-submit": "Cambia",
+       "changecontentmodel-success-title": "La model de contenida ia es cambiada",
+       "changecontentmodel-success-text": "La tipo de contenida de [[:$1]] ia es cambiada.",
+       "changecontentmodel-cannot-convert": "La contenida de [[:$1]] no pote es convertida a la tipo $2",
+       "changecontentmodel-nodirectediting": "La model de contenida $1 no suporta editas direta",
+       "changecontentmodel-emptymodels-title": "No modeles de contenida es disponable",
+       "changecontentmodel-emptymodels-text": "La contenida de [[:$1]] no pote es convertida a cualce tipo.",
+       "log-name-contentmodel": "Rejistra de cambias de model de contenida",
+       "log-description-contentmodel": "Esta paje lista cambias a la model de contenida de pajes, e pajes cual ia es creada con un model noninisial de contenida.",
+       "logentry-contentmodel-new": "$1 ia crea la paje $3 con un model noninisial de contenida \"$5\"",
+       "logentry-contentmodel-change": "$1 ia cambia la model de contenida de la paje $3 de \"$4\" a \"$5\"",
+       "logentry-contentmodel-change-revertlink": "reversa",
+       "logentry-contentmodel-change-revert": "reversa",
+       "protectlogpage": "Rejistra de protejes",
+       "protectlogtext": "A su es un lista de cambias a protejes de pajes.\nVide la [[Special:ProtectedPages|lista de pajes protejeda]] per la protejes de paje cual funsiona a presente.",
        "protectedarticle": "proteje \"[[$1]]\"",
        "modifiedarticleprotection": "cambia nivel de proteje per \"[[$1]]\"",
-       "unprotectedarticle": "''[[$1]]'' desprotejeda",
-       "protect-title": "Fisa nivel de proteje a \"$1\"",
-       "prot_1movedto2": "[[$1]] es moveda a [[$2]]",
+       "unprotectedarticle": "desproteje \"[[$1]]\"",
+       "movedarticleprotection": "move ajustas de proteje de \"[[$2]]\" a \"[[$1]]\"",
+       "protectedarticle-comment": "Proteje \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "Cambia nivel de proteje per \"[[$1]]\"",
+       "unprotectedarticle-comment": "Sutrae proteje de \"[[$1]]\"",
+       "protect-title": "Cambia nivel de proteje per \"$1\"",
+       "protect-title-notallowed": "Regarda nivel de proteje de \"$1\"",
+       "prot_1movedto2": "[[$1]] ia move a [[$2]]",
+       "protect-badnamespace-title": "Spasio de nom nonprotejable",
+       "protect-badnamespace-text": "Pajes en esta spasio de nom no pote es protejeda.",
+       "protect-norestrictiontypes-text": "Esta paje no pote es protejeda car no tipos de restrinje es disponable.",
+       "protect-norestrictiontypes-title": "Paje nonprotejable",
        "protect-legend": "Aproba la proteje",
        "protectcomment": "Razona:",
-       "protectexpiry": "Fini:",
-       "protect_expiry_invalid": "Ora de fini no es legal.",
-       "protect_expiry_old": "Ora de fini es en la pasada.",
-       "protect-text": "Tu pote vide e cambia la nivel de proteje asi per la paje '''$1'''.",
-       "protect-locked-access": "Tu conta no ave permite per cambia niveles de proteje.\nAsi es la ajustas presente per la paje '''$1''':",
-       "protect-cascadeon": "Esta paje es aora protejeda per ce el es incluida en esta {{PLURAL:$1|paje|pajes}} ce ave proteje cascadente ativa. Tu pote cambia la nivel de proteje per esta paje, ma esta no va influense la proteje cascadente.",
+       "protectexpiry": "Desvalidi:",
+       "protect_expiry_invalid": "Tempo de fini es nonvalida.",
+       "protect_expiry_old": "Tempo de desvalidi ia pasa ja.",
+       "protect-unchain-permissions": "Desclavi plu ajustas de proteje",
+       "protect-text": "Asi tu pote regarda e cambia la nivel de proteje per la paje <strong>$1</strong>.",
+       "protect-locked-blocked": "Tu no pote cambia niveles de proteje cuando impedida.\nAsi es la ajustas presente per la paje <strong>$1</strong>:",
+       "protect-locked-dblock": "Niveles de proteje no pote es cambiada car la banco de datos ave un semafor ativa.\nAsi es la ajustas presente per la paje <strong>$1</strong>:",
+       "protect-locked-access": "Tua conta no es permeteda a cambia niveles de proteje de pajes.\nAsi es la ajustas presente per la paje <strong>$1</strong>:",
+       "protect-cascadeon": "Esta paje es protejeda a presente, car lo es transcluida en la {{PLURAL:$1|paje|pajes}} seguente, cual es cascadin protejeda. Cambias a la nivel de proteje per esta paje no va afeta la proteje cascadin.",
        "protect-default": "Permete tota usores",
-       "protect-fallback": "Nesesa permite \"$1\"",
-       "protect-level-autoconfirmed": "Impedi usores nova e nonenscriveda",
-       "protect-level-sysop": "Sola sysopes",
-       "protect-summary-cascade": "cascadente",
-       "protect-expiring": "fini $1 (UTC)",
-       "protect-cascade": "Proteje pajes ce es incluida en esta paje (proteje cascadente)",
-       "protect-cantedit": "Tu no pote cambia la nivel de proteje de esta paje, per ce tu no ave la permite per edita el.",
-       "protect-expiry-options": "1 ora:1 hour,1 dia:1 day,1 semana:1 week,2 semanas:2 weeks,1 mensa:1 month,3 mensas:3 months,6 mensas:6 months,1 anio:1 year,nonlimitada:infinite",
+       "protect-fallback": "Permete sola usores con permete \"$1\"",
+       "protect-level-autoconfirmed": "Permete sola usores autoconfirmada",
+       "protect-level-sysop": "Permete sola dirijores",
+       "protect-summary-cascade": "cascadin",
+       "protect-expiring": "desvalidi a $1 (UTC)",
+       "protect-expiring-local": "desvalidi a $1",
+       "protect-expiry-indefinite": "nunca desvalidinte",
+       "protect-cascade": "Proteje pajes cual es incluida en esta paje (proteje cascadin)",
+       "protect-cantedit": "Tu no pote cambia la niveles de proteje de esta paje, car tu no es permeteda a edita lo.",
+       "protect-othertime": "Otra tempo:",
+       "protect-othertime-op": "otra tempo",
+       "protect-existing-expiry": "Tempo esistente de desvalidi: $3, $2",
+       "protect-existing-expiry-infinity": "Tempo esistente de desvalidi: infinita",
+       "protect-otherreason": "Otra/plu razona:",
+       "protect-otherreason-op": "Otra razona",
+       "protect-dropdown": "*Razonas comun de proteje\n** Tro multe vandalisme\n** Tro multe spami\n** Geras de edita contraproduinte\n** Paje con multe trafica",
+       "protect-edit-reasonlist": "Edita razonas de proteje",
+       "protect-expiry-options": "1 ora:1 hour,1 dia:1 day,1 semana:1 week,2 semanas:2 weeks,1 mense:1 month,3 menses:3 months,6 menses:6 months,1 anio:1 year,infinita:infinite",
        "restriction-type": "Permete:",
        "restriction-level": "Nivel de restrinje:",
+       "minimum-size": "Grandia minima",
+       "maximum-size": "Grandia masima",
+       "pagesize": "(baites)",
        "restriction-edit": "Edita",
        "restriction-move": "Move",
-       "undelete": "Restora paje sutraeda",
+       "restriction-create": "Crea",
+       "restriction-upload": "Carga",
+       "restriction-level-sysop": "intera protejeda",
+       "restriction-level-autoconfirmed": "semiprotejeda",
+       "restriction-level-all": "cualce nivel",
+       "undelete": "Restora pajes sutraeda",
+       "undeletepage": "Regarda e restora pajes sutraeda",
+       "undeletepagetitle": "<strong>La seguente es composada de revisas sutraeda de [[:$1|$1]]</strong>.",
+       "viewdeletedpage": "Regarda pajes sutraeda",
+       "undeletepagetext": "La {{PLURAL:$1|paje|$1 pajes}} seguente es sutraeda ma ancora en la arcivo e pote es rejistrada.\nLa arcivo es cisa periodal vacuida.",
+       "undelete-fieldset-title": "Restora revisas",
+       "undeleteextrahelp": "Per restora la istoria intera de la paje, desmarca tota caxas e clica <strong><em>{{int:undeletebtn}}</em></strong>.\nPer fa un restora partal, marca la caxas corespondente a la revisas cual tu vole restora, e clica <strong><em>{{int:undeletebtn}}</em></strong>.",
+       "undeleterevisions": "$1 {{PLURAL:$1|revisa|revisas}} sutraeda",
+       "undeletehistory": "Si tu restora la paje, tota revisas va es restorada a la istoria.\nSi un paje nova con la mesma nom ia es creada pos la sutrae, la revisas restorada va apare en la istoria presedente.",
+       "undeleterevdel": "Desutrae no va aveni si lo ta fa ce la revisa la plu resente de la paje o fix va es partal sutraeda.\n En tal casos, tu debe deseleje o desasconde la revisa sutraeda la plu resente.",
+       "undeletehistorynoadmin": "Esta paje es sutraeda.\nLa razona de sutrae es mostrada en la resoma a su, con ance detalias de la usores ci ia edita esta paje ante la sutrae.\nLa testo mesma de esta revisas sutraeda es sola disponable a dirijores.",
+       "undelete-revision": "Revisa sutraeda de $1 (a $4, a $5) par $3:",
+       "undeleterevision-missing": "Revisa nonvalida o mancante.\nTu ave cisa un mal lia, o cisa la revisa ia es restorada o sutraeda de la arcivo.",
+       "undeleterevision-duplicate-revid": "{{PLURAL:$1|One revisa|$1 revisas}} no ia pote es restorada, car sua <code>rev_id</code> ia es ja usada.",
+       "undelete-nodiff": "No revisa presedente ia es trovada.",
        "undeletebtn": "Restora",
+       "undeletelink": "regarda/restora",
+       "undeleteviewlink": "regarda",
+       "undeleteinvert": "Inversa la eleje",
+       "undeletecomment": "Razona:",
+       "cannotundelete": "Alga o tota de la desutrae ia fali:\n$1",
+       "undeletedpage": "<strong>$1 ia es restorada</strong>\n\nConsulta la [[Special:Log/delete|rejistra de sutraes]] per un lista de sutraes e restoras resente.",
+       "undelete-header": "Regarda [[Special:Log/delete|la rejistra de sutraes]] per pajes resente sutraeda.",
+       "undelete-search-title": "Xerca en pajes sutraeda",
+       "undelete-search-box": "Xerca en pajes sutraeda",
+       "undelete-search-prefix": "Mostra pajes comensante con:",
+       "undelete-search-full": "Mostra titulos de paje cual conteni:",
        "undelete-search-submit": "Xerca",
+       "undelete-no-results": "No pajes conteninte ia es trovada en la arcivo de sutraes.",
+       "undelete-filename-mismatch": "La revisa de fix con ora $1 no pote es desutraeda: Noncoresponde de nom de fix.",
+       "undelete-bad-store-key": "La revisa de fix con ora $1 no pote es desutraeda: Fix ia manca ante sutrae.",
+       "undelete-cleanup-error": "Era en sutrae fix arcivida nonusada \"$1\".",
+       "undelete-missing-filearchive": "La fix arcivida con numero $1 no pote es restorada car lo no es en la banco de datos.\nCisa lo es ja desutraeda.",
+       "undelete-error": "Era en desutrae paje",
+       "undelete-error-short": "Era en desutrae fix: $1",
+       "undelete-error-long": "Eras ia aveni en desutrae la fix:\n\n$1",
+       "undelete-show-file-confirm": "Esce tu es serta ce tu vole regarda la revisa sutraeda de la fix \"<nowiki>$1</nowiki>\" de $2 a $3?",
+       "undelete-show-file-submit": "Si",
        "namespace": "Spasio de nom:",
        "invert": "Inversa la eleje",
        "tooltip-invert": "Marca esta caxa per asconde cambias a pajes en la spasio elejeda (e ance la spasio asosiada si acel es marcada)",
+       "tooltip-whatlinkshere-invert": "Marca esta caxa per asconde lias de pajes en la spasio de nom elejeda.",
        "namespace_association": "Spasio de nom asosiada",
        "tooltip-namespace_association": "Marca esta caxa per inclui ance la spasio de discute o tema asosiada con la spasio elejeda",
        "blanknamespace": "(Xef)",
-       "contributions": "Contribuis par {{GENDER:$1|usor}}",
+       "contributions": "Contribuis de {{GENDER:$1|usor}}",
        "contributions-title": "Contribuis de usor per $1",
        "mycontris": "Mea contribuis",
        "anoncontribs": "Contribuis",
        "contribsub2": "Per {{GENDER:$3|$1}} ($2)",
-       "nocontribs": "No cambias coresponde a esta criterios.",
+       "contributions-userdoesnotexist": "Conta de usor \"$1\" no es rejistrada.",
+       "nocontribs": "No cambias corespondente a esta criterios ia es trovada.",
        "uctop": "(aora)",
        "month": "De mense (e plu vea):",
        "year": "De anio (e plu vea):",
-       "sp-contributions-newbies": "Mostra sola contribuis par contas nova",
+       "sp-contributions-newbies": "Mostra sola contribuis de contas nova",
        "sp-contributions-newbies-sub": "Per contas nova",
-       "sp-contributions-blocklog": "impedi arcivo",
+       "sp-contributions-newbies-title": "Contribuis de usor per contas nova",
+       "sp-contributions-blocklog": "rejistra de impedis",
+       "sp-contributions-suppresslog": "contribuis supresada de usor",
+       "sp-contributions-deleted": "contribuis sutraeda de {{GENDER:$1|usor}}",
        "sp-contributions-uploads": "cargas",
-       "sp-contributions-logs": "Lista de arcivos",
+       "sp-contributions-logs": "rejistras",
        "sp-contributions-talk": "discute",
-       "sp-contributions-userrights": "Dirije de la diretos de usores",
+       "sp-contributions-userrights": "Maneja de diretos de {{GENDER:$1|usor}}",
+       "sp-contributions-blocked-notice": "Esta usor es impedida a presente.\nLa entrada la plu resente de la rejistra de impedis es mostrada a su per clari:",
+       "sp-contributions-blocked-notice-anon": "Esta adirije IP es impedida a presente.\nLa entrada la plu resente de la rejistra de impedis es mostrada a su per clari:",
        "sp-contributions-search": "Xerca contribuis",
-       "sp-contributions-username": "Adirije de IP o nom de usor:",
+       "sp-contributions-username": "Adirije IP o nom de usor:",
        "sp-contributions-toponly": "Mostra sola editas cual es revisas la plu resente.",
        "sp-contributions-newonly": "Mostra sola editas cual es creas de pajes",
+       "sp-contributions-hideminor": "Asconde editas minor",
        "sp-contributions-submit": "Xerca",
        "whatlinkshere": "Lias a esta paje",
        "whatlinkshere-title": "Pajes cual lia a \"$1\"",
        "whatlinkshere-page": "Paje:",
        "linkshere": "La pajes seguente lia a <strong>[[:$1]]</strong>:",
-       "nolinkshere": "No pajes lia a '''[[:$1]]'''.",
+       "nolinkshere": "No pajes lia a <strong>[[:$1]]</strong>.",
+       "nolinkshere-ns": "No pajes lia a <strong>[[:$1]]</strong> en la spasio de nom elejeda.",
        "isredirect": "paje redirijente",
        "istemplate": "transclui",
        "isimage": "lia de fix",
        "whatlinkshere-hidelinks": "$1 lias",
        "whatlinkshere-hideimages": "$1 lias de fix",
        "whatlinkshere-filters": "Filtros",
+       "whatlinkshere-submit": "Vade",
+       "autoblockid": "Autoimpedi #$1",
+       "block": "Impedi usor",
+       "unblock": "Desimpedi usor",
        "blockip": "Impedi usor",
+       "blockip-legend": "Impedi usor",
+       "blockiptext": "Usa la formulario a su per impedi asedes scrivente de un adirije IP o nom de usor spesifada.\nOn debe fa esta sola per preveni vandalsime, e longo la [[{{MediaWiki:Policy-url}}|politica]].\nSpesifa un razona a su (per esemplo, indicante pajes individua cual ia es vandalida).\nPer impedi adirijes IP, on pote usa la sintatica [https://en.wikipedia.org/wiki/Classless_Inter-Domain_Routing CIDR]; la estende la plu grande permeteda es /$1 per IPv4 e /$2 per IPv6.",
+       "ipaddressorusername": "Adirije IP o nom de usor:",
+       "ipbexpiry": "Desvalidi:",
        "ipbreason": "Razona:",
+       "ipbreason-dropdown": "*Razonas comun de impedi\n** Ajunta de informas falsa\n** Sutrae de contenida de pajes\n** Spam liante a pajerias esterna\n** Ajunta de asurdas/babela a pajes\n** Condui menasante/molestante\n** Malusa de multe contas\n** Nom de usor nonasetable",
+       "ipb-hardblock": "Preveni usores autenticida de edita de esta adirije IP",
+       "ipbcreateaccount": "Preveni crea de contas",
+       "ipbemailban": "Preveni ce la usor envia epostas",
+       "ipbenableautoblock": "Impedi automata la adirije IP la plu resente usada par esta usor, e cualce adirijes IP de cual los atenta edita en futur",
        "ipbsubmit": "Impedi esta usor",
+       "ipbother": "Otra tempo:",
        "ipboptions": "2 oras:2 hours,1 dia:1 day,3 dias:3 days,1 semana:1 week,2 semanas:2 weeks,1 mense:1 month,3 menses:3 months,6 menses:6 months,1 anio:1 year,infinita:infinite",
-       "blockipsuccesssub": "La impedi susede",
-       "ipusubmit": "Desimpedi esta adirije",
-       "ipblocklist": "Liste de adirijes de IP e usores impedida",
+       "ipbhidename": "Asconde nom de usor de editas e listas",
+       "ipbwatchuser": "Monitori la pajes de usor e discute de esta usor",
+       "ipb-disableusertalk": "Preveni ce esta usor edita sua propre paje de discute cuando el es impedida",
+       "ipb-change-block": "Reimpedi la usor con esta ajustas",
+       "ipb-confirm": "Confirma impedi",
+       "badipaddress": "Adirije IP nonvalida",
+       "blockipsuccesssub": "Impedi ia susede",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] es impedida.<br />\nVide la [[Special:BlockList|lista de impedis]] per esamina impedis.",
+       "ipb-blockingself": "Tu es a punto de impedi tu mesma! Esce tu es serta ce tu vole fa esta?",
+       "ipb-confirmhideuser": "Tu es a punto de impedi un usor per ci \"asconde usor\" es comutada. Esta va supresa la nom de la usor en tota listas e rejistras. Esce tu es serta ce tu vole fa esta?",
+       "ipb-confirmaction": "Si tu es serta ce tu vole vera fa esta, marca la campo \"{{int:ipb-confirm}}\" a su, per favore.",
+       "ipb-edit-dropdown": "Edita razonas de impedi",
+       "ipb-unblock-addr": "Desimpedi $1",
+       "ipb-unblock": "Desimpedi un nom de usor o adirije IP",
+       "ipb-blocklist": "Regarda impedis esistente",
+       "ipb-blocklist-contribs": "Contribuis per $1",
+       "ipb-blocklist-duration-left": "$1 resta",
+       "unblockip": "Desimpedi usor",
+       "unblockiptext": "Usa la formulario a su per restora asedes scrivente a un adirije IP o nom de usor impedida en la pasada.",
+       "ipusubmit": "Sutrae esta impedi",
+       "unblocked": "[[User:$1|$1]] es desimpedida.",
+       "unblocked-range": "$1 es desimpedida.",
+       "unblocked-id": "Impedi $1 es sutraeda.",
+       "unblocked-ip": "[[Special:Contributions/$1|$1]] es desimpedida.",
+       "blocklist": "Usores impedida",
+       "autoblocklist": "Autoimpedis",
+       "autoblocklist-submit": "Xerca",
+       "autoblocklist-legend": "Lista autoimpedis",
+       "autoblocklist-localblocks": "{{PLURAL:$1|Autoimpedi|Autoimpedis}} local",
+       "autoblocklist-total-autoblocks": "Cuantia intera de autoimpedis: $1",
+       "autoblocklist-empty": "La lista de autoimpedis es vacua.",
+       "autoblocklist-otherblocks": "Otra {{PLURAL:$1|autoimpedi|autoimpedis}}",
+       "ipblocklist": "Usores impedida",
+       "ipblocklist-legend": "Trova un usor impedida",
+       "blocklist-userblocks": "Asconde impedis de conta",
+       "blocklist-tempblocks": "Asconde impedis tempora",
+       "blocklist-addressblocks": "Asconde impedis de IP individua",
+       "blocklist-rangeblocks": "Asconde impedis de estendes IP",
+       "blocklist-timestamp": "Ora",
+       "blocklist-target": "Ojeto",
+       "blocklist-expiry": "Desvalidi",
+       "blocklist-by": "Dirijor impedinte",
+       "blocklist-params": "Parametres de impedi",
+       "blocklist-reason": "Razona",
        "ipblocklist-submit": "Xerca",
+       "ipblocklist-localblock": "Impedi local",
+       "ipblocklist-otherblocks": "Otra {{PLURAL:$1|impedi|impedis}}",
        "infiniteblock": "infinita",
+       "expiringblock": "desvalidi a $1 a $2",
+       "anononlyblock": "sola anonim",
+       "noautoblockblock": "autoimpedi descomutada",
+       "createaccountblock": "crea de contas descomutada",
+       "emailblock": "epostas descomutada",
+       "blocklist-nousertalk": "no pote edita sua propre paje de discute",
+       "ipblocklist-empty": "La lista de impedis es vacua.",
+       "ipblocklist-no-results": "La adirije IP o nom de usor spesifada no es impedida.",
        "blocklink": "impedi",
        "unblocklink": "desimpedi",
+       "change-blocklink": "cambia impedi",
        "contribslink": "contribuis",
-       "blocklogpage": "Impedi arcivo",
+       "emaillink": "envia eposta",
+       "autoblocker": "Autoimpedida car tua adirije IP ia es resente usada par \"[[User:$1|$1]]\".\nLa razona donada per la impedi de $1 es \"$2\"",
+       "blocklogpage": "Rejistra de impedis",
+       "blocklog-showlog": "Esta usor ia es impedida a ante.\nLa rejistra de impedis es mostrada a su per claria:",
+       "blocklog-showsuppresslog": "Esta usor ia es impedida e ascondeda a ante.\nLa rejistra de supresas es mostrada a su per claria:",
        "blocklogentry": "impedi [[$1]] per desvalidi a $2 $3",
        "reblock-logentry": "cambia la impedi de [[$1]] per desvalidi a $2 $3",
-       "block-log-flags-nocreate": "crea de contas descapasida",
-       "proxyblocker": "Blocador de proxis",
+       "blocklogtext": "Esta es un rejistra de atas de impedi e desimpedi usores.\nAdirijes IP automata impedida no es listada.\nVide la [[Special:BlockList|lista de impedis]] per la lista de proibis e impedis funsionante a presente.",
+       "unblocklogentry": "desimpedi $1",
+       "block-log-flags-anononly": "sola usores anonim",
+       "block-log-flags-nocreate": "crea de contas descomutada",
+       "block-log-flags-noautoblock": "autoimpedi descomutada",
+       "block-log-flags-noemail": "eposta descomutada",
+       "block-log-flags-nousertalk": "no pote edita sua propre paje de discute",
+       "block-log-flags-angry-autoblock": "autoimpedida bonida comutada",
+       "block-log-flags-hiddenname": "nom de usor ascondeda",
+       "range_block_disabled": "La capasia de dirijores de crea impedis de estendes IP es descomutada.",
+       "ipb_expiry_invalid": "Tempo de desvalidi es nonvalida.",
+       "ipb_expiry_old": "Tempo de desvalidi ia pasa ja.",
+       "ipb_expiry_temp": "Impedis de nomes ascondeda debe es permanente.",
+       "ipb_hide_invalid": "Esta conta no pote es supresada; lo ave plu ca {{PLURAL:$1|un edita|$1 editas}}.",
+       "ipb_already_blocked": "\"$1\" es ja impedida.",
+       "ipb-needreblock": "$1 es ja impedida. Esce tu vole cambia la ajustas?",
+       "ipb-otherblocks-header": "Otra {{PLURAL:$1|impedi|impedis}}",
+       "unblock-hideuser": "Tu no pote desimpedi esta usor, car sua nom de usor es ascondeda.",
+       "ipb_cant_unblock": "Era: La impedi con numero $1 no ia es trovada. Cisa on ia desimpedi ja lo.",
+       "ipb_blocked_as_range": "Era: La adirije IP $1 no es direta impedida e no pote es desimpedida.\nMa lo es impedida como parte de la estende $2, cual pote es desimpedida.",
+       "ip_range_invalid": "Estende nonvalida de adirijes IP.",
+       "ip_range_toolarge": "Impedis de estendes IP plu grande ca /$1 no es permeteda.",
+       "proxyblocker": "Impedador de proxis",
+       "proxyblockreason": "Tua adirije IP es impedida car lo es un proxi abrida.\nPer favore, contata tua furnor de servi de interede o la suporta tecnical de tua organiza e informa los de esta problem major de securia.",
+       "sorbsreason": "Tua adirije IP es listada como un proxi abrida en la DNSBL usada par {{SITENAME}}.",
+       "sorbs_create_account_reason": "Tua adirije IP es listada como un proxi abrida en la DNSBL usada par {{SITENAME}}.\nTu no pote crea un conta.",
+       "softblockrangesreason": "Contribuis anonim no es permeteda de tua adirije IP ($1). Autentici, per favore.",
+       "xffblockreason": "Un adirije IP en la xapo X-Forwarded-For, o la tua o lo de un proxi cual tu usa, es impedida. La razona orijinal de impedi ia es: $1",
+       "cant-see-hidden-user": "La usor ci tu atenta impedi es ja impedida e ascondeda.\nCar tu no ave la direto \"hideuser\", tu no pote vide o edita la impedi de la usor.",
+       "ipbblocked": "Tu no pote impedi o desimpedi otra usores, car tu mesma es impedida.",
+       "ipbnounblockself": "Tu no es permeteda a desimpedi tu mesma.",
+       "lockdb": "Clavi banco de datos",
+       "unlockdb": "Desclavi banco de datos",
+       "lockdbtext": "Si tu clavi la banco de datos, esta va suspende la capasia de tota usores de edita pajes, cambia sua preferes, edita sua listas de pajes monitorida, e otra cosas cual funsiona par cambia la datos.\nPer favore, confirma ce esta es lo cual tu intende fa, e ce tu va desclavi la banco de datos cuando tua manteni es completida.",
+       "unlockdbtext": "Si tu desclavi la banco de datos, esta va restora la capasia de tota usores de edita pajes, cambia sua preferes, edita sua listas de pajes monitorida, e otra cosas cual funsiona par cambia la datos.\nPer favore, confirma ce esta es lo cual tu intende fa.",
+       "lockconfirm": "Si, me vole vera clavi la banco de datos.",
+       "unlockconfirm": "Si, me vole vera desclavi la banco de datos.",
+       "lockbtn": "Clavi banco de datos",
+       "unlockbtn": "Desclavi banco de datos",
+       "locknoconfirm": "Tu no ia marca la caxa de confirma.",
+       "lockdbsuccesssub": "La banco de datos es clavida",
+       "unlockdbsuccesssub": "La banco de datos es desclavida",
+       "lockdbsuccesstext": "La banco de datos es clavida.<br />\nNo oblida [[Special:UnlockDB|desclavi lo]] cuando tua manteni es completida.",
+       "unlockdbsuccesstext": "La banco de datos es desclavida.",
+       "lockfilenotwritable": "La fix de semafor de banco de datos no es scrivable.\nPer clavi o desclavi la datos, esta nesesa es scrivable per la servador.",
+       "databaselocked": "La banco de datos es ja clavida.",
+       "databasenotlocked": "La banco de datos no es clavida.",
+       "lockedbyandtime": "(par {{GENDER:$1|$1}} a $2 a $3)",
+       "move-page": "Move $1",
        "move-page-legend": "Move paje",
-       "movepagetext": "Usa la forma a su va cambia la nom de un paje, e va move tota se istoria a la nom nova.\nLa titulo vea va deveni un paje de redirije a la titulo nova.\nLias a la titulo de la paje vea no va es cambiada;\nTu debe vide serta ce es redirijes duple o rompeda.\nTu es respondable per es serta ce la lias va continua vade a la locas intendeda.\n\nNota ce la paje '''no''' va es moveda si es ja un paje a la titulo nova, sin el es vacua o un redirije e no ave un istoria de editas presedente.\nEsta sinifia ce tu pote cambia la nom de un paje a la loca presedente si tu era, e tu no pote scrive supra un paje ce esiste ja.\n\n'''AVISA!'''\nEsta pote es un cambia dramos e nonespetada per un paje poplal;\nper favore, es serta ce tu comprende la resulta de esta ata ante tu continua.",
-       "movepagetalktext": "La paje de discuta de esta paje va es moveda automatica con el '''eseta si:'''\n*Un paje de discuta ce no es vacua esiste ja su la nom nova, o\n*Tu cambia la indica en la caxa su.\n\nEn esta casos, tu va nesesa move o fusa la paje per mano, si desirada.",
+       "movepagetext": "Si tu usa la formulario a su, esta va cambia la nom de un paje, e va move tota sua istoria a la nom nova.\nLa titulo vea va deveni un paje de redirije a la titulo nova.\nTu pote ajusta automata redirijes cual punta a la titulo orijinal.\nSi tu eleje no fa esta, tu debe serti ce redirijes no deveni [[Special:DoubleRedirects|duplida]] o [[Special:BrokenRedirects|rompeda]].\nTu debe es serta ce lias continua punta a sua locas intendeda.\n\nNota ce la paje <strong>no</strong> va es moveda si on ave ja un paje con la titulo nova, estra si lo es un redirije e no ave un istoria de editas pasada.\nEsta vole dise ce tu pote renomi un paje a sua titulo presedente si tu era, e tu no pote suprascrive un paje esistente.\n\n<strong>Nota:</strong>\nEsta pote es un cambia dramosa e nonespetada per un paje popular;\nper favore, serti ce tu comprende la resulta de esta ante continua.",
+       "movepagetext-noredirectfixer": "Si tu usa la formulario a su, esta va cambia la nom de un paje, e va move tota sua istoria a la nom nova.\nLa titulo vea va deveni un paje de redirije a la titulo nova.\nTu debe serti ce redirijes no deveni [[Special:DoubleRedirects|duplida]] o [[Special:BrokenRedirects|rompeda]].\nTu debe es serta ce lias continua punta a sua locas intendeda.\n\nNota ce la paje <strong>no</strong> va es moveda si on ave ja un paje con la titulo nova, estra si lo es un redirije e no ave un istoria de editas pasada.\nEsta vole dise ce tu pote renomi un paje a sua titulo presedente si tu era, e tu no pote suprascrive un paje esistente.\n\n<strong>Nota:</strong>\nEsta pote es un cambia dramosa e nonespetada per un paje popular;\nper favore, serti ce tu comprende la resulta de esta ante continua.",
+       "movepagetalktext": "Si tu marca esta caxa, la paje de discute asosiada con esta paje va es automata moveda a la titulo nova, estra si un paje nonvacua de discute esiste ja ala.\n\nEn esta situa, tu va debe move o fusa la paje par mano, si desirada.",
+       "moveuserpage-warning": "<strong>Avisa:</strong> Tu es a punto de move un paje de usor. Per favore, nota ce sola la paje va es moveda; la usor <em>no</em> va es renomida.",
+       "movecategorypage-warning": "<strong>Avisa:</strong> Tu es a punto de move un paje de categoria. Per favore, nota ce sola la paje va es moveda; cualce pajes en la categoria vea <em>no</em> va es recategorida a la nova.",
+       "movenologintext": "Tu debe es un usor rejistrada e [[Special:UserLogin|autenticida]] per move un paje.",
+       "movenotallowed": "Tu no es permeteda a move pajes.",
+       "movenotallowedfile": "Tu no es permeteda a move fixes.",
+       "cant-move-user-page": "Tu no es permeteda a move pajes de usor (estra supajes).",
+       "cant-move-to-user-page": "Tu no es permeteda a move un paje a un paje de usor (estra a un supaje de usor).",
+       "cant-move-category-page": "Tu no es permeteda a move pajes de categoria.",
+       "cant-move-to-category-page": "Tu no es permeteda a move un paje a un paje de categoria.",
+       "cant-move-subpages": "Tu no es permeteda a move supajes.",
+       "namespace-nosubpages": "Spasio de nom \"$1\" no permete supajes.",
        "newtitle": "Titulo nova:",
-       "move-watch": "Oserva esta paje",
+       "move-watch": "Monitori paje fontal e paje destinal",
        "movepagebtn": "Move paje",
        "pagemovedsub": "La move ia susede",
-       "movepage-moved": "'''\"$1\" ia es moveda a \"$2\"'''",
-       "articleexists": "Un paje con acel nom esiste ja, o la nom ce tu ia eleje no es un nom legal. Per favore, eleje un otra nom.",
-       "movetalk": "Move la paje de discutes ance",
-       "movelogpage": "Move arcivo",
-       "movelogpagetext": "A su es un lista de pajes moveda",
+       "movepage-moved": "<strong>\"$1\" ia es moveda a \"$2\"</strong>",
+       "movepage-moved-redirect": "Un redirije ia es creada.",
+       "movepage-moved-noredirect": "La crea de un redirije ia es supresada.",
+       "articleexists": "Un paje con acel nom esiste ja, o la nom cual tu ia eleje no es un nom valida.\nPer favore, eleje un otra nom.",
+       "cantmove-titleprotected": "Tu no pote move un paje a esta loca, car la titulo nova es protejeda contra crea.",
+       "movetalk": "Move la paje de discute asosiada",
+       "move-subpages": "Move supajes (asta $1)",
+       "move-talk-subpages": "Move supajes de paje de discute (asta $1)",
+       "movepage-page-exists": "La paje $1 esiste ja e no pote es automata suprascriveda.",
+       "movepage-page-moved": "La paje $1 ia es moveda a $2.",
+       "movepage-page-unmoved": "La paje $1 no ia pote es moveda a $2.",
+       "movepage-max-pages": "La masima de $1 {{PLURAL:$1|paje|pajes}} ia es moveda, e no plu va es automata moveda.",
+       "movelogpage": "Rejistra de moves",
+       "movelogpagetext": "A su es un lista de pajes moveda.",
+       "movesubpage": "{{PLURAL:$1|Supaje|Supajes}}",
+       "movesubpagetext": "Esta paje ave $1 {{PLURAL:$1|supaje|supajes}} mostrada a su.",
+       "movesubpagetalktext": "La paje corespondente de discute ave $1 {{PLURAL:$1|supaje|subpajes}} mostrada a su.",
+       "movenosubpage": "Esta paje ave no supajes.",
        "movereason": "Razona:",
-       "revertmove": "retro",
+       "revertmove": "reversa",
+       "delete_and_move_text": "La paje destinal \"[[:$1]]\" esiste ja.\nEsce tu vole sutrae lo per crea un spasio per la move?",
+       "delete_and_move_confirm": "Si, sutrae la paje",
+       "delete_and_move_reason": "Sutraeda per crea un spasio per move de \"[[$1]]\"",
+       "selfmove": "Titulos fontal e destinal es la mesma;\nun paje no pote moveda a la mesma paje.",
+       "immobile-source-namespace": "Pajes en spasio de nom \"$1\" no pote es moveda.",
+       "immobile-target-namespace": "Pajes no pote es moveda a en spasio de nom \"$1\".",
+       "immobile-target-namespace-iw": "Lia intervical no es un destina valida per move de paje.",
+       "immobile-source-page": "Esta paje no es movable.",
+       "immobile-target-page": "Un paje no pote es moveda a acel titulo destinal.",
+       "bad-target-model": "La destina desirada usa un otra model de contenida. On no pote converti de $1 a $2.",
+       "imagenocrossnamespace": "Un fix no pote es moveda a un nom de spasio per nonfixes.",
+       "nonfile-cannot-move-to-file": "Un nonfix no pote es moveda a un nom de spasio per fixes.",
+       "imagetypemismatch": "La sufisa nova de fix no coresponde a sua tipo.",
+       "imageinvalidfilename": "La nom de fix destinal es nonvalida.",
+       "fix-double-redirects": "Ajusta cualce redirijes cual punta a la titulo orijinal",
+       "move-leave-redirect": "Lasa un redirije",
+       "protectedpagemovewarning": "<strong>Avisa:</strong> Esta paje es protejeda, tal ce sola usores con permetes dirijal pote move lo.\nLa entrada la plu resente de rejistra es mostrada a su per claria:",
+       "semiprotectedpagemovewarning": "<strong>Avisa:</strong> Esta paje es protejeda, tal ce sola usores rejistrada pote move lo.\nLa entrada la plu resente de rejistra es mostrada a su per claria:",
+       "move-over-sharedrepo": "[[:$1]] esiste en un arciveria compartida. Si tu move un fix a esta titulo, tu va suprascrive la fix compartida.",
+       "file-exists-sharedrepo": "La nom de fix elejeda es ja usada en un arciveria compartida.\nPer favore, eleje un otra nom.",
        "export": "Esporta pajes",
-       "allmessages": "Notas de sistem",
+       "exporttext": "Tu pote esporta la testo e istoria de editas de un paje individua o un colie de pajes, pacida en XML.\nMediaWiki pote emporta esta a un otra vici par la [[Special:Import|paje de emporta]].\n\nPer esporta pajes, tape la titulos en la caxa de testo a su, con un titulo per linia, e eleje esce tu vole la revisa la plu resente como ance tota revisas vea, con la linias de istoria de paje, o la revisa presente con informas sur la edita la plu resente.\n\nEn la caso du, tu pote usa ance un lia, per esemplo [[{{#Special:Export}}/{{MediaWiki:Mainpage}}]] per la paje \"[[{{MediaWiki:Mainpage}}]]\".",
+       "exportall": "Esporta tota pajes",
+       "exportcuronly": "Inclui sola la revisa presente, no la istoria completa",
+       "exportnohistory": "----\n<strong>Nota:</strong> Esporta la istoria completa de pajes tra esta formulario es descomutada per razonas de rapidia.",
+       "exportlistauthors": "Inclui un lista completa de contribuores per esta paje",
+       "export-submit": "Esporta",
+       "export-addcattext": "Ajunta pajes de categoria:",
+       "export-addcat": "Ajunta",
+       "export-addnstext": "Ajunta pajes de spasio de nom:",
+       "export-addns": "Ajunta",
+       "export-download": "Fisa como fix",
+       "export-templates": "Inclui stensiles",
+       "export-pagelinks": "Inclui pajes liada asta profondia de:",
+       "export-manual": "Ajunta pajes par mano:",
+       "allmessages": "Mesajes de sistem",
+       "allmessagesname": "Nom",
+       "allmessagesdefault": "Testo inisial de mesaje",
+       "allmessagescurrent": "Testo presente de mesaje",
+       "allmessagestext": "Esta es un lista de mesajes de sistem disponable en la spasio de nom MediaWiki.\nSi tu vole contribui a la tradui jeneral de MediaWiki, per favore visita [https://www.mediawiki.org/wiki/Special:MyLanguage/Localisation Locali de MediaWiki] e [https://translatewiki.net translatewiki.net].",
+       "allmessagesnotsupportedDB": "Esta paje no pote es usada car <strong>$wgUseDatabaseMessages</strong> es descomutada.",
+       "allmessages-filter-legend": "Filtri",
+       "allmessages-filter": "Filtri par state de ajusta",
+       "allmessages-filter-unmodified": "Nonalterada",
+       "allmessages-filter-all": "Tota",
+       "allmessages-filter-modified": "Alterada",
+       "allmessages-prefix": "Filtri par prefisa",
+       "allmessages-language": "Lingua:",
+       "allmessages-filter-submit": "Vade",
+       "allmessages-filter-translate": "Tradui",
        "thumbnail-more": "Grandi",
+       "filemissing": "Fix manca",
        "thumbnail_error": "Era en crea la imajeta: $1",
+       "thumbnail_error_remote": "Era de $1:\n$2",
+       "djvu_page_error": "Paje DjVu estra estende",
+       "djvu_no_xml": "XML per fix DjVu no pote es retraeda",
+       "thumbnail-temp-create": "Fix tempora de imajeta no pote es creada",
+       "thumbnail-dest-create": "Imajeta no pote es fisada a destina",
+       "thumbnail_invalid_params": "Parametres nonvalida de imajeta",
+       "thumbnail_toobigimagearea": "Fix con dimensiones plu grande ca $1",
+       "thumbnail_dest_directory": "Arcivo destinal no pote es creada",
+       "thumbnail_image-type": "Tipo nonsuportada de imaje",
+       "thumbnail_gd-library": "Ajusta noncompleta de biblioteca GD: Funsiona $1 manca",
+       "thumbnail_image-missing": "Fix pare manca: $1",
+       "thumbnail_image-failure-limit": "Tro multe atentas resente ($1 o plu) ia fali rendere esta imajeta. Atenta denova plu tarda, per favore.",
        "import": "Emporta pajes",
-       "importlogpage": "Importa arcivo",
-       "tooltip-pt-userpage": "{{GENDER:|Tua}} page de usor",
-       "tooltip-pt-mytalk": "{{GENDER:|Tua}} paje de discutes",
+       "importinterwiki": "Emporta de un otra vici",
+       "import-interwiki-text": "Eleje un vici e titulo de paje per emporta.\nDatas de revisas e nomes de editores va es conservada.\nTota emportas de otra vicis es rejistrada en la [[Special:Log/import|rejistra de emportas]].",
+       "import-interwiki-sourcewiki": "Vici fontal:",
+       "import-interwiki-sourcepage": "Paje fontal:",
+       "import-interwiki-history": "Copia tota revisas istorial de esta paje",
+       "import-interwiki-templates": "Inclui tota stensiles",
+       "import-interwiki-submit": "Emporta",
+       "import-mapping-default": "Emporta a locas implicada",
+       "import-mapping-namespace": "Emporta a un spasio de nom:",
+       "import-mapping-subpage": "Emporta como supajes de la paje seguente:",
+       "import-upload-filename": "Nom de fix:",
+       "import-comment": "Comenta:",
+       "importtext": "Per favore, esporta la fix de la vici fontal par usa la [[Special:Export|util de esporta]].\nFisa lo a tu computador e carga lo asi.",
+       "importstart": "Emportante pajes...",
+       "import-revision-count": "$1 {{PLURAL:$1|revisa|revisas}}",
+       "importnopages": "No pajes per emporta.",
+       "imported-log-entries": "$1 {{PLURAL:$1|entrada|entradas}} de rejistra ia es emportada.",
+       "importfailed": "Emporta ia fali: <nowiki>$1</nowiki>",
+       "importunknownsource": "Tipo nonconoseda de fonte de emporta",
+       "importcantopen": "Fix de emporta no ia pote es abrida",
+       "importbadinterwiki": "Mal lia intervical",
+       "importsuccess": "Emporta ia fini!",
+       "importnosources": "No vicis de cual on pote emporta es definida, e cargas direta de istoria es descomutada.",
+       "importnofile": "No fix de emporta ia es cargada.",
+       "importuploaderrorsize": "Carga de fix de emporta ia fali.\nLa fix es plu grande ca permeteda per cargas.",
+       "importuploaderrorpartial": "Carga de fix de importa ia fali.\nSola un parte de la fix ia es cargada.",
+       "importuploaderrortemp": "Carga de fix de importa ia fali.\nUn arcivo tempora manca.",
+       "import-parse-failure": "La analise de la XML de la emporta ia fali",
+       "import-noarticle": "No paje per emporta!",
+       "import-nonewrevisions": "No revisas ia es emportada (tota ia es o ja presente, o ometeda par causa de eras).",
+       "xml-error-string": "$1 a linia $2, colona $3 (bait $4): $5",
+       "import-upload": "Carga datos XML",
+       "import-token-mismatch": "Datos de sesion es perdeda.\n\nCisa tu ia deveni desautenticida. '''Per favore, serti ce tu es ancora autenticida e atenta denova.'''\nSi lo ancora no funsiona, proba [[Special:UserLogout|desautentici]] e reautentici, e serti ce tua surfador permete cucis de esta pajeria.",
+       "import-invalid-interwiki": "On no pote emporta de la vici spesifada.",
+       "import-error-edit": "Paje \"$1\" no ia es emportada car tu no es permeteda a edita lo.",
+       "import-error-create": "Paje \"$1\" no ia es emportada car tu no es permeteda a crea lo.",
+       "import-error-interwiki": "Paje \"$1\" no ia es emportada car sua nom es reservada per lia esterna (intervical).",
+       "import-error-special": "Paje \"$1\" no ia es emportada car lo parteni a un nom de spasio spesial cual no permete pajes.",
+       "import-error-invalid": "Paje \"$1\" no ia es emportada car la nom a cual lo ta es emportada es nonvalida en esta vici.",
+       "import-error-unserialize": "Revisa $2 de paje \"$1\" no ia pote es deserialida. La revisa ia es emportada per usa model de contenida $3 serialida como $4.",
+       "import-error-bad-location": "Revisa $2 usante model de contenida $3 no pote es conservada en \"$1\" en esta vici, car acel model no es suportada en acel paje.",
+       "import-options-wrong": "{{PLURAL:$2|eleje|elejes}} noncoreta: <nowiki>$1</nowiki>",
+       "import-rootpage-invalid": "La paje de radis spesifada es un titulo nonvalida.",
+       "import-rootpage-nosubpage": "Spasio de nom \"$1\" de la paje de radis no permete supajes.",
+       "importlogpage": "Rejistra de emportas",
+       "importlogpagetext": "Emportas dirijal de pajes con istoria de editas de otra vicis.",
+       "import-logentry-upload-detail": "$1 {{PLURAL:$1|revisa|revisas}} emportada",
+       "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|revisa|revisas}} emportada de $2",
+       "javascripttest": "Proba de JavaScript",
+       "javascripttest-pagetext-unknownaction": "Ata nonconoseda \"$1\".",
+       "javascripttest-qunit-intro": "Vide [$1 documentos sur probas] en mediawiki.org.",
+       "tooltip-pt-userpage": "{{GENDER:|Tua}} paje de usor",
+       "tooltip-pt-anonuserpage": "La paje de usor per la adirije IP como cual tu edita",
+       "tooltip-pt-mytalk": "{{GENDER:|Tua}} paje de discute",
+       "tooltip-pt-anontalk": "Discute sur editas de esta adirije IP",
        "tooltip-pt-preferences": "{{GENDER:|Tua}} preferes",
        "tooltip-pt-watchlist": "Un lista de pajes cual tu monitori per cambias",
        "tooltip-pt-mycontris": "Un lista de tua contribuis",
-       "tooltip-pt-login": "Nos prefere ce tu identifia tu, ma esta no es no obligante",
-       "tooltip-pt-logout": "Desidentifia",
-       "tooltip-pt-createaccount": "Nos recomenda ce tu crea un conta e identifia tu, ma esta no es obligante",
-       "tooltip-ca-talk": "Discute de la paje de contenida",
+       "tooltip-pt-anoncontribs": "Un lista de editas fada de esta adirije IP",
+       "tooltip-pt-login": "Nos recomenda ce tu autentici, ma esta no es no obligante",
+       "tooltip-pt-login-private": "Tu nesesa autentici per usa esta vici",
+       "tooltip-pt-logout": "Desautentici",
+       "tooltip-pt-createaccount": "Nos recomenda ce tu crea un conta e autentici, ma esta no es obligante",
+       "tooltip-ca-talk": "Discute sur la paje de contenida",
        "tooltip-ca-edit": "Edita esta paje",
-       "tooltip-ca-addsection": "Inisia un sesion nova",
-       "tooltip-ca-viewsource": "Esta paje es protejeda. Tu pote regarda sua fonte",
+       "tooltip-ca-addsection": "Comensa un parte nova",
+       "tooltip-ca-viewsource": "Esta paje es protejeda.\nTu pote regarda sua fonte",
        "tooltip-ca-history": "Revisas pasada de esta paje",
        "tooltip-ca-protect": "Proteje esta paje",
+       "tooltip-ca-unprotect": "Cambia la proteje de esta paje",
        "tooltip-ca-delete": "Sutrae esta paje",
+       "tooltip-ca-undelete": "Restora la editas fada a esta paje ante cuando on ia sutrae lo",
        "tooltip-ca-move": "Move esta paje",
-       "tooltip-ca-watch": "Ajunta esta paje a tua lista de pajes monitorida",
-       "tooltip-ca-unwatch": "Sutrae esta paje de tua lista de pajes monitorida",
-       "tooltip-search": "Xerca {{SITENAME}}",
+       "tooltip-ca-watch": "Ajunta esta paje a tua pajes monitorida",
+       "tooltip-ca-unwatch": "Sutrae esta paje de tua pajes monitorida",
+       "tooltip-search": "Xerca en {{SITENAME}}",
        "tooltip-search-go": "Vade a un paje con esata esta nom si lo esiste",
        "tooltip-search-fulltext": "Xerca esta testo en la pajes",
        "tooltip-p-logo": "Visita la paje xef",
        "tooltip-n-mainpage": "Visita la paje xef",
        "tooltip-n-mainpage-description": "Visita la paje xef",
-       "tooltip-n-portal": "Sur la projeta, la modos de aida e la locas de cosas",
-       "tooltip-n-currentevents": "Trova informa fondal sur avenis corente",
+       "tooltip-n-portal": "Sur la projeta, modos de aida e locas de cosas",
+       "tooltip-n-currentevents": "Trova informas fondal sur avenis corente",
        "tooltip-n-recentchanges": "Un lista de cambias resente en la vici",
        "tooltip-n-randompage": "Visita un paje acaso",
-       "tooltip-n-help": "La loca per descovre.",
+       "tooltip-n-help": "La loca de descovre",
        "tooltip-t-whatlinkshere": "Un lista de tota pajes de vici cual lia a esta paje",
        "tooltip-t-recentchangeslinked": "Cambias resente en pajes a cual esta paje lia",
+       "tooltip-feed-rss": "Flue RSS per esta paje",
        "tooltip-feed-atom": "Flue Atom per esta paje",
        "tooltip-t-contributions": "Un lista de contribuis par {{GENDER:$1|esta usor}}",
-       "tooltip-t-emailuser": "Envia un e-posta a {{GENDER:$1|esta usor}}",
+       "tooltip-t-emailuser": "Envia un eposta a {{GENDER:$1|esta usor}}",
+       "tooltip-t-info": "Plu informas sur esta paje",
        "tooltip-t-upload": "Carga fixes",
        "tooltip-t-specialpages": "Un lista de tota pajes spesial",
        "tooltip-t-print": "Varia primable de esta paje",
        "tooltip-t-permalink": "Lias permanente a esta revisa de la paje",
-       "tooltip-ca-nstab-main": "Mostra la paje de contenida",
-       "tooltip-ca-nstab-user": "Mostra la paje de usor",
-       "tooltip-ca-nstab-special": "Esta es un paje special e on no pote edita lo.",
-       "tooltip-ca-nstab-project": "Mostra la paje de projeta",
-       "tooltip-ca-nstab-image": "Mostra la paje de fix",
-       "tooltip-ca-nstab-mediawiki": "Mostra la mesaje de sistem",
-       "tooltip-ca-nstab-template": "Mostra la stensil",
-       "tooltip-ca-nstab-help": "Vide la paje de aida",
-       "tooltip-ca-nstab-category": "Mostra la paje de categoria",
+       "tooltip-ca-nstab-main": "Regarda la paje de contenida",
+       "tooltip-ca-nstab-user": "Regarda la paje de usor",
+       "tooltip-ca-nstab-media": "Regarda la paje de media",
+       "tooltip-ca-nstab-special": "Esta es un paje spesial e on no pote edita lo.",
+       "tooltip-ca-nstab-project": "Regarda la paje de projeta",
+       "tooltip-ca-nstab-image": "Regarda la paje de fix",
+       "tooltip-ca-nstab-mediawiki": "Regarda la mesaje de sistem",
+       "tooltip-ca-nstab-template": "Regarda la stensil",
+       "tooltip-ca-nstab-help": "Regarda la paje de aida",
+       "tooltip-ca-nstab-category": "Regarda la paje de categoria",
        "tooltip-minoredit": "Marca esta como un edita minor",
-       "tooltip-save": "Fisa tu cambias",
+       "tooltip-save": "Fisa tua cambias",
+       "tooltip-publish": "Publici tua cambias",
        "tooltip-preview": "Previde tua cambias. Usa esta ante fisa, per favore.",
-       "tooltip-diff": "Mostra la cambias cual tu ia fa a la testo.",
-       "tooltip-compareselectedversions": "Regarda la diferes entre la du revisas elejeda de esta paje.",
-       "tooltip-watch": "Ajunta esta paje a tua lista de pajes monitorida",
-       "tooltip-rollback": "\"Reversa\" desfa direta la edita(s) par la contribuor la plu resente a esta paje",
+       "tooltip-diff": "Mostra la cambias cual tu ia fa a la testo",
+       "tooltip-compareselectedversions": "Regarda la diferes entre la du revisas elejeda de esta paje",
+       "tooltip-watch": "Ajunta esta paje a tua pajes monitorida",
+       "tooltip-watchlistedit-normal-submit": "Sutrae titulos",
+       "tooltip-watchlistedit-raw-submit": "Cambia pajes monitorida",
+       "tooltip-recreate": "Recrea la paje an si on ia sutrae lo",
+       "tooltip-upload": "Comensa carga",
+       "tooltip-rollback": "\"Reversa\" desfa la edita(s) par la contribuor la plu resente a esta paje, par sola un clica",
        "tooltip-undo": "\"Desfa\" reversa esta edita e abri la formulario de edita en moda de previde, permetente ajunta un razona en la resoma.",
+       "tooltip-preferences-save": "Fisa preferes",
        "tooltip-summary": "Ajunta un resoma corta",
+       "common.css": "/* CSS poneda asi va es aplicada a tota peles */",
+       "print.css": "/* CSS poneda asi va afeta la esflue primida */",
+       "noscript.css": "/* CSS poneda asi va afeta usores per ci JavaScript es descomutada */",
+       "group-autoconfirmed.css": "/* CSS poneda asi va afeta sola usores autoconfirmada */",
+       "group-user.css": "/* CSS poneda asi va afeta sola usores rejistrada */",
+       "group-bot.css": "/* CSS poneda asi va afeta sola botes */",
+       "group-sysop.css": "/* CSS poneda asi va afeta sola dirijores */",
+       "group-bureaucrat.css": "/* CSS poneda asi va afeta sola burocratas */",
+       "common.js": "/* Cualce JavaScript asi va es cargada per tota usores a cada carga de paje. */",
+       "group-autoconfirmed.js": "/* Cualce JavaScript asi va es cargada sola per usores autoconfirmada */",
+       "group-user.js": "/* Cualce JavaScript asi va es cargada sola per usores rejistrada */",
+       "group-bot.js": "/* Cualce JavaScript asi va es cargada sola per botes */",
+       "group-sysop.js": "/* Cualce JavaScript asi va es cargada sola per dirijores */",
+       "group-bureaucrat.js": "/* Cualce JavaScript asi va es cargada sola per burocratas */",
+       "anonymous": "{{PLURAL:$1|usor|usores}} anonim de {{SITENAME}}",
+       "siteuser": "Usor $1 de {{SITENAME}}",
+       "anonuser": "Usor anonim $1 de {{SITENAME}}",
+       "lastmodifiedatby": "La edita la plu resente de esta paje ia es a $2, $1 par $3.",
+       "othercontribs": "Fundida sur labora par $1.",
        "others": "otras",
+       "siteusers": "{{PLURAL:$2|usor|usores}} $1 de {{SITENAME}}",
+       "anonusers": "{{PLURAL:$2|usor|usores}} anonim $1 de {{SITENAME}}",
+       "creditspage": "Atribuis de paje",
+       "nocredits": "No informa atribuinte es disponable per esta paje.",
+       "spamprotectiontitle": "Filtro protejente contra spam",
+       "spamprotectiontext": "La testo cual tu ia vole fisa ia es blocida par la filtro de spam.\nEsta es probable causada par un lia a un loca esterna en la lista negra.",
        "simpleantispam-label": "Antispam. <strong>No</strong> completi esta!",
        "pageinfo-title": "Informa per \"$1\"",
+       "pageinfo-not-current": "Regretable, esta informa no es disponable per revisas vea.",
        "pageinfo-header-basic": "Informa fundal",
        "pageinfo-header-edits": "Edita la istoria",
        "pageinfo-header-restrictions": "Proteje de paje",
        "pageinfo-header-properties": "Proprias de paje",
        "pageinfo-display-title": "Mostra la titulo",
-       "pageinfo-default-sort": "Clave de ordina implicada",
+       "pageinfo-default-sort": "Modo de ordina inisial",
        "pageinfo-length": "Longia de paje (en baites)",
        "pageinfo-article-id": "Numero de paje",
        "pageinfo-language": "Lingua de contenida de paje",
+       "pageinfo-language-change": "cambia",
        "pageinfo-content-model": "Model de contenida de paje",
+       "pageinfo-content-model-change": "cambia",
        "pageinfo-robot-policy": "Catalogi par robotes",
        "pageinfo-robot-index": "Permeteda",
        "pageinfo-robot-noindex": "Proibida",
        "pageinfo-watchers": "Cuantia de usores ci monitori esta paje",
+       "pageinfo-visiting-watchers": "Cuantia de usores monitorinte ci ia visita editas resente",
        "pageinfo-few-watchers": "Min ca $1 {{PLURAL:$1|usor|usores}} monitorinte",
+       "pageinfo-few-visiting-watchers": "Cisa o cisa no, un usor monitorinte visita editas resente",
        "pageinfo-redirects-name": "Cuantia de redirijes a esta paje",
        "pageinfo-subpages-name": "Cuantia de supajes de esta paje",
        "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|redirije|redirijes}}; $3 {{PLURAL:$3|nonredirije|nonredirijes}})",
        "pageinfo-hidden-categories": "{{PLURAL:$1|Categoria|Categorias}} ascondeda ($1)",
        "pageinfo-templates": "{{PLURAL:$1|stensil|stensiles}} transcluida ($1)",
        "pageinfo-toolboxlink": "Informa de paje",
+       "pageinfo-redirectsto": "Redirije a",
+       "pageinfo-redirectsto-info": "info",
        "pageinfo-contentpage": "Tratada como paje de contenida",
        "pageinfo-contentpage-yes": "Si",
+       "pageinfo-protect-cascading": "Protejes cascade de asi",
+       "pageinfo-protect-cascading-yes": "Si",
+       "pageinfo-protect-cascading-from": "Protejes cascade de",
+       "pageinfo-category-info": "Informa de categoria",
+       "pageinfo-category-total": "Cuantia intera de membros",
+       "pageinfo-category-pages": "Cuantia de pajes",
+       "pageinfo-category-subcats": "Cuantia de sucategorias",
+       "pageinfo-category-files": "Cuantia de fixes",
+       "pageinfo-user-id": "Numero de usor",
+       "markaspatrolleddiff": "Marca como patruliada",
+       "markaspatrolledtext": "Marca esta paje como patruliada",
+       "markaspatrolledtext-file": "Marca esta varia de fix como patruliada",
+       "markedaspatrolled": "Marcada como patruliada",
+       "markedaspatrolledtext": "La revisa elejeda de [[:$1]] es marcada como patruliada.",
+       "rcpatroldisabled": "Patrulia de cambias resente es descomutada",
+       "rcpatroldisabledtext": "La funsiona de patrulia cambias resente es descomutada a presente.",
+       "markedaspatrollederror": "La marca como patruliable no es posible",
+       "markedaspatrollederrortext": "Tu nesesa spesifa cual revisa tu vole marca como patruliada.",
+       "markedaspatrollederror-noautopatrol": "Tu no es permeteda a marca tua propre cambias como patruliada.",
+       "markedaspatrollednotify": "Esta cambia a $1 es marcada como patruliada.",
+       "markedaspatrollederrornotify": "La marca como patruliada ia fali.",
        "patrol-log-page": "Arcivo de patrulias",
+       "patrol-log-header": "Esta es un rejistra de revisas patruliada.",
+       "log-show-hide-patrol": "$1 rejistra de patrulias",
+       "log-show-hide-tag": "$1 rejistra de eticetas",
+       "confirm-markpatrolled-button": "Oce",
+       "confirm-markpatrolled-top": "Marca revisa $3 de $2 como patruliada?",
+       "deletedrevision": "Sutrae revisa vea $1",
+       "filedeleteerror-short": "Era en sutrae fix: $1",
+       "filedeleteerror-long": "Eras ia aveni en desutrae la fix:\n\n$1",
+       "filedelete-old-unregistered": "La revisa spesifada de fix \"$1\" no es en la banco de datos.",
+       "filedelete-current-unregistered": "La fix spesifada \"$1\" no es en la banco de datos.",
+       "filedelete-archive-read-only": "La arciveria \"$1\" no es scrivable per la servador.",
        "previousdiff": "← Edita plu vea",
        "nextdiff": "Edita plu nova →",
+       "mediawarning": "<strong>Avisa:</strong> Esta tipo de fix pote conteni codigo malvolente.\nSi tu esecuta lo, tu risca perili tua sistem.",
+       "imagemaxsize": "Limita de grandia de imaje:<br /><em>(per pajes de descrive de fix)</em>",
+       "thumbsize": "Grandia de imajeta:",
        "widthheightpage": "$1 × $2, $3 {{PLURAL:$3|paje|pajes}}",
+       "file-info": "grandia de fix: $1, tipo MIME: $2",
        "file-info-size": "$1 × $2 pixeles, grandia de fix: $3, tipo MIME: $4",
        "file-info-size-pages": "$1 × $2 pixeles, grandia de fix: $3, tipo MIME: $4, $5 {{PLURAL:$5|paje|pajes}}",
        "file-nohires": "No densia plu alta es disponable.",
        "svg-long-desc": "fix svg, densia: $1 × $2 pixeles, grandia: $3",
+       "svg-long-desc-animated": "Fix SVG animada, densia: $1 × $2 pixeles, grandia: $3",
+       "svg-long-error": "Fix SVG nonvalida: $1",
        "show-big-image": "Fix orijinal",
        "show-big-image-preview": "Grandia de esta previde: $1",
        "show-big-image-other": "Otra {{PLURAL:$2|densia|densias}}: $1.",
        "show-big-image-size": "$1 × $2 pixeles",
+       "file-info-gif-looped": "siclinte",
+       "file-info-png-looped": "siclinte",
+       "file-info-png-repeat": "juada a $1 {{PLURAL:$1|ves|veses}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|imaje|imajes}}",
+       "file-no-thumb-animation": "<strong>Nota: Par causa de limitas tecnical, imajetas de esta fix no va es animada.</strong>",
+       "file-no-thumb-animation-gif": "<strong>Nota: Par causa de limitas tecnical, imajetas de imajes GIF de densia alta, como esta, no va es animada.</strong>",
        "newimages": "Imajes nova",
+       "imagelisttext": "A su es un lista de <strong>$1</strong> {{PLURAL:$1|fix|fixes}} ordinada $2.",
+       "newimages-summary": "Esta paje spesial mostra la fixes la plu resente cargada.",
+       "newimages-legend": "Filtri",
+       "newimages-label": "Nom de fix (o un parte de lo):",
+       "newimages-user": "Adirije IP o nom de usor",
+       "newimages-newbies": "Mostra contribuis sola de contas nova",
+       "newimages-showbots": "Mostra cargas par botes",
+       "newimages-hidepatrolled": "Asconde cargas patruliada",
+       "newimages-mediatype": "Tipo de media:",
+       "noimages": "No cosas per vide.",
        "ilsubmit": "Xerca",
+       "sp-newimages-showfrom": "Mostra fixes nova comensante de $2, $1",
+       "seconds": "{{PLURAL:$1|$1 secondo|$1 secondos}}",
+       "minutes": "{{PLURAL:$1|$1 minuto|$1 minutos}}",
+       "hours": "{{PLURAL:$1|$1 ora|$1 oras}}",
+       "days": "{{PLURAL:$1|$1 dia|$1 dias}}",
+       "weeks": "{{PLURAL:$1|$1 semana|$1 semanas}}",
+       "months": "{{PLURAL:$1|$1 mense|$1 menses}}",
+       "years": "{{PLURAL:$1|$1 anio|$1 anios}}",
+       "ago": "a $1 ante aora",
+       "just-now": "presente",
+       "monday-at": "en lundi a $1",
+       "tuesday-at": "en martedi a $1",
+       "wednesday-at": "en mercurdi a $1",
+       "thursday-at": "en jovedi a $1",
+       "friday-at": "en venerdi a $1",
+       "saturday-at": "en saturdi a $1",
+       "sunday-at": "en soldi a $1",
+       "yesterday-at": "ier a $1",
        "bad_image_list": "La forma es la seguente:\n\nSola linias de un lista (ce comensa con *) es considerada.\nLa lia prima a la linia nesesa es un lia a un mal fix.\nCada lias seguente a la mesma linia es considerada es esetas, ce es, la pajes do la fix pote aveni enlinia.",
        "metadata": "Metadatos",
        "metadata-help": "Esta fix conteni plu informa, posable ajuntada de la camera o scanador usada per crea o dijitali lo.\nSi la fix ia cambia de sua state orijinal, cisa alga detalias no pertine bon a la fix cambiada.",
        "metadata-expand": "Mostra detalias estendente",
        "metadata-collapse": "Asconde detalias estendeda",
        "metadata-fields": "Metadatos de imaje listada en esta mesaje va es incluida cuando la table de metadatos es minimida.\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-imagewidth": "Largia",
+       "exif-imagelength": "Altia",
+       "exif-bitspersample": "Bitios per composante",
+       "exif-compression": "Scema de densi",
+       "exif-photometricinterpretation": "Composa de pixeles",
        "exif-orientation": "Orienta",
+       "exif-samplesperpixel": "Cuantia de composantes",
+       "exif-planarconfiguration": "Posa de datos",
+       "exif-ycbcrsubsampling": "Proportio susamplal de Y a C",
+       "exif-ycbcrpositioning": "Posa de Y e C",
        "exif-xresolution": "Densia orizonal",
        "exif-yresolution": "Densia vertical",
+       "exif-stripoffsets": "Loca de datos de imaje",
+       "exif-rowsperstrip": "Cuantia de linias per banda",
+       "exif-stripbytecounts": "Baites per banda compresada",
+       "exif-jpeginterchangeformat": "Desloca a SOI JPEG",
+       "exif-jpeginterchangeformatlength": "Baites de datos JPEG",
+       "exif-whitepoint": "Cromaticia de punto blanca",
+       "exif-primarychromaticities": "Cromaticias de colores xef",
+       "exif-ycbcrcoefficients": "Fatores de matris de transforma de spasio de color",
+       "exif-referenceblackwhite": "Duple de valuas referal monocromata",
        "exif-datetime": "Data e ora de cambia de fix",
+       "exif-imagedescription": "Titulo de imaje",
        "exif-make": "Fabricor de camera",
        "exif-model": "Model de camera",
        "exif-software": "Program usada",
+       "exif-artist": "Autor",
+       "exif-copyright": "Autor con diretos",
        "exif-exifversion": "Varia de Exif",
+       "exif-flashpixversion": "Varia suportada de Flashpix",
        "exif-colorspace": "Spasio de color",
+       "exif-componentsconfiguration": "Sinifia de cada composante",
+       "exif-compressedbitsperpixel": "Moda de densi de imaje",
+       "exif-pixelxdimension": "Largia de imaje",
+       "exif-pixelydimension": "Altia de imaje",
+       "exif-usercomment": "Comentas de usor",
+       "exif-relatedsoundfile": "Fix audio relatada",
        "exif-datetimeoriginal": "Data e ora de jenera de datos",
        "exif-datetimedigitized": "Data e ora de dijitali",
+       "exif-subsectime": "Susecondos de datetime",
+       "exif-subsectimeoriginal": "Susecondos de datetimeoriginal",
+       "exif-subsectimedigitized": "Susecondos de DateTimeDigitized",
+       "exif-exposuretime": "Tempo de esposa",
        "exif-exposuretime-format": "$1 sec. ($2)",
+       "exif-fnumber": "Numero F",
+       "exif-exposureprogram": "Program de esposa",
+       "exif-spectralsensitivity": "Sensosia spetral",
+       "exif-shutterspeedvalue": "Rapidida APEX de cluador",
+       "exif-subjectdistance": "Distantia de sujeto",
+       "exif-meteringmode": "Moda de determina esposa",
+       "exif-lightsource": "Fonte de lus",
+       "exif-flash": "Flaxador",
+       "exif-focallength": "Distantia focal de lente",
+       "exif-subjectarea": "Area de sujeto",
+       "exif-flashenergy": "Enerjia de flaxador",
+       "exif-focalplanexresolution": "Densia X de plana focal",
+       "exif-focalplaneyresolution": "Densia Y de plana focal",
+       "exif-focalplaneresolutionunit": "Unia de densia de plana focal",
+       "exif-subjectlocation": "Loca de sujeto",
+       "exif-exposureindex": "Indise de esposa",
+       "exif-sensingmethod": "Metodo de sensa",
+       "exif-filesource": "Fonte de fix",
+       "exif-scenetype": "Tipo de sena",
+       "exif-customrendered": "Trata spesial de imaje",
+       "exif-exposuremode": "Moda de esposa",
+       "exif-whitebalance": "Ecuilibra blanca",
+       "exif-digitalzoomratio": "Proportio de zuma dijital",
+       "exif-focallengthin35mmfilm": "Distantia focal en filma de 35 mm",
+       "exif-scenecapturetype": "Tipo de catura de sena",
+       "exif-gaincontrol": "Controla de brilia",
+       "exif-contrast": "Contrasta",
+       "exif-saturation": "Satura",
+       "exif-sharpness": "Agia",
+       "exif-devicesettingdescription": "Descrive de ajustas de aparato",
+       "exif-subjectdistancerange": "Estende de distantia de sujeto",
+       "exif-imageuniqueid": "Numero unica de imaje",
+       "exif-gpsversionid": "Varia de eticeta GPS",
+       "exif-gpslatituderef": "Latitude norde o sude",
+       "exif-gpslatitude": "Latitude",
+       "exif-gpslongituderef": "Lonjitude este o ueste",
+       "exif-gpslongitude": "Lonjitude",
+       "exif-gpsaltituderef": "Refere de altia",
+       "exif-gpsaltitude": "Altia",
+       "exif-gpstimestamp": "Ora GPS (orolojo atomal)",
+       "exif-gpssatellites": "Satelites usada per mesura",
+       "exif-gpsstatus": "State de resetador",
+       "exif-gpsmeasuremode": "Moda de mesura",
+       "exif-gpsdop": "Esatia de mesura",
+       "exif-gpsspeedref": "Unia de rapidia",
+       "exif-gpsspeed": "Rapidia de resetador GPS",
+       "exif-gpstrackref": "Refere per dirije de move",
+       "exif-gpstrack": "Dirije de move",
+       "exif-gpsimgdirectionref": "Refere per dirije de imaje",
+       "exif-gpsimgdirection": "Dirije de imaje",
+       "exif-gpsmapdatum": "Datos jeodesial usada",
+       "exif-gpsdestlatituderef": "Refere per latitude de destina",
+       "exif-gpsdestlatitude": "Latitude de destina",
+       "exif-gpsdestlongituderef": "Refere per lonjitude de destina",
+       "exif-gpsdestlongitude": "Lonjitude de destina",
+       "exif-gpsdestbearingref": "Refere per dirije de destina",
+       "exif-gpsdestbearing": "Dirije de destina",
+       "exif-gpsdestdistanceref": "Refere per distantia a destina",
+       "exif-gpsdestdistance": "Distantia a destina",
+       "exif-gpsprocessingmethod": "Nom de metodo de trata GPS",
+       "exif-gpsareainformation": "Nom de area GPS",
+       "exif-gpsdatestamp": "Data GPS",
+       "exif-gpsdifferential": "Coreti diferensial GPS",
+       "exif-jpegfilecomment": "Comenta de fix JPEG",
+       "exif-keywords": "Parolas de clave",
+       "exif-worldregioncreated": "Rejion de mundo en cual la foto ia es fada",
+       "exif-countrycreated": "Pais en cual la foto ia es fada",
+       "exif-countrycodecreated": "Codigo per la pais en cual la foto ia es fada",
+       "exif-provinceorstatecreated": "Provinse o state en cual la foto ia es fada",
+       "exif-citycreated": "Site en cual la foto ia es fada",
+       "exif-sublocationcreated": "Parte de la site en cual la foto ia es fada",
+       "exif-worldregiondest": "Rejion de mundo mostrada",
+       "exif-countrydest": "Pais mostrada",
+       "exif-countrycodedest": "Codigo per pais mostrada",
+       "exif-provinceorstatedest": "Provinse o state mostrada",
+       "exif-citydest": "Site mostrada",
+       "exif-sublocationdest": "Parte de site mostrada",
+       "exif-objectname": "Titulo corta",
+       "exif-specialinstructions": "Instruis spesial",
+       "exif-headline": "Slogan",
+       "exif-credit": "Atribui/Furnor",
+       "exif-source": "Fonte",
+       "exif-editstatus": "State edital de imaje",
+       "exif-urgency": "Urjentia",
+       "exif-fixtureidentifier": "Nom de fisada",
+       "exif-locationdest": "Loca imajida",
+       "exif-locationdestcode": "Codigo de loca imajida",
+       "exif-objectcycle": "Parte de dia per cual la media es intendeda",
+       "exif-contact": "Informa de contata",
+       "exif-writer": "Scrivor",
+       "exif-languagecode": "Lingua",
+       "exif-iimversion": "Varia IIM",
+       "exif-iimcategory": "Categoria",
+       "exif-iimsupplementalcategory": "Categorias aumental",
+       "exif-datetimeexpires": "No usa pos",
+       "exif-datetimereleased": "Relasada a",
+       "exif-originaltransmissionref": "Codigo de loca de transmete orijinal",
+       "exif-identifier": "Identifiante",
+       "exif-lens": "Lente usada",
+       "exif-serialnumber": "Numero serial de camera",
+       "exif-cameraownername": "Posesor de camera",
+       "exif-label": "Eticeta",
+       "exif-datetimemetadata": "Data de cambia la plu resente de metadatos",
+       "exif-nickname": "Nom nonformal de imaje",
+       "exif-rating": "Gradi (asta 5)",
+       "exif-rightscertificate": "Documento de maneja de diretos",
+       "exif-copyrighted": "State de direto de autor",
+       "exif-copyrightowner": "Autor con diretos",
+       "exif-usageterms": "Restrinjes de usa",
+       "exif-webstatement": "Declara enlinia de diretos de autor",
+       "exif-originaldocumentid": "Numero unica de documento orijinal",
+       "exif-licenseurl": "URL per lisensa de direto de autor",
+       "exif-morepermissionsurl": "Informa lisensal alternativa",
+       "exif-attributionurl": "Si tu reusa esta obra, per favore lia a",
+       "exif-preferredattributionname": "Si tu reusa esta obra, per favore atribui lo a",
+       "exif-pngfilecomment": "Comenta de fix PNG",
+       "exif-disclaimer": "Renunsia",
+       "exif-contentwarning": "Averti sur contenida",
+       "exif-giffilecomment": "Comenta de fix GIF",
+       "exif-intellectualgenre": "Tipo de cosa",
+       "exif-subjectnewscode": "Codigo de sujeto",
+       "exif-scenecode": "Codigo de sena IPTC",
+       "exif-event": "Aveni imajida",
+       "exif-organisationinimage": "Organiza imajida",
+       "exif-personinimage": "Person imajida",
+       "exif-originalimageheight": "Altia de imaje ante corti",
+       "exif-originalimagewidth": "Largia de imaje ante corti",
+       "exif-compression-1": "No densida",
+       "exif-compression-2": "CCITT Group 3 1-Dimensional Modified Huffman run length encoding",
+       "exif-compression-3": "CCITT Group 3 fax encoding",
+       "exif-compression-4": "CCITT Group 4 fax encoding",
+       "exif-copyrighted-true": "Su direto de autor",
+       "exif-copyrighted-false": "State de direto de autor no es definida",
+       "exif-photometricinterpretation-1": "Blanca-negra (negra es 0)",
+       "exif-unknowndate": "Data nonconoseda",
        "exif-orientation-1": "Normal",
+       "exif-orientation-2": "Orizonal mirorida",
+       "exif-orientation-3": "Jirada par 180°",
+       "exif-orientation-4": "Vertical mirorida",
+       "exif-orientation-5": "Nonorolojin jirada par 90° e vertical mirorida",
+       "exif-orientation-6": "Nonorolojin jirada par 90°",
+       "exif-orientation-7": "Orolojin jirada 90° e vertical mirorida",
+       "exif-orientation-8": "Orolojin jirada 90°",
+       "exif-planarconfiguration-1": "chunky format",
+       "exif-planarconfiguration-2": "planar format",
+       "exif-colorspace-65535": "Colores nonajustada",
+       "exif-componentsconfiguration-0": "no esiste",
+       "exif-exposureprogram-0": "No definida",
+       "exif-exposureprogram-1": "Par mano",
+       "exif-exposureprogram-2": "Program normal",
+       "exif-exposureprogram-3": "Primia de abri",
+       "exif-exposureprogram-4": "Primia de cluador",
+       "exif-exposureprogram-5": "Program creosa (favorente profondia de campo)",
+       "exif-exposureprogram-6": "Program ativa (favorente rapidia de cluador)",
+       "exif-exposureprogram-7": "Orienta vertical (per fotos prosima con fondo nonfocada)",
+       "exif-exposureprogram-8": "Orienta vertical (per fotos prosima con fondo nonfocada)",
+       "exif-subjectdistance-value": "$1 metres",
+       "exif-meteringmode-0": "Nonconoseda",
+       "exif-meteringmode-1": "Promedia",
+       "exif-meteringmode-2": "Promedia favorente la sentro",
+       "exif-meteringmode-3": "Punto",
+       "exif-meteringmode-4": "Multipuntal",
+       "exif-meteringmode-5": "Motif",
+       "exif-meteringmode-6": "Partal",
+       "exif-meteringmode-255": "Otra",
+       "exif-lightsource-0": "Nonconoseda",
+       "exif-lightsource-1": "Lus de dia",
+       "exif-lightsource-2": "Fluoresente",
+       "exif-lightsource-3": "Uolfram (lus incandesente)",
+       "exif-lightsource-4": "Flax",
+       "exif-lightsource-9": "Clima bela",
+       "exif-lightsource-10": "Clima nubosa",
+       "exif-lightsource-11": "Ombra",
+       "exif-lightsource-12": "Lus de dia fluoresente (D 5700 – 7100K)",
+       "exif-lightsource-13": "Dia blanca fluoresente (N 4600 – 5400K)",
+       "exif-lightsource-14": "Fresca blanca fluoresente (W 3900 – 4500K)",
+       "exif-lightsource-15": "Blanca fluoresente (WW 3200 – 3700K)",
+       "exif-lightsource-17": "Lus normal A",
+       "exif-lightsource-18": "Lus normal B",
+       "exif-lightsource-19": "Lus normal C",
+       "exif-lightsource-24": "Uolfram de studio ISO",
+       "exif-lightsource-255": "Otra fonte de lus",
+       "exif-flash-fired-0": "Flaxador no ia funsiona",
+       "exif-flash-fired-1": "Flaxador ia funsiona",
+       "exif-flash-return-0": "no strobe return detection function",
+       "exif-flash-return-2": "strobe return light not detected",
+       "exif-flash-return-3": "strobe return light detected",
+       "exif-flash-mode-1": "compulsory flash firing",
+       "exif-flash-mode-2": "compulsory flash suppression",
+       "exif-flash-mode-3": "auto mode",
+       "exif-flash-function-1": "Funsiona flax manca",
+       "exif-flash-redeye-1": "moda desrojinte",
+       "exif-focalplaneresolutionunit-2": "ditones",
+       "exif-sensingmethod-1": "Nondefinida",
+       "exif-sensingmethod-2": "One-chip color area sensor",
+       "exif-sensingmethod-3": "Two-chip color area sensor",
+       "exif-sensingmethod-4": "Three-chip color area sensor",
+       "exif-sensingmethod-5": "Color sequential area sensor",
+       "exif-sensingmethod-7": "Trilinear sensor",
+       "exif-sensingmethod-8": "Color sequential linear sensor",
+       "exif-filesource-3": "Camera de fotos dijital",
+       "exif-scenetype-1": "Un imaje direta fotografida",
+       "exif-customrendered-0": "Trata normal",
+       "exif-customrendered-1": "Trata spesial",
+       "exif-exposuremode-0": "Esposa automata",
+       "exif-exposuremode-1": "Esposa par mano",
+       "exif-exposuremode-2": "Braseti automata",
+       "exif-whitebalance-0": "Ecuilibra blanca automata",
+       "exif-whitebalance-1": "Ecuilibra blanca par mano",
+       "exif-scenecapturetype-0": "Normal",
+       "exif-scenecapturetype-1": "Vista",
+       "exif-scenecapturetype-2": "Person",
+       "exif-scenecapturetype-3": "Sena de note",
+       "exif-gaincontrol-0": "No",
+       "exif-gaincontrol-1": "Aumenta de brilia basa",
+       "exif-gaincontrol-2": "Aumenta de brilia alta",
+       "exif-gaincontrol-3": "Redui de brilia basa",
+       "exif-gaincontrol-4": "Redui de brilia alta",
+       "exif-contrast-0": "Normal",
+       "exif-contrast-1": "Mol",
+       "exif-contrast-2": "Dur",
+       "exif-saturation-0": "Normal",
+       "exif-saturation-1": "Satura basa",
+       "exif-saturation-2": "Satura alta",
+       "exif-sharpness-0": "Normal",
+       "exif-sharpness-1": "Mol",
+       "exif-sharpness-2": "Dur",
+       "exif-subjectdistancerange-0": "Nonconoseda",
+       "exif-subjectdistancerange-1": "Macro",
+       "exif-subjectdistancerange-2": "Prosima",
+       "exif-subjectdistancerange-3": "Distante",
+       "exif-gpslatitude-n": "Latitude norde",
+       "exif-gpslatitude-s": "Latitude sude",
+       "exif-gpslongitude-e": "Lonjitude este",
+       "exif-gpslongitude-w": "Lonjitude ueste",
+       "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|metre|metres}} supra nivel de mar",
+       "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|metre|metres}} su nivel de mar",
+       "exif-gpsstatus-a": "Mesura progresante",
+       "exif-gpsstatus-v": "Interopera de mesura",
+       "exif-gpsmeasuremode-2": "Mesura de du dimensiones",
+       "exif-gpsmeasuremode-3": "Mesura de tre dimensiones",
+       "exif-gpsspeed-k": "Cilometres per ora",
+       "exif-gpsspeed-m": "Milias per ora",
+       "exif-gpsspeed-n": "Milias maral per ora",
+       "exif-gpsdestdistance-k": "Cilometres",
+       "exif-gpsdestdistance-m": "Milias",
+       "exif-gpsdestdistance-n": "Milias maral",
+       "exif-gpsdop-excellent": "Eselente ($1)",
+       "exif-gpsdop-good": "Bon ($1)",
+       "exif-gpsdop-moderate": "Moderada ($1)",
+       "exif-gpsdop-fair": "Asetable ($1)",
+       "exif-gpsdop-poor": "Povre ($1)",
+       "exif-objectcycle-a": "Sola matina",
+       "exif-objectcycle-p": "Sola sera",
+       "exif-objectcycle-b": "Matina e sera",
+       "exif-gpsdirection-t": "Dirije vera",
+       "exif-gpsdirection-m": "Dirije magnetal",
+       "exif-ycbcrpositioning-1": "Sentrida",
+       "exif-ycbcrpositioning-2": "Cosituada",
+       "exif-dc-contributor": "Contribuores",
+       "exif-dc-coverage": "Estende spasial o tempal de media",
+       "exif-dc-date": "Data(s)",
+       "exif-dc-publisher": "Publicor",
+       "exif-dc-relation": "Medias relatada",
+       "exif-dc-rights": "Diretos",
+       "exif-dc-source": "Media fontal",
+       "exif-dc-type": "Tipo de media",
+       "exif-rating-rejected": "Rejetada",
+       "exif-isospeedratings-overflow": "Plu ca 65535",
+       "exif-iimcategory-ace": "Artes, cultur e diverti",
+       "exif-iimcategory-clj": "Crimin e lege",
+       "exif-iimcategory-dis": "Desastres e asidentes",
+       "exif-iimcategory-fin": "Economia e comersia",
+       "exif-iimcategory-edu": "Educa",
+       "exif-iimcategory-evn": "Ambiente",
+       "exif-iimcategory-hth": "Sania",
+       "exif-iimcategory-hum": "Interesa umana",
+       "exif-iimcategory-lab": "Labora",
+       "exif-iimcategory-lif": "Vive e osio",
+       "exif-iimcategory-pol": "Politica",
+       "exif-iimcategory-rel": "Relijio e crede",
+       "exif-iimcategory-sci": "Siensa e tecnolojia",
+       "exif-iimcategory-soi": "Problemes sosial",
+       "exif-iimcategory-spo": "Sportes",
+       "exif-iimcategory-war": "Gera, disputa e turba",
+       "exif-iimcategory-wea": "Clima",
+       "exif-urgency-normal": "Normal ($1)",
+       "exif-urgency-low": "Basa ($1)",
+       "exif-urgency-high": "Alta ($1)",
+       "exif-urgency-other": "Primia definida par usor ($1)",
        "namespacesall": "tota",
        "monthsall": "tota",
+       "confirmemail": "Confirma adirije eposta",
+       "confirmemail_noemail": "No adirije valida de eposta es definida en tua [[Special:Preferences|preferes de usor]].",
+       "confirmemail_text": "{{SITENAME}} nesesa ce tu validi tua adirije de eposta ante usa funsionas de eposta.\nUsa la boton a su per envia un eposta de confirma a tua adirije.\nLa eposta va inclui un lia conteninte un codigo;\nsegue la lia en tua surfador per confirma ce tua adirije de eposta es valida.",
+       "confirmemail_pending": "Un codigo de confirma ia es ja epostada a tu;\nsi tu ia crea resente tua conta, cisa tu ta vole espeta sua ariva per alga minutos ante demanda per un codigo nova.",
+       "confirmemail_send": "Eposta un codigo de confirma",
+       "confirmemail_sent": "Eposta de confirma enviada.",
+       "confirmemail_oncreate": "Un codigo de confirma ia es epostada a tua adirije de eposta.\nEsta codigo no es nesesada per autentici, ma tu va nesesa furni lo ante comuta cualce funsionas epostal en la vici.",
+       "confirmemail_sendfailed": "{{SITENAME}} no ia pote envia tua eposta de confirma.\nPer favore, esamina tua adirije de eposta per sinias nonvalida.\n\nEpostador ia dise: $1",
+       "confirmemail_invalid": "Codigo de confirma nonvalida.\nCisa la codigo es tro vea.",
+       "confirmemail_needlogin": "Per favore, $1 per confirma tua adirije de eposta.",
+       "confirmemail_success": "Tua adirije de eposta es confirmada.\nTu pote aora [[Special:UserLogin|autentici]] e usa la vici.",
+       "confirmemail_loggedin": "Tua adirije de eposta es aora confirmada.",
+       "confirmemail_subject": "Confirma de adirije de eposta per {{SITENAME}}",
+       "confirmemail_body": "Algun, probable tu, de adirije IP $1,\nia rejistra un conta \"$2\" con esta adirije de eposta en {{SITENAME}}.\n\nPer confirma ce esta conta parteni vera a tu e per ativi\nfunsionas epostal en {{SITENAME}}, abri esta lia en tua surfador:\n\n$3\n\nSi tu *no* ia rejistra la conta, segue esta lia\nper cansela la confirma de adirije de eposta:\n\n$5\n\nEsta codigo de confirma va desvalidi a $4.",
+       "confirmemail_body_changed": "Algun, probable tu, de adirije IP $1,\nia cambia la adirije de eposta de la conta \"$2\" en {{SITENAME}} a esta adirije.\n\nPer confirma ce esta conta parteni vera a tu e per reativi\nfunsionas epostal en {{SITENAME}}, abri esta lila en tua surfador:\n\n$3\n\nSi la conta *no* parteni a tu, segue esta lia\nper cansela la confirma de adirije de eposta:\n\n$5\n\nEsta codigo de confirma va desvalidi a $4.",
+       "confirmemail_body_set": "Algun, probable tu, de adirije IP $1,\nia defini la adirije de eposta de la conta \"$2\" en {{SITENAME}} a esta adirije.\n\nPer confirma ce esta conta parteni vera a tu e per ativi\nfunsionas de eposta en {{SITENAME}}, abri esta lia en tua surfador:\n\n$3\n\nSi la conta *no* parteni a tu, segue esta lia\nper cansela la confirma de adirije de eposta:\n\n$5\n\nEsta codigo de confirma va desvalidi a $4.",
+       "confirmemail_invalidated": "Confirma de adirije de eposta canselada",
+       "invalidateemail": "Cansela confirma de eposta",
+       "notificationemail_subject_changed": "Adirije de eposta rejistrada [er {{SITENAME}} es cambiada",
+       "notificationemail_subject_removed": "Adirije de eposta rejistrada [er {{SITENAME}} es sutraeda",
+       "notificationemail_body_changed": "Algun, probable tu, de adirije IP $1,\nia cambia la adirije de eposta de la conta \"$2\" a \"$3\" en {{SITENAME}}.\n\nSi esta no ia es tu, contata direta un dirijor de la pajeria.",
+       "notificationemail_body_removed": "Algun, probable tu, de adirije IP $1,\nia sutrae la adirije de eposta de la conta \"$2\" en {{SITENAME}}.\n\nSi esta no ia es tu, contata direta un dirijor de la pajeria.",
+       "scarytranscludedisabled": "[Transcluis intervical es descomutada]",
+       "scarytranscludefailed": "[Retrae de stensil ia fali per $1]",
+       "scarytranscludefailed-httpstatus": "[Retrae de stensil ia fali per $1: HTTP $2]",
+       "scarytranscludetoolong": "[URL es tro longa]",
+       "deletedwhileediting": "<strong>Avisa:</strong> Esta paje ia es sutraeda pos cuando tu ia comensa edita!",
+       "recreate": "Recrea",
+       "confirm-purge-title": "Purga esta paje",
        "confirm_purge_button": "Oce",
+       "confirm-purge-top": "Vacui la prememoria de esta paje?",
+       "confirm-watch-button": "Oce",
+       "confirm-watch-top": "Ajunta esta paje a tua lista monitorida?",
+       "confirm-unwatch-button": "Oce",
+       "confirm-unwatch-top": "Sutrae esta paje de tua lista monitorida?",
+       "confirm-rollback-button": "Oce",
+       "confirm-rollback-top": "Reversa editas a esta paje?",
+       "quotation-marks": "$1",
+       "imgmultipageprev": "← paje presedente",
        "imgmultipagenext": "paje seguente →",
        "imgmultigo": "Vade!",
        "imgmultigoto": "Vade a paje $1",
-       "watchlisttools-clear": "Vacui la lista de pajes monitorida.",
+       "img-lang-default": "(lingua inisial)",
+       "img-lang-info": "Render esta imaje en $1. $2",
+       "img-lang-go": "Vade",
+       "ascending_abbrev": "asen",
+       "descending_abbrev": "desen",
+       "table_pager_next": "Paje seguente",
+       "table_pager_prev": "Paje presedente",
+       "table_pager_first": "Paje prima",
+       "table_pager_last": "Paje final",
+       "table_pager_limit": "Mostra $1 puntos per paje",
+       "table_pager_limit_label": "Puntos per paje:",
+       "table_pager_limit_submit": "Vade",
+       "table_pager_empty": "No resultas",
+       "autosumm-blank": "Paje vacuida",
+       "autosumm-replace": "Contenida sustituida par \"$1\"",
+       "autoredircomment": "Paje redirijeda a [[$1]]",
+       "autosumm-new": "Paje creada con \"$1\"",
+       "autosumm-newblank": "Paje vacua creada",
+       "lag-warn-normal": "Cambias plu resente ca $1 {{PLURAL:$1|secondo|secondos}} ante aora es cisa no mostrada en esta lista.",
+       "lag-warn-high": "Par causa de retarda alta de la servador de datos, cambias plu resente ca $1 {{PLURAL:$1|secondo|secondos}} ante aora es cisa no mostrada en esta lista.",
+       "watchlistedit-normal-title": "Edita pajes monitorida",
+       "watchlistedit-normal-legend": "Sutrae pajes de lista monitorida",
+       "watchlistedit-normal-explain": "Titulos en tua lista de pajes monitorida es mostrada a su.\nPer sutrae un titulo, marca la caxa a lado e clica \"{{int:Watchlistedit-normal-submit}}\".\nTu pote ance [[Special:EditWatchlist/raw|edita la lista cru]].",
+       "watchlistedit-normal-submit": "Sutrae titulos",
+       "watchlistedit-normal-done": "{{PLURAL:$1|Un titulo|$1 titulos}} ia es sutraeda de tua lista de pajes monitorida:",
+       "watchlistedit-raw-title": "Edita lista cru de pajes monitorida",
+       "watchlistedit-raw-legend": "Edita lista cru de pajes monitorida",
+       "watchlistedit-raw-explain": "Titulos en tua lista de pajes monitorida es mostrada a su, e pote es editada par ajunta a e sutrae de la lista;\nun titulo per linia. Cuando tu ia fini, clica \"{{int:Watchlistedit-raw-submit}}\".\nTu pote ance [[Special:EditWatchlist|usa la editador normal]].",
+       "watchlistedit-raw-titles": "Titulos:",
+       "watchlistedit-raw-submit": "Fisa la lista",
+       "watchlistedit-raw-done": "Tua lista de pajes monitorida es cambiada.",
+       "watchlistedit-raw-added": "{{PLURAK:$1|1 titulo|$1 titulos}} ia es ajuntada:",
+       "watchlistedit-raw-removed": "{{PLURAL:$1|1 titulo|$1 titulos}} ia es sutraeda:",
+       "watchlistedit-clear-title": "Vacui la lista de pajes monitorida",
+       "watchlistedit-clear-legend": "Vacui la lista de pajes monitorida",
+       "watchlistedit-clear-explain": "Tota titulos va es sutraeda de tua lista monitorida",
+       "watchlistedit-clear-titles": "Titulos:",
+       "watchlistedit-clear-submit": "Vacui la lista (Esta es permanente!)",
+       "watchlistedit-clear-done": "Tua lista de pajes monitorida es vacuida.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 titulo|$1 titulos}} ia es sutraeda:",
+       "watchlistedit-too-many": "La lista ave tro multe pajes per mostra asi.",
+       "watchlisttools-clear": "Vacui la lista monitorida.",
        "watchlisttools-view": "Mostra cambias pertinente",
-       "watchlisttools-edit": "Mostra e edita la lista de pajes monitorida",
+       "watchlisttools-edit": "Mostra e edita la lista monitorida",
        "watchlisttools-raw": "Edita la lista cru de pajes monitorida",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|discute]])",
        "version": "Varia",
+       "version-extensions": "Estendentes instalada",
+       "version-skins": "Peles instalada",
+       "version-specialpages": "Pajes spesial",
+       "version-parserhooks": "Estendentes de analisador sintatical",
+       "version-variables": "Variables",
+       "version-antispam": "Preveni de spam",
+       "version-other": "Otra",
+       "version-mediahandlers": "Tratadores de media",
+       "version-hooks": "Estendentes",
+       "version-parser-extensiontags": "Eticetas estendente de analisador sintatical",
+       "version-parser-function-hooks": "Estendentes funsional de analisador sintatical",
+       "version-hook-name": "Nom de estendente",
+       "version-hook-subscribedby": "Subscribed by",
        "version-version": "($1)",
+       "version-no-ext-name": "[no nom]",
+       "version-license": "Lisensa de MediaWiki",
+       "version-ext-license": "Lisensa",
+       "version-ext-colheader-name": "Estendente",
+       "version-skin-colheader-name": "Pel",
+       "version-ext-colheader-version": "Revisa",
+       "version-ext-colheader-license": "Lisensa",
+       "version-ext-colheader-description": "Descrive",
+       "version-ext-colheader-credits": "Autores",
+       "version-license-title": "Lisensa per $1",
+       "version-license-not-found": "No informas detaliada de lisensa ia es trovada per esta estendente.",
+       "version-credits-title": "\nAtribuis per $1",
+       "version-credits-not-found": "No informas detaliosa de atribui ia es trovada per esta estendente.",
+       "version-poweredby-credits": "Esta vici es realida par <strong> [https://www.mediawiki.org/ MediaWiki]</strong>, su direto de autor © 2001-$1 $2.",
+       "version-poweredby-others": "otras",
+       "version-poweredby-translators": "traduores a translatewiki.net",
+       "version-credits-summary": "Nos desira reconose la persones seguente per sua contribuis a [[Special:Version|MediaWiki]].",
+       "version-license-info": "MediaWiki es un program libre; tu pote redistribui lo e/o altera lo su la restrinjes de la Lisensa Publica Jeneral GNU como publicida par la Funda de Programes Libre (Free Software Foundation); o revisa 2 de la Lisensa, o (si tu prefere) cualce revisa plu tarda.\n\nMediaWiki es distribuida con la espera ce lo va es usosa, ma CON NO GARANTIA; lo an no ave la garantia implicada de CONVENI PER VENDE (merchantability) or CONVENI PER UN INTENDE SPESIFADA (fitness for a particular purpose). Vide la Lisensa Publica Jeneral GNU per plu detalias.\n\nEsperable tu ia reseta [{{SERVER}}{{SCRIPTPATH}}/COPYING un copia de la Lisensa Publica Jeneral GNU] con esta program; si no, scrive a Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA o [//www.gnu.org/licenses/old-licenses/gpl-2.0.html leje lo enlinia].",
+       "version-software": "Programes instalada",
+       "version-software-product": "Produida",
+       "version-software-version": "Revisa",
+       "version-entrypoints": "URLes de puntos de entra",
+       "version-entrypoints-header-entrypoint": "Punto de entra",
+       "version-entrypoints-header-url": "URL",
+       "version-libraries": "Bibliotecas instalada",
+       "version-libraries-library": "Biblioteca",
+       "version-libraries-version": "Revisa",
+       "version-libraries-license": "Lisensa",
+       "version-libraries-description": "Descrive",
+       "version-libraries-authors": "Autores",
        "redirect": "Redirije par fix, usor, paje, revisa o numero de arcivo",
        "redirect-summary": "Esta paje spesial redirije a un fix (si on spesifa un nom), un paje (si on spesifa un numero de revisa o de paje), un paje de usor (si on spesida un numero de usor), o un article de arcivo (si on spesifia un numero). Esemplos: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], or [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Vade",
        "redirect-page": "Numero de paje",
        "redirect-revision": "Revisa de paje",
        "redirect-file": "Nom de fix",
+       "redirect-not-exists": "Valua no trovada",
+       "fileduplicatesearch": "Xerca fixes duplida",
+       "fileduplicatesearch-summary": "Xerca fixes duplida, usante valuas axida.",
+       "fileduplicatesearch-filename": "Nom de fix:",
        "fileduplicatesearch-submit": "Xerca",
        "specialpages": "Pajes spesial",
+       "specialpages-note-top": "Esplica",
+       "specialpages-group-maintenance": "Reportas de manteni",
+       "specialpages-group-other": "Otra pajes spesial",
+       "specialpages-group-login": "Autentici / crea conta",
+       "specialpages-group-changes": "Cambias resente e rejistras",
+       "specialpages-group-media": "Reportas de media e cargas",
+       "specialpages-group-users": "Usores e diretos",
+       "specialpages-group-highuse": "Pajes de usa alta",
+       "specialpages-group-pages": "Listas de pajes",
+       "specialpages-group-pagetools": "Utiles de paje",
+       "specialpages-group-wiki": "Datos e utiles",
+       "specialpages-group-redirects": "Pajes spesial redirijente",
+       "specialpages-group-spam": "Utiles de spam",
+       "specialpages-group-developer": "Utiles de developor",
+       "blankpage": "Paje vacua",
+       "intentionallyblankpage": "On intende ce esta paje es vacua.",
+       "external_image_whitelist": "#Lasa esta linia esata como lo es<pre>\n#Pone fratos de regex (sola la parte cual apare entre //) a su\n#Estas va es comparada con la URLes de imajes esterna (liada)\n#Los cual coresponde va es mostrada como imajes; per la otras, sola un lia a la imaje va es mostrada\n#Linias comensante con # es tratada como comentas\n#Esta es sieca a leteras major\n\n#Pone tota fratos de regex supra esta linia. Lasa esta linia esata como lo es</pre>",
+       "tags": "Eticetas valida de cambia",
        "tag-filter": "Filtro par [[Special:Tags|eticeta]]:",
+       "tag-filter-submit": "Filtri",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Eticeta|Eticetas}}]]: $2)",
+       "tag-mw-contentmodelchange": "cambia de model de contenida",
+       "tags-tag": "Nom de eticeta",
+       "tags-display-header": "Apare en listas de cambias",
+       "tags-description-header": "Descrive plen de sinifia",
+       "tags-source-header": "Fonte",
+       "tags-active-header": "Ativa?",
+       "tags-hitcount-header": "Cambias eticetida",
        "tags-active-yes": "Si",
        "tags-active-no": "No",
+       "tags-source-extension": "Definida par la program",
+       "tags-source-manual": "Aplicada par mano par usores e botes",
+       "tags-source-none": "No plu usada",
+       "tags-edit": "edita",
+       "tags-delete": "sutrae",
+       "tags-activate": "ativi",
+       "tags-deactivate": "desativi",
        "tags-hitcount": "$1 {{PLURAL:$1|cambia|cambias}}",
+       "tags-manage-no-permission": "Tu no es permeteda a maneja eticetas de cambia.",
+       "tags-manage-blocked": "Tu no pote maneja eticetas de cambia cuando {{GENDER:$1|tu}} es impedida.",
+       "tags-create-heading": "Crea un eticeta nova",
+       "tags-create-explanation": "Inisial, eticetas nova creada va deveni disponable per usa par usores e botes.",
+       "tags-create-tag-name": "Nom de eticeta:",
+       "tags-create-reason": "Razona:",
+       "tags-create-submit": "Crea",
+       "tags-create-no-name": "Tu debe spesifa un nom de eticeta.",
+       "tags-create-invalid-chars": "Nomes de eticeta no pote conteni virgulas (<code>,</code>), baras vertical (<code>|</code>), o baras inclinada (<code>/</code>).",
+       "tags-create-invalid-title-chars": "Nomes de eticeta no pote conteni sinias cual on no pote usa en titulos de pajes.",
+       "tags-create-already-exists": "La eticeta \"$1\" esiste ja.",
+       "tags-create-warnings-above": "La {{PLURAL:$2|avisa|avisas}} seguente ia es encontrada en atenta crea la eticeta \"$1\":",
+       "tags-create-warnings-below": "Esce tu vole continua crea la eticeta?",
+       "tags-delete-title": "Sutrae eticeta",
+       "tags-delete-explanation-initial": "Tu es a punto de sutrae la eticeta \"$1\" de la banco de datos.",
+       "tags-delete-explanation-in-use": "Lo va es sutraeda de {{PLURAL:$2|$2 revisa o entrada|tota $2 revisas e/o entradas}} de rejistra a cual lo pertine aora.",
+       "tags-delete-explanation-warning": "Esta ata es <strong>nonreversable</strong> e <strong>no pote es desfada</strong>, an no par dirijores de banco de datos. Es serta ce esta es la eticeta cual tu intende sutrae.",
+       "tags-delete-explanation-active": "<strong>La eticeta \"$1\" es ancora ativa, e va continua es aplicada en la futur.</strong> Per preveni esta, vade a la loca(s) do la aplica de la eticeta es definida, e descomuta lo ala.",
+       "tags-delete-reason": "Razona:",
+       "tags-delete-submit": "Sutrae nonreversable esta eticeta",
+       "tags-delete-not-allowed": "Eticetas definida par un estendente no pote es sutraeda estra si la estendente permete lo.",
+       "tags-delete-not-found": "La eticeta \"$1\" no esiste.",
+       "tags-delete-too-many-uses": "La eticeta \"$1\" es aplicada a plu ca $2 {{PLURAL:$2|revisa|revisas}}, e donce lo no pote es sutraeda.",
+       "tags-delete-warnings-after-delete": "La eticeta \"$1\" ia es sutraeda, ma la {{PLURAL:$2|avisa|avisas}} seguente ia es encontrada:",
+       "tags-delete-no-permission": "Tu no es permeteda a sutrae eticetas de cambia.",
+       "tags-activate-title": "Ativi eticeta",
+       "tags-activate-question": "Tu es a punto de ativi la eticeta \"$1\".",
+       "tags-activate-reason": "Razona:",
+       "tags-activate-not-allowed": "Ativi de la eticeta \"$1\" no es posible.",
+       "tags-activate-not-found": "La eticeta \"$1\" no esiste.",
+       "tags-activate-submit": "Ativi",
+       "tags-deactivate-title": "Desativi eticeta",
+       "tags-deactivate-question": "Tu es a punto de desativi la eticeta \"$1\".",
+       "tags-deactivate-reason": "Razona:",
+       "tags-deactivate-not-allowed": "Desativi de la eticeta \"$1\" no es posible.",
+       "tags-deactivate-submit": "Desativi",
+       "tags-apply-no-permission": "Tu no es permeteda a aplica eticetas de cambia con tua cambias.",
+       "tags-apply-blocked": "Tu no pote aplica eticetas de cambia con tua cambias cuando {{GENDER:$1|tu}} es impedida.",
+       "tags-apply-not-allowed-one": "La eticeta \"$1\" no permete ce on aplica lo par mano.",
+       "tags-apply-not-allowed-multi": "La {{PLURAL:$2|eticeta|eticetas}} seguente no permete ce on aplica los par mano: $1",
+       "tags-update-no-permission": "Tu no es permeteda a ajunta o sutrae eticetas de cambia de revisas o entradas de rejistra individua.",
+       "tags-update-blocked": "Tu no pote ajunta o sutrae eticetas de cambia cuando {{GENDER:$1|tu}} es impedida.",
+       "tags-update-add-not-allowed-one": "La eticeta \"$1\" no permete ce on ajunta lo par mano.",
+       "tags-update-add-not-allowed-multi": "La {{PLURAL:$2|eticeta|eticetas}} seguente no permete ce on ajunta los par mano: $1",
+       "tags-update-remove-not-allowed-one": "La eticeta \"$1\" no permete ce on sutrae lo.",
+       "tags-update-remove-not-allowed-multi": "La {{PLURAL:$2|eticeta|eticetas}} seguente no permete ce on sutrae los par mano: $1",
+       "tags-edit-title": "Edita eticetas",
+       "tags-edit-manage-link": "Maneja eticetas",
+       "tags-edit-revision-selected": "{{PLURAL:$1|Revisa elejeda|Revisas elejeda}} de [[:$2]]:",
+       "tags-edit-logentry-selected": "{{PLURAL:$1|Entrada|Entradas}} elejeda de rejistra:",
+       "tags-edit-revision-legend": "Ajunta o sutrae eticetas en {{PLURAL:$1|esta revisa|tota $1 revisas}}",
+       "tags-edit-logentry-legend": "Ajunta o sutrae eticetas en {{PLURAL:$1|esta entrada|tota $1 entradas}} de rejistra",
+       "tags-edit-existing-tags": "Eticetas esistente:",
+       "tags-edit-existing-tags-none": "<em>Zero</em>",
+       "tags-edit-new-tags": "Eticetas nova:",
+       "tags-edit-add": "Ajunta esta eticetas:",
+       "tags-edit-remove": "Ajunta esta eticetas:",
+       "tags-edit-remove-all-tags": "(sutrae tota eticetas)",
+       "tags-edit-chosen-placeholder": "Eleje alga eticetas",
+       "tags-edit-chosen-no-results": "No eticetas corespondente ia es trovada",
+       "tags-edit-reason": "Razona:",
+       "compare-page1": "Paje 1",
+       "compare-page2": "Paje 2",
+       "compare-submit": "Compara",
+       "diff-form": "Diferes",
+       "diff-form-oldid": "Numero de revisa vea (si desirada)",
+       "diff-form-revid": "Numero de revisa de difere",
+       "diff-form-submit": "Mostra diferes",
+       "permanentlink": "Lia permanente",
+       "permanentlink-revid": "Numero de revisa",
+       "permanentlink-submit": "Vade a revisa",
+       "dberr-problems": "Pardona! Esta pajeria esperia problemes tecnical.",
+       "dberr-again": "Per favore, pausa per alga minutos e recarga.",
+       "dberr-info": "(Banco de datos no es asedable: $1)",
+       "dberr-info-hidden": "(Banco de datos no es asedable)",
+       "dberr-usegoogle": "Tu pote usa Google per xerca entretempo.",
+       "dberr-outofdate": "Nota ce sua catalogos de nosa contenida es cisa nonfresca.",
+       "dberr-cachederror": "Esta es un copia prememorida de la paje solisitada, e es cisa nonfresca.",
+       "htmlform-invalid-input": "Alga de tua enflue ave problemes.",
+       "htmlform-select-badoption": "La valua spesifada no es un eleje valida.",
+       "htmlform-int-invalid": "La valua spesifada no es un entero.",
+       "htmlform-float-invalid": "La valua spesifada no es un cuantia numeral.",
+       "htmlform-int-toolow": "La valua spesifada es min ca la minima, $1.",
+       "htmlform-int-toohigh": "La valua spesifada es plu ca la masima, $1.",
+       "htmlform-required": "Esta valua es nesesada.",
+       "htmlform-submit": "Envia",
+       "htmlform-reset": "Desfa cambias",
+       "htmlform-selectorother-other": "Otra",
+       "htmlform-no": "No",
+       "htmlform-yes": "Si",
+       "htmlform-chosen-placeholder": "Eleje",
+       "htmlform-cloner-create": "Ajunta plu",
+       "htmlform-cloner-delete": "Sutrae",
+       "htmlform-cloner-required": "A la min un valua es nesesada.",
+       "htmlform-date-placeholder": "YYYY-MM-DD",
+       "htmlform-time-placeholder": "HH:MM:SS",
+       "htmlform-datetime-placeholder": "YYYY-MM-DD HH:MM:SS",
+       "htmlform-date-invalid": "La valua spesifada no es reconoseda como un data. Proba la formato YYYY-MM-DD.",
+       "htmlform-time-invalid": "La valua spesifada no es reconoseda como un ora. Proba la formato HH:MM:SS.",
+       "htmlform-datetime-invalid": "La valua spesifada no es reconoseda como un data e ora. Proba la formato YYYY-MM-DD HH:MM:SS.",
+       "htmlform-date-toolow": "La valua spesifada es ante la data la plu temprana permeteda, $1.",
+       "htmlform-date-toohigh": "La valua spesifada es pos la data la plu tarda permeteda, $1.",
+       "htmlform-time-toolow": "La valua spesifada es ante la ora la plu temprana permeteda, $1.",
+       "htmlform-time-toohigh": "La valua spesifada es pos la ora la plu tarda permeteda, $1.",
+       "htmlform-datetime-toolow": "La valua spesifada es ante la data e ora la plu temprana permeteda, $1.",
+       "htmlform-datetime-toohigh": "La valua spesifada es pos la data e ora la plu tarda permeteda, $1.",
+       "htmlform-title-badnamespace": "[[:$1]] no es en la spasio de nom \"{{ns:$2}}\".",
+       "htmlform-title-not-creatable": "\"$1\" no es un titulo de paje creable",
+       "htmlform-title-not-exists": "$1 no esiste.",
+       "htmlform-user-not-exists": "<strong>$1</strong> no esiste.",
+       "htmlform-user-not-valid": "<strong>$1</strong> no es un nom valida de usor",
        "logentry-delete-delete": "$1 {{GENDER:$2|sutrae}} paje $3",
+       "logentry-delete-delete_redir": "\n$1 {{GENDER:$2|sutrae}} redirije $3 par suprascrive",
        "logentry-delete-restore": "$1 {{GENDER:$2|restora}} paje $3 ($4)",
+       "logentry-delete-restore-nocount": "$1 {{GENDER:$2|restora}} paje $3",
+       "restore-count-revisions": "{{PLURAL:$|1 revisa|$1 revisas}}",
+       "restore-count-files": "{{PLURAL:$|1 fix|$1 fixes}}",
+       "logentry-delete-event": "$1 {{GENDER:$2|cambia}} la vidablia de {{PLURAL:$5|un entrada|$5 entradas}} de rejistra en $3: $4",
        "logentry-delete-revision": "$1 {{GENDER:$2|cambia}} la vidablia de {{PLURAL:$5|un revisa|$5 revisas}} en paje $3: $4",
+       "logentry-delete-event-legacy": "$1 {{GENDER:$2|cambia}} la vidablia de entradas de rejistra en $3",
+       "logentry-delete-revision-legacy": "$1 {{GENDER:$2|cambia}} la vidablia de revisas en $3",
+       "logentry-suppress-delete": "$1 {{GENDER:$2|supresa}} paje $3",
+       "logentry-suppress-event": "$1 {{GENDER:$2|cambia}} secreta la vidablia de {{PLURAL:$5|un entrada|$5 entradas}} de rejistra en $3: $4",
+       "logentry-suppress-revision": "$1 {{GENDER:$2|cambia}} secreta la vidablia de {{PLURAL:$5|un revisa|$5 revisas}} en $3: $4",
+       "logentry-suppress-event-legacy": "$1 {{GENDER:$2|cambia}} secreta la vidablia de entradas de rejistra en $3",
+       "logentry-suppress-revision-legacy": "$1 {{GENDER:$2|cambia}} secreta la vidablia de revisas en paje $3",
        "revdelete-content-hid": "contenida ascondeda",
+       "revdelete-summary-hid": "asconde de resoma de edita",
+       "revdelete-uname-hid": "asconde de nom de usor",
+       "revdelete-content-unhid": "desasconde de contenida",
+       "revdelete-summary-unhid": "desasconde de resoma de edita",
+       "revdelete-uname-unhid": "desasconde de nom de usor",
+       "revdelete-restricted": "aplica de restrinjes a dirijores",
+       "revdelete-unrestricted": "sutrae de restrinjes per dirijores",
        "logentry-move-move": "$1 {{GENDER:$2|move}} paje $3 a $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|move}} la paje $3 a $4 sin lasa un redirije",
        "logentry-move-move_redir": "$1 {{GENDER:$2|move}} la paje $3 a $4 con redirije",
        "logentry-newusers-autocreate": "Conta de usor $1 es automata {{GENDER:$2|creada}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|carga}} $3",
        "logentry-upload-overwrite": "$1 {{GENDER:$2|carga}} un varia nova de $3",
+       "log-name-tag": "Rejistra de eticetas",
+       "log-description-tag": "Esta paje mostra cuando usores ia ajunta o sutrae [[Special:Tags|eticetas]] de revisas o entradas de rejistra individua. La rejistra no lista atas de eticeta cuando los aveni como parte de un edita, sutrae o otra ata simil.",
+       "logentry-tag-update-add-revision": "$1 {{GENDER:$2|ajunta}} la {{PLURAL:$7|eticeta|eticetas}} $6 a revisa $4 de paje $3",
+       "logentry-tag-update-add-logentry": "$1 {{GENDER:$2|ajunta}} la {{PLURAL:$7|eticeta|eticetas}} $6 a entrada de rejistra $5 de paje $3",
+       "logentry-tag-update-remove-revision": "$1 {{GENDER:$2|sutrae}} la {{PLURAL:$9|eticeta|eticetas}} $8 de revisa $4 de paje $3",
+       "logentry-tag-update-remove-logentry": "$1 {{GENDER:$2|sutrae}} la {{PLURAL:$9|eticeta|eticetas}} $8 de entrada de rejistra $5 de paje $3",
+       "logentry-tag-update-revision": "$1 {{GENDER:$2|ajusta}} eticetas en revisa $4 de paje $3 ({{PLURAL:$7|ajunta}} $6; {{PLURAL:$9|sutrae}} $8)",
+       "logentry-tag-update-logentry": "$1 {{GENDER:$2|ajusta}} eticetas en entrada de rejistra $5 de paje $3 ({{PLURAL:$7|ajunta}} $6; {{PLURAL:$9|sutrae}} $8)",
+       "rightsnone": "(zero)",
+       "rightslogentry-temporary-group": "$1 (tempora, asta $2)",
+       "feedback-adding": "Ajuntante comenta a paje...",
+       "feedback-back": "Retro",
+       "feedback-bugcheck": "Bon! Ma serti ce lo no es ja un de la [$1 defetos conoseda], per favore.",
+       "feedback-bugnew": "Me es serta. Reporta un defeto nova",
+       "feedback-bugornote": "Si tu vole descrive la detalias de un problem tecnical, [$1 reporta un defeto], per favore.\nSi no, tu pote usa la formulario fasil a su. Tua comenta va es ajuntada a la paje \"[$3 $2]\", con ance tua nom de usor.",
+       "feedback-cancel": "Cansela",
+       "feedback-close": "Fada",
+       "feedback-external-bug-report-button": "Envia un report tecnical",
+       "feedback-dialog-title": "Envia comenta",
+       "feedback-dialog-intro": "Tu pote usa la formulario a su per envia tua comenta. Tua comenta va es ajuntada a la paje \"$1\", con ance tua nom de usor.",
+       "feedback-error1": "Era: Resulta nonreconoseda de API",
+       "feedback-error2": "Era: Fali de edita",
+       "feedback-error3": "Era: API no responde",
+       "feedback-error4": "Era: Envia a la titulo comental spesifada no es posible",
+       "feedback-message": "Mesaje:",
+       "feedback-subject": "Tema:",
+       "feedback-submit": "Envia",
+       "feedback-terms": "Me comprende ce mea informa de surfador inclui informas esata sur mea revisa de surfador e sistem de opera, e va es publica compartida con mea comenta.",
+       "feedback-termsofuse": "Me acorda furni un comenta longo la Restrinjes de Usa.",
+       "feedback-thanks": "Grasias! Tua comenta apare en la paje \"[$2 $1]\".",
+       "feedback-thanks-title": "Grasias!",
+       "feedback-useragent": "Surfador:",
        "searchsuggest-search": "Xerca {{SITENAME}}",
+       "searchsuggest-containing": "conteninte...",
+       "api-error-badtoken": "Era interna: Mal marca.",
+       "api-error-emptypage": "La crea de pajes nova e vacua no es permeteda.",
+       "api-error-publishfailed": "Era interna: la servador ia fali publici un fix tempora.",
+       "api-error-stashfailed": "Era interna: la servador ia fali fisa un fix tempora.",
+       "api-error-unknown-warning": "Avisa nonconoseda: \"$1\".",
        "duration-days": "$1 {{PLURAL:$1|dia|dias}}",
+       "limitreport-cputime": "Usa de tempo par prosedador",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|secondo|secondos}}",
+       "limitreport-walltime": "Usa de tempo real",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|secondo|secondos}}",
+       "limitreport-ppvisitednodes": "Cuantia de nodas visitada par preprosedador",
+       "limitreport-ppgeneratednodes": "Cuantia de nodas jenerada par preprosedador",
+       "limitreport-postexpandincludesize": "Grandia de inclui pos despaci",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bait|baites}}",
+       "limitreport-templateargumentsize": "Grandia de parametres de stensil",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bait|baites}}",
+       "limitreport-expansiondepth": "Profondia la plu grande de despaci",
+       "limitreport-expensivefunctioncount": "Cuantia de funsionas custosa de analisador sintatical",
+       "expandtemplates": "Despaci stensiles",
+       "expand_templates_intro": "Esta paje spesial prende testo e despaci tota stensiles en lo, en modo recorsante.\nLo despaci ance funsionas suportada de analisador sintatical como\n<code><nowiki>{{</nowiki>#language:…}}</code> e variables como\n<code><nowiki>{{</nowiki>CURRENTDAY}}</code>.\nEn fato, lo despaci cuasi tota cosas entre brasetas risa duple.",
+       "expand_templates_input": "Testo enflual:",
+       "expand_templates_output": "Resulta",
+       "expand_templates_xml_output": "Esflue XML",
+       "expand_templates_html_output": "Esflue HTML cru",
        "expand_templates_ok": "Oce",
-       "randomrootpage": "Paje acaso de radis"
+       "expand_templates_remove_comments": "Sutrae comentas",
+       "expand_templates_remove_nowiki": "Supresa eticetas <nowiki> en resulta",
+       "expand_templates_generate_xml": "Mostra arbor de analise XML",
+       "expand_templates_generate_rawhtml": "Mostra HTML cru",
+       "expand_templates_preview": "Previde",
+       "expand_templates_preview_fail_html": "<em>Car HTML cru es comutada en {{SITENAME}} e datos de sesion ia es perdeda, la previde es ascondeda per preveni atacas par JavaScript.</em>\n\n<strong>Si esta es un atenta valida de previde, atenta denova, per favore.</strong>\nSi lo ancora no funsiona, proba [[Special:UserLogout|desautentici]] e reautentici, e serti ce tua surfador permete cucis de esta pajeria.",
+       "expand_templates_preview_fail_html_anon": "\n<em>Car HTML cru es comutada en {{SITENAME}} e tu no es autenticida, la previde es ascondeda per preveni atacas par JavaScript.</em>\n\n<strong>Si esta es un atenta valida de previde, [[Special:UserLogin|autentici]] e atenta denova, per favore.</strong>",
+       "expand_templates_input_missing": "Tu debe furni a la min alga testo enflual.",
+       "pagelanguage": "Cambia lingua de paje",
+       "pagelang-name": "Paje",
+       "pagelang-language": "Lingua",
+       "pagelang-use-default": "Usa lingua inisial",
+       "pagelang-select-lang": "Eleje lingua",
+       "pagelang-reason": "Razona",
+       "pagelang-submit": "Envia",
+       "right-pagelang": "Cambia lingua de paje",
+       "action-pagelang": "cambia la lingua de paje",
+       "log-name-pagelang": "Rejistra de cambias de lingua",
+       "log-description-pagelang": "Esta es un rejistra de cambias de linguas de paje.",
+       "default-skin-not-found-row-enabled": "* <code>$1</code> / $2 (comutada)",
+       "default-skin-not-found-row-disabled": "* <code>$1</code> / $2 (<strong>descomutada</strong>)",
+       "mediastatistics": "Statisticas de medias",
+       "mediastatistics-summary": "Statisticas sur tipos de fix cargada. Esta inclui sola la revisa la plu resente de un fix. Revisas vea o sutraeda de fixes es escluida.",
+       "mediastatistics-nbytes": "{{PLURAL:$1|$1 byte|$1 bytes}} ($2; $3%)",
+       "mediastatistics-bytespertype": "Grandia intera de fix per esta parte: {{PLURAL:$1|$1 bait|$1 baites}} ($2; $3%).",
+       "mediastatistics-allbytes": "\nGrandia intera de fix per tota fixes: {{PLURAL:$1|$1 bait|$1 baites}} ($2).",
+       "mediastatistics-table-mimetype": "Tipo MIME",
+       "mediastatistics-table-extensions": "Estendentes posible",
+       "mediastatistics-table-count": "Cuantia de fixes",
+       "mediastatistics-table-totalbytes": "Grandia combinada",
+       "mediastatistics-header-unknown": "Nonconoseda",
+       "mediastatistics-header-bitmap": "Imajes matrisin",
+       "mediastatistics-header-drawing": "Desinias (imajes vetoral)",
+       "mediastatistics-header-audio": "Audio",
+       "mediastatistics-header-video": "Videos",
+       "mediastatistics-header-multimedia": "Medias rica",
+       "mediastatistics-header-office": "Ofisia",
+       "mediastatistics-header-text": "Testo",
+       "mediastatistics-header-executable": "Esecutables",
+       "mediastatistics-header-archive": "Formatos compresada",
+       "mediastatistics-header-total": "Tota fixes",
+       "json-warn-trailing-comma": "$1 {{PLURAL:$1|virgula|virgulas}} codal ia es sutraeda de JSON",
+       "json-error-unknown": "La JSON ia ave un problem. Era: $1",
+       "json-error-depth": "La profondia masima de pila es esededa",
+       "json-error-ctrl-char": "Era de sinia controlante, cisa noncoreta codigida",
+       "json-error-syntax": "Era de sintatica",
+       "json-error-utf8": "Sinias UTF-8 malformida, cisa noncoreta codigida",
+       "json-error-recursion": "La valua per codigi conteni un o plu referes recorsante",
+       "json-error-inf-or-nan": "La valua per codigi conteni un o plu valuas NAN o INF",
+       "json-error-unsupported-type": "Un valua de un tipo noncodigable ia es donada",
+       "headline-anchor-title": "Lia a esta parte",
+       "special-characters-group-latin": "Latina",
+       "special-characters-group-latinextended": "Latina estendeda",
+       "special-characters-group-ipa": "AFI",
+       "special-characters-group-symbols": "Simboles",
+       "special-characters-group-greek": "Elinica",
+       "special-characters-group-greekextended": "Elinica estendeda",
+       "special-characters-group-cyrillic": "Cirilica",
+       "special-characters-group-arabic": "Arabi",
+       "special-characters-group-arabicextended": "Arabi estendeda",
+       "special-characters-group-persian": "Farsi",
+       "special-characters-group-hebrew": "Ivri",
+       "special-characters-group-bangla": "Bangla",
+       "special-characters-group-tamil": "Tamil",
+       "special-characters-group-telugu": "Telugu",
+       "special-characters-group-sinhala": "Sinala",
+       "special-characters-group-gujarati": "Gudjarati",
+       "special-characters-group-devanagari": "Devanagari",
+       "special-characters-group-thai": "Tai",
+       "special-characters-group-lao": "Lau",
+       "special-characters-group-khmer": "Cmer",
+       "special-characters-group-canadianaboriginal": "Canadian orijinal",
+       "special-characters-title-endash": "duilinia orizonal",
+       "special-characters-title-emdash": "linia orizonal",
+       "special-characters-title-minus": "sinia negativa",
+       "mw-widgets-dateinput-no-date": "No data elejeda",
+       "mw-widgets-mediasearch-input-placeholder": "Xerca medias",
+       "mw-widgets-mediasearch-noresults": "No resultas trovada.",
+       "mw-widgets-titleinput-description-new-page": "paje ancora no esiste",
+       "mw-widgets-categoryselector-add-category-placeholder": "Ajunta un categoria...",
+       "mw-widgets-usersmultiselect-placeholder": "Ajunta un categoria...",
+       "date-range-from": "De data:",
+       "date-range-to": "Asta data:",
+       "sessionmanager-tie": "Tipos multiple de autentici de solisita no pote es combinada: $1.",
+       "sessionprovider-generic": "sesiones de $1",
+       "sessionprovider-mediawiki-session-cookiesessionprovider": "sesiones con cucis",
+       "sessionprovider-nocookies": "Cucis es cisa descomutada. Serti ce tu ia comuta cucis e comensa denova.",
+       "randomrootpage": "Paje acaso de radis",
+       "log-action-filter-contentmodel": "Tipo de cambia de model de contenida:",
+       "log-action-filter-delete": "Tipo de sutrae:",
+       "log-action-filter-import": "Tipo de emporta:",
+       "log-action-filter-managetags": "Tipo de ata de maneja de eticeta:",
+       "log-action-filter-move": "Tipo de move:",
+       "log-action-filter-newusers": "Tipo de crea de conta:",
+       "log-action-filter-patrol": "Tipo de patrulia:",
+       "log-action-filter-protect": "Tipo de proteje:",
+       "log-action-filter-rights": "Tipo de cambia de direto:",
+       "log-action-filter-suppress": "Tipo de supresa:",
+       "log-action-filter-upload": "Tipo de carga:",
+       "log-action-filter-all": "Tota",
+       "authmanager-authn-not-in-progress": "Autentici no aveni, o datos de sesion es perdeda. Per favore, comensa denova.",
+       "authmanager-authn-no-primary": "La identia furnida no ia pote es autenticida.",
+       "authmanager-authn-no-local-user": "La identia furnida no es asosiada con un usor de esta vici.",
+       "gotointerwiki-external": "Tu es a punto de parti de {{SITENAME}} per visita [[$2]], cual es un pajeria separada.\n\n'''[$1 Continua a $1]'''",
+       "undelete-cantedit": "Tu no pote desutrae esta paje car tu no es permeteda a edita esta paje.",
+       "undelete-cantcreate": "Tu no pote desutrae esta paje car no paje esiste con esta nom e tu no es permeteda a crea esta paje.",
+       "pagedata-title": "Datos de paje",
+       "pagedata-text": "Esta paje furni un interfas a datos de pajes. Per favore, furni la titulo de paje en la URL, usante la sintatica de supajes.\n* Negosia de contenida segue la xapo Accept de tua surfador. Esta vole dise ce la datos de paje va es furnida en la formato prefereda par tua surfador.",
+       "pagedata-not-acceptable": "No formato conveninte ia es trovada. Tipos MIME suportada: $1",
+       "pagedata-bad-title": "Titulo nonvalida: $1."
 }
index 6815b8e..83c8a92 100644 (file)
        "parser-template-loop-warning": "Пронајдена е јамка во шаблонот: [[$1]]",
        "template-loop-category": "Страници со шаблонски јамки",
        "template-loop-category-desc": "Страницава содржи шаблонска јамка, т.е. шаблон кој повторливо се самоповикува",
+       "template-loop-warning": "<strong>Предупредување:</strong> Страницава го повикува [[:$1]], што предизвикува јамка во шаблонот (бесконечно повторлив повик).",
        "parser-template-recursion-depth-warning": "Пречекорена е границата на длабочината на рекурзијата во шаблонот ($1)",
        "language-converter-depth-warning": "Пречекорена е границата на длабочината на јазичниот претворач ($1)",
        "node-count-exceeded-category": "Страници каде е надминат бројот на јазли",
        "timezoneregion-indian": "Индиски Океан",
        "timezoneregion-pacific": "Тихи Океан",
        "allowemail": "Дозволи е-пошта од други корисници",
+       "email-blacklist-label": "Забрани им на следниве корисници да ми праќаат е-пошта:",
        "prefs-searchoptions": "Пребарување",
        "prefs-namespaces": "Именски простори",
        "default": "по основно",
        "rcfilters-watchlist-markseen-button": "Означи ги сите промени како видени",
        "rcfilters-watchlist-edit-watchlist-button": "Уреди набљудувани",
        "rcfilters-watchlist-showupdated": "Промени во страниците што ги немате посетено откако се случиле се <strong>задебелени</strong>.",
+       "rcfilters-preference-label": "Скриј ја подобрената верзија во Скорешните промени",
+       "rcfilters-preference-help": "Го отповикува преуредувањето на околината од 2017 г. и сите алатки додадени оттогаш.",
        "rcnotefrom": "Подолу {{PLURAL:$5|е прикажана промената|се прикажани промените}} почнувајќи од <strong>$3, $4</strong>  (се прикажуваат до <b>$1</b>).",
        "rclistfromreset": "Нов избор на датуми",
        "rclistfrom": "Прикажи нови промени почнувајќи од $3 $2",
        "uploadbtn": "Подигни",
        "reuploaddesc": "Прекини и назад кон образецот за подигање",
        "upload-tryagain": "Поднеси изменет опис на податотеката",
+       "upload-tryagain-nostash": "Поднеси преподигната податотека и изменет опис",
        "uploadnologin": "Не сте најавени",
        "uploadnologintext": "Мора да сте $1 за да можете да подигате.",
        "upload_directory_missing": "Папката за подигање на слики ($1) не постои и не може да биде создадена од опслужувачот.",
        "file-deleted-duplicate-notitle": "Податотека сосем иста како оваа била претходно избришана, а насловот бил притаен.\nТреба да побарате од некој што има можност да гледа податоци за притаени податотеки да ја разгледа ситуацијата пред да продолжите со преподигањето.",
        "uploadwarning": "Предупредување при подигање",
        "uploadwarning-text": "Изменете го описот на податотеката подолу и обидете се повторно.",
+       "uploadwarning-text-nostash": "Преподигнете ја податотеката, изменете го описот подолу и обидете се пак.",
        "savefile": "Зачувај податотека",
        "uploaddisabled": "Забрана за подигања",
        "copyuploaddisabled": "Подигањето од URL е оневозможено.",
        "listfiles_size": "Големина",
        "listfiles_description": "Опис",
        "listfiles_count": "Верзии",
-       "listfiles-show-all": "Давај и стари верзии на сликите",
+       "listfiles-show-all": "Давај и стари верзии на податотеките",
        "listfiles-latestversion": "Тековна верзија",
        "listfiles-latestversion-yes": "Да",
        "listfiles-latestversion-no": "Не",
        "sp-contributions-newonly": "Прикажувај само новосоздадени страници",
        "sp-contributions-hideminor": "Скриј ситни промени",
        "sp-contributions-submit": "Пребарај",
+       "sp-contributions-outofrange": "Не можам да прикажам исход. Бараниот опсег на IP-адреси е поголем од допуштените /$1 во CIDR.",
        "whatlinkshere": "Што води овде",
        "whatlinkshere-title": "Страници со врски што водат до „$1“",
        "whatlinkshere-page": "Страница:",
index 5e835fa..e151d5d 100644 (file)
@@ -35,9 +35,9 @@
                ]
        },
        "tog-underline": "കണ്ണികൾക്ക് അടിവരയിടുക:",
-       "tog-hideminor": "à´ªàµ\81തിയ à´®à´¾à´±àµ\8dà´±à´\99àµ\8dà´\99à´³àµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിൽ à´\9aàµ\86റിയ à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´\95ൾ à´ªàµ\8dരദർശിപàµ\8dപിà´\95àµ\8dà´\95ാതിരിക്കുക",
-       "tog-hidepatrolled": "à´±àµ\8bà´¨àµ\8dà´¤àµ\81à´\9aàµ\81à´±àµ\8dറിയ à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´\95ൾ à´ªàµ\81തിയമാറàµ\8dà´±à´\99àµ\8dà´\99ളിൽ à´ªàµ\8dരദർശിപàµ\8dപിà´\95àµ\8dà´\95ാതിരിക്കുക",
-       "tog-newpageshidepatrolled": "à´±àµ\8bà´¨àµ\8dà´¤àµ\81à´\9aàµ\81à´±àµ\8dറപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9f à´¤à´¾à´³àµ\81à´\95ൾ à´ªàµ\81തിയതാളàµ\81à´\95à´³àµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിൽ à´ªàµ\8dരദർശിപàµ\8dപിà´\95àµ\8dà´\95ാതിരിക്കുക",
+       "tog-hideminor": "à´ªàµ\81തിയ à´®à´¾à´±àµ\8dà´±à´\99àµ\8dà´\99à´³àµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിൽ à´\9aàµ\86റിയ à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´\95ൾ à´®à´±à´¯àµ\8dക്കുക",
+       "tog-hidepatrolled": "à´±àµ\8bà´¨àµ\8dà´¤àµ\81à´\9aàµ\81à´±àµ\8dറിയ à´¤à´¿à´°àµ\81à´¤àµ\8dà´¤àµ\81à´\95ൾ à´ªàµ\81തിയമാറàµ\8dà´±à´\99àµ\8dà´\99ളിൽ à´®à´±à´¯àµ\8dക്കുക",
+       "tog-newpageshidepatrolled": "à´±àµ\8bà´¨àµ\8dà´¤àµ\81à´\9aàµ\81à´±àµ\8dറപàµ\8dà´ªàµ\86à´\9fàµ\8dà´\9f à´¤à´¾à´³àµ\81à´\95ൾ à´ªàµ\81തിയതാളàµ\81à´\95à´³àµ\81à´\9fàµ\86 à´ªà´\9fàµ\8dà´\9fà´¿à´\95യിൽ à´®à´±à´¯àµ\8dക്കുക",
        "tog-hidecategorization": "താളുകളുടെ വർഗ്ഗീകരണം മറയ്ക്കുക",
        "tog-extendwatchlist": "ഏറ്റവും പുതിയവ മാത്രമല്ല, എല്ലാ മാറ്റങ്ങളും ദൃശ്യമാകുന്ന വിധത്തിൽ ശ്രദ്ധിക്കുന്ന താളുകളുടെ പട്ടിക വികസിപ്പിക്കുക.",
        "tog-usenewrc": "സമീപകാല മാറ്റങ്ങൾ, ശ്രദ്ധിക്കുന്നവയുടെ പട്ടിക എന്നീ താളുകളിൽ മാറ്റങ്ങൾ ഗണംതിരിക്കുക",
index a29fd02..6dcc499 100644 (file)
        "navigation": "Nabegaçon",
        "and": "&#32;i",
        "faq": "FAQ",
+       "namespaces": "Domínios",
+       "variants": "Bariadades",
+       "navigation-heading": "Menu de nabegaçon",
        "errorpagetitle": "Erro",
        "returnto": "Retornar pa $1.",
        "tagline": "De {{SITENAME}}",
        "printableversion": "Berson pa ampremir",
        "permalink": "Lhigaçon pa siempre",
        "print": "Ampremir",
+       "view": "Ber",
        "edit": "Eiditar",
        "create": "Criar",
+       "create-local": "Poner çcriçon lhocal",
        "delete": "Botar fuora",
        "protect": "Porteger",
        "protect_change": "demudar",
        "unprotect": "Altarar la proteçon",
        "newpage": "Páigina nuoba",
-       "talkpagelinktext": "Cumbersar",
+       "talkpagelinktext": "cumbersa",
        "specialpage": "Páigina special",
        "personaltools": "Ferramientas pessonales",
        "talk": "Cumbersa",
        "viewsource": "Ber código-fuonte",
        "actionthrottled": "Acion lhemitada",
        "viewsourcetext": "Tu puodes ber i copiar l código desta páigina.",
+       "translateinterface": "Pa poner ó altarar traduçones pa todas las wikis, cunsidre outelizar la [https://translatewiki.net/wiki/Main_Page?setlang=mwl translatewiki.net], un porjeto çtinado a la traduçon de l MediaWiki.",
        "virus-scanfailed": "la berificaçon falhou (código $1)",
        "virus-unknownscanner": "antibírus çcoincido:",
        "yourname": "Nome de outelizador(a):",
        "emailauthenticated": "L sou andereço de correio eiletrónico fui cunfirmado la $2, a las $3.",
        "emailconfirmlink": "Cunfirma la tue morada de correio eiletrónico",
        "loginlanguagelabel": "Lhéngua: $1",
+       "pt-login": "Antrar",
+       "pt-createaccount": "Criar ua cuonta",
        "pt-userlogout": "Salir",
        "changepassword": "Demudar palabra-chabe",
        "resetpass_header": "Demudar palabra-chabe de la cuonta",
        "showdiff": "Amostrar altaraçones",
        "anoneditwarning": "<strong>Abiso</strong>: Tu nun stás outenticado(a). L tou IP será registrado ne l stórico de las eidiçones desta páigina. Se <strong>[$1 ampeçar sesson]</strong> ó <strong>[$2 criar ua cuonta]</strong>, las sues eidiçones seran registradas cul sou nome d'outelizador(a), an cunjunto cun outros benefícios.",
        "summary-preview": "Amostra de l sumário:",
-       "blockedtext": "<strong>L tou nome d'outelizador ó morada de IP foi bloquiado.</strong>\n\nL bloqueio fui feito por $1.\nLa rezon fui <em>$2</em>.\n\n* Ampeço de l bloqueio: $8\n* Balidade de l bloqueio: $6\n* Çtino de l bloqueio: $7\n\nTu puodes cuntatar $1 ó outro [[{{MediaWiki:Grouppage-sysop}}|admenistrador]] pa çcutir subre l bloqueio.\nBei que nun poderás outelizar la funcionalidade \"Cuntatar outelizador\" se nun tubires ua counta cun ua morada eiletrónica bálida andicada an las tues [[Special:Preferences|preferéncias d'outelizador]] i se tubires sido bloquiado de outelizar essa ferramienta.\nLa tue morada de IP atual ye $3 i la eidantificaçon (ID) de l bloqueio ye #$5.\nPor fabor, anclui un deilhes (ó dambos ls dous) dados an qualquier tentatibas de sclarecimentos.",
-       "autoblockedtext": "La sue morada de IP foi bloquiada de forma outomática porque fui outelizado recentemente por outro outelizador, l qual fui bloquiado por $1.\nLa rezon fui:\n\n:<em>$2</em>\n\n* Ampeço de l bloqueio: $8\n* Balidade de l bloqueio: $6\n* Çtino de l bloqueio: $7\n\nTu puodes cuntatar $1 ó outro [[{{MediaWiki:Grouppage-sysop}}|admenistrador]] pa çcutir subre l bloqueio.\n\nBei que nun poderás outelizar la funcionalidade \"Cuntatar outelizador\" se nun tubires ua counta cun ua morada eiletrónica bálida andicada an las tues [[Special:Preferences|preferéncias d'outelizador]] i se tubires sido bloquiado de outelizar essa ferramienta.\n\nLa tue morada de IP atual ye $3 i la eidantificaçon (ID) de l bloqueio ye #$5.\nPor fabor, anclui un deilhes (ó dambos ls dous) dados an qualquier tentatibas de sclarecimentos.",
+       "blockedtext": "<strong>L tou nome d'outelizador ó morada de IP foi bloquiado.</strong>\n\nL bloqueio fui feito por $1.\nLa rezon fui <em>$2</em>.\n\n* Ampeço de l bloqueio: $8\n* Balidade de l bloqueio: $6\n* Çtino de l bloqueio: $7\n\nTu puodes cuntatar $1 ó outro [[{{MediaWiki:Grouppage-sysop}}|admenistrador]] pa çcutir subre l bloqueio.\nBei que nun poderás outelizar la funcionalidade \"Cuntatar outelizador\" se nun tubires ua counta cun ua morada eiletrónica bálida andicada an las tues [[Special:Preferences|perfréncias d'outelizador]] i se tubires sido bloquiado de outelizar essa ferramienta.\nLa tue morada de IP atual ye $3 i la eidantificaçon (ID) de l bloqueio ye #$5.\nPor fabor, anclui un deilhes (ó dambos ls dous) dados an qualquier tentatibas de sclarecimentos.",
+       "autoblockedtext": "La sue morada de IP foi bloquiada de forma outomática porque fui outelizada recentemente por outro outelizador, l qual fui bloquiado por $1.\nLa rezon fui:\n\n:<em>$2</em>\n\n* Ampeço de l bloqueio: $8\n* Balidade de l bloqueio: $6\n* Çtino de l bloqueio: $7\n\nTu puodes cuntatar $1 ó outro [[{{MediaWiki:Grouppage-sysop}}|admenistrador]] pa çcutir subre l bloqueio.\n\nBei que nun poderás outelizar la funcionalidade \"Cuntatar outelizador\" se nun tubires ua counta cun ua morada eiletrónica bálida andicada an las tues [[Special:Preferences|perfréncias d'outelizador]] i se tubires sido bloquiado de outelizar essa ferramienta.\n\nLa tue morada de IP atual ye $3 i la eidantificaçon (ID) de l bloqueio ye #$5.\nPor fabor, anclui un deilhes (ó dambos ls dous) dados an qualquier tentatibas de sclarecimentos.",
        "systemblockedtext": "L sou nome d'outelizador ó morada de IP fúrun bloquiados outomaticamente pul MediaWiki.\nLa rezon fui:\n\n:<em>$2</em>\n\n* Ampeço de l bloqueio: $8\n* Balidade de l bloqueio: $6\n* Çtino de l bloqueio: $7\n\nLa tue morada de IP atual ye $3.\nPor fabor, anclui un deilhes (ó dambos ls dous) dados an qualquier tentatibas de sclarecimentos.",
        "loginreqtitle": "Outenticaçon oubrigatória",
        "loginreqlink": "antrar",
        "noarticletext": "Inda nun eisiste testo nesta páigina.\nTu puodes [[Special:Search/{{PAGENAME}}|percurar pul títalo desta páigina]] noutras páiginas,\n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} percurar ls registros que téngan a ber]\nó [{{fullurl:{{FULLPAGENAME}}|action=edit}} criar esta páigina]</span>.",
        "note": "'''Abiso:'''",
        "previewnote": "<strong>Lhembra-te qu'esto ye solo ua amostra.</strong>\nLas altaraçones inda nun fúrun grabadas!",
+       "continue-editing": "Nabegar pa la ária d'eidiçon",
        "editing": "A eiditar $1",
        "editingsection": "A eiditar $1 (cacho)",
        "yourtext": "L tou testo",
        "nocreatetext": "{{SITENAME}} restringe la possibilidade de criar nuobas páiginas.\nPuode buoltar atrás i eiditar ua páigina yá eisistente, ó [[Special:UserLogin|outenticar-se ó criar ua cuonta]].",
        "permissionserrorstext-withaction": "Tu nun tenes premisson pa $2, {{PLURAL:$1|pula seguinte rezon|pulas seguintes rezones}}:",
        "recreate-moveddeleted-warn": "<strong>Abiso: Tu stás a criar ua páigina que yá fui d'atrás botada fuora.</strong>\n\nBei bien se ye própio cuntinar a eiditar esta páigina.\nL registro de la eileminaçon i de l arrastrar ye amostrado eiqui por cumbeniéncia:",
-       "moveddeleted-notice": "Esta páigina fui apagada.\nL registro de la eileminaçon, proteçon i arrastrar desta páigina stá ambaixo pa refréncia.",
+       "moveddeleted-notice": "Esta páigina fui botada fuora.\nL registro de la eileminaçon, porteçon i arrastramiento desta páigina stá ambaixo pa refréncia.",
        "viewpagelogs": "Ber registros pa esta páigina",
        "currentrev": "Rebison atual",
        "currentrev-asof": "Eidiçon atual cumo $1",
        "history-feed-item-nocomment": "$1 a $2",
        "rev-delundel": "amostrar/scunder",
        "revdel-restore": "Demudar besiblidade",
+       "revdelete-edit-reasonlist": "Eiditar rezones de botar fuora",
+       "mergehistory": "Fundir ls stóricos de las páiginas",
        "mergehistory-submit": "Misturar eidiçones",
        "revertmerge": "Çfazer ounion",
        "history-title": "Stórico de eidiçones de \"$1\"",
        "notextmatches": "Nun fui possible achar, ne l cuntenido de las páiginas, la palabra percurada",
        "prevn": "{{PLURAL:$1|anterior|$1 anteriores}}",
        "nextn": "{{PLURAL:$1|próssimo|próssimos $1}}",
+       "shown-title": "Amostrar $1 {{PLURAL:$1|resultado|resultados}} por páigina",
        "viewprevnext": "Ber ($1 {{int:pipe-separator}} $2) ($3)",
        "searchmenu-new": "<strong>Criar la páigina \"[[:$1]]\" nesta berson!</strong> {{PLURAL:$2|0=|Beija tamien la páigina ancontrada na percura.|Beija tamien ls resultados de la percura.}}",
        "searchprofile-articles": "Páiginas de cuntenido",
        "searchprofile-images": "Multimédia",
        "searchprofile-everything": "Todo",
        "searchprofile-advanced": "Abançado",
+       "searchprofile-articles-tooltip": "Percurar an $1",
        "searchprofile-images-tooltip": "Percurar fexeiros",
+       "searchprofile-everything-tooltip": "Percurar an todo l cuntenido (ancluindo páiginas de cumbersa)",
        "searchprofile-advanced-tooltip": "Personalizar ls domínios adonde percurar",
        "search-result-size": "$1 ({{PLURAL:$2|1 palabra|$2 palabras}})",
        "search-redirect": "(ancaminamiento pa $1)",
        "right-edit": "Eiditar páiginas",
        "right-move": "Arrastrar páiginas",
        "right-movefile": "Arrastrar fexeiros",
+       "right-writeapi": "Outelizar la API de scrita",
        "grant-editmycssjs": "Eiditar l sou CSS/JavaScript personalizado",
        "newuserlogpage": "Registro de criaçon de outelizadores",
        "rightslog": "Registro de dreitos de l outelizador",
        "recentchanges": "Redadeiras altaraçones",
        "recentchanges-legend": "Oupçones de las redadeiras altaraçones",
        "recentchanges-feed-description": "Acumpanha las redadeiras altaraçones de l biqui por esta semiente.",
+       "recentchanges-label-newpage": "Esta eidiçon criou ua nuoba páigina",
+       "recentchanges-label-minor": "Esta ye ua eidiçon pequerrixa",
+       "recentchanges-label-bot": "Esta eidiçon fui feita por un robó",
+       "recentchanges-label-plusminus": "Altaraçon ne l tamanho de la páigina, an bytes",
+       "recentchanges-legend-heading": "<strong>Lhegenda:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (ber tamien la [[Special:NewPages|lhista de páiginas nuobas]])",
+       "recentchanges-submit": "Amostrar",
        "rcfilters-filtergroup-watchlist": "Páiginas begiadas",
        "rcnotefrom": "Ambaixo {{PLURAL:$5|stá la altaraçon feita|stan las alteraçones feitas}} zde <strong>$2</strong> (amostradas até <strong>$1</strong>).",
        "rclistfrom": "Amostrar las noubas altaraçones a partir de $2 de $3",
        "rcshowhideminor": "$1 eidiçones pequerrixas",
+       "rcshowhideminor-show": "Amostrar",
        "rcshowhidebots": "$1 robós",
+       "rcshowhidebots-show": "Amostrar",
        "rcshowhideliu": "$1 outelizadores registrados",
+       "rcshowhideliu-show": "Amostrar",
        "rcshowhideanons": "$1 outelizadores anónimos",
+       "rcshowhideanons-show": "Amostrar",
        "rcshowhidepatr": "$1 eidiçones patrulhadas",
+       "rcshowhidepatr-show": "Amostrar",
        "rcshowhidemine": "$1 mies eidiçones",
+       "rcshowhidemine-show": "Amostrar",
+       "rcshowhidecategorization-show": "Amostrar",
        "rclinks": "Amostrar las redadeiras $1 altaraçones ne ls redadeiros $2 dies",
        "diff": "defr",
        "hist": "stór",
        "newpageletter": "N",
        "boteditletter": "b",
        "rc_categories_any": "Qualquiera de ls scolhidos",
+       "rc-change-size-new": "$1 {{PLURAL:$1|byte|bytes}} açpuis las altaraçones",
        "newsectionsummary": "/* $1 */ nuobo cacho",
        "rc-enhanced-expand": "Amostrar detailhes",
        "rc-enhanced-hide": "Scunder detailhes",
        "filesource": "Fuonte:",
        "ignorewarnings": "Eignorar qualquiera abiso",
        "savefile": "Grabar fexeiro",
+       "uploaddisabled": "Ambio de fexeiros zatibado.",
        "watchthisupload": "Begiar este fexeiro",
+       "upload-dialog-title": "Cargar fexeiro",
        "upload-curl-error28": "Ultrapassado l tiempo lhemite pa l ambio de l fexeiro",
        "license": "Lhicença:",
        "license-header": "Lhicença",
        "filehist-datetime": "Data i hora",
        "filehist-thumb": "Amostra",
        "filehist-thumbtext": "Amostra de la berson de las $1",
+       "filehist-nothumb": "Meniatura andisponible",
        "filehist-user": "Outelizador",
        "filehist-dimensions": "Tamanho",
        "filehist-filesize": "Tamanho de l fexeiro",
        "linkstoimage": "{{PLURAL:$1|Esta páigina lhiga|Estas $1 páiginas lhigan}} este fexeiro:",
        "nolinkstoimage": "Nanhua páigina apunta pa este fexeiro.",
        "sharedupload": "Este fexeiro ye de $1 i puode ser outelizado por outros porjetos.",
+       "sharedupload-desc-here": "Este fexeiro ye de $1 i puode ser outelizado por outros porjetos.\nLa çcriçon na [$2 páigina oureginal] ye amostrada ambaixo.",
        "uploadnewversion-linktext": "Cargar ua nuoba berson deste fexeiro",
        "shared-repo-from": "de $1",
        "filerevert-comment": "Motibo:",
        "filedelete-submit": "Apagar",
        "filedelete-nofile": "'''$1''' nun eisiste.",
        "filedelete-reason-otherlist": "Outra rezon",
+       "filedelete-edit-reasonlist": "Eiditar rezones de botar fuora",
        "mimesearch": "Percura MIME",
+       "unwatchedpages": "Páiginas nun begiadas",
        "listredirects": "Amostrar ancaminamientos",
+       "listduplicatedfiles": "Fexeiros cun duplicados",
        "unusedtemplates": "Modelos nun outelizados",
        "randompage": "Páigina al calhas",
+       "randomincategory": "Páigina aleatória na catadorie",
+       "randomincategory-legend": "Páigina aleatória na catadorie",
        "randomredirect": "Ancaminamiento al calhas",
        "statistics": "Statísticas",
        "statistics-articles": "Páiginas de cuntenido",
        "doubleredirects": "Ancaminamientos duplos",
        "brokenredirects": "Ancaminamientos scachados",
        "brokenredirects-edit": "eiditar",
-       "brokenredirects-delete": "Botar fuora",
+       "brokenredirects-delete": "botar fuora",
        "withoutinterwiki": "Páiginas sin lhigaçones de lhénguas",
        "withoutinterwiki-submit": "Amostrar",
        "fewestrevisions": "Páiginas de cuntenido cun menos rebisones",
        "mostlinkedtemplates": "Páiginas mais transcluídas",
        "mostcategories": "Páiginas de cuntenido cun mais catadories",
        "mostimages": "Eimaiges cun mais refréncias",
+       "mostinterwikis": "Páiginas cun mais lhigaçones anterwikis",
        "mostrevisions": "Páiginas de cuntenido cun mais rebisones",
        "prefixindex": "Todas las páiginas cun perfixo",
+       "prefixindex-submit": "Amostrar",
        "shortpages": "Páiginas pequeinhas",
        "longpages": "Páiginas cumpridas",
        "deadendpages": "Páiginas sin salida",
-       "protectedpages": "Páiginas protegidas",
+       "protectedpages": "Páiginas portegidas",
        "protectedtitles": "Títalos portegidos",
        "listusers": "Lhista de outelizadores",
        "newpages": "Páiginas nuobas",
+       "newpages-submit": "Amostrar",
        "ancientpages": "Páiginas mais antigas",
        "move": "Arrastrar",
        "movethispage": "Arrastrar esta páigina",
        "pager-newer-n": "{{PLURAL:$1|1 nuoba|$1 nuobas}}",
        "pager-older-n": "{{PLURAL:$1|1 atrasada|$1 atrasadas}}",
+       "apisandbox": "Testes de la API",
        "booksources": "Fuontes de lhibros",
        "booksources-search-legend": "Percurar por fuontes de lhibros",
        "booksources-search": "Percurar",
        "specialloguserlabel": "Outelizador(a):",
        "speciallogtitlelabel": "Albo (títalo ó páigina ó {{ns:user}}:nome d'outelizador):",
        "log": "Registros",
+       "logeventslist-submit": "Amostrar",
        "all-logs-page": "Todos ls registros públicos",
        "logempty": "Nun eisiste nanhue antrada correspondente ne l registro.",
        "allpages": "Todas las páiginas",
        "allpagessubmit": "Bota",
        "allpagesprefix": "Amostrar páiginas cul perfixo:",
        "categories": "Catadories",
+       "categories-submit": "Amostrar",
+       "deletedcontributions": "Eidiçones botadas fuora",
+       "deletedcontributions-title": "Cuntribuiçones botadas fuora",
        "linksearch": "Percura de lhigaçones sternas",
        "linksearch-ok": "Percurar",
        "listusers-submit": "Amostrar",
        "watch": "Begiar",
        "watchthispage": "Begiar esta páigina",
        "unwatch": "Zantressar-se",
-       "watchlist-details": "{{PLURAL:$1|Eisiste $1 páigina|Eisisten $1 páiginas}} na sue lhista de páiginas begiadas, scluindo las páiginas de cumbersa.",
+       "watchlist-details": "{{PLURAL:$1|Eisiste $1 páigina|Eisisten $1 páiginas}} na sue lhista de páiginas begiadas (mais las páiginas de cumbersa).",
        "wlheader-enotif": "La notificaçon por correio eiletrónico stá atiba.",
        "wlheader-showupdated": "Las páiginas altaradas zde la redadeira beç que las besitou aparecen çtacadas an <strong>negrito</strong>.",
        "wlshowlast": "Ber redadeiras $1 horas $2 dies",
+       "watchlist-submit": "Amostrar",
        "watchlist-options": "Oupçones de la lhista de páiginas begiadas",
        "watching": "A begiar...",
        "unwatching": "A deixar de begiar...",
        "enotif_reset": "Marcar todas las páiginas cumo bejitadas",
        "created": "criada",
        "changed": "demudada",
-       "deletepage": "Botar fuora páigina",
+       "deletepage": "Botar fuora la páigina",
+       "excontent": "l cuntenido era: \"$1\"",
+       "excontentauthor": "l cuntenido era: \"$1\", i {{GENDER:$2|l único eiditor|la única eiditora|l(a) único(a) eiditor(a)}} era [[Special:Contributions/$2|$2]] ([[User talk:$2|cumbersa]])",
+       "exbeforeblank": "l cuntenido antes de sbaziar era: \"$1\"",
        "delete-confirm": "Botar fuora \"$1\"",
        "delete-legend": "Botar fuora",
        "historywarning": "<strong>Abiso:</strong> La páigina que stás quaije a botar fuora ten un stórico cun aprossimadamente $1 {{PLURAL:$1|rebison|rebisones}}:",
+       "historyaction-submit": "Amostrar",
        "confirmdeletetext": "Stás quaije a botar fuora para siempre ua páigina ó ua eimaige i todos ls sous stóricos.\nPor fabor, bei se ye esso que quieres fazer, que antendes las cunsequéncias i se esso stá d'acordo culas [[{{MediaWiki:Policy-url}}|políticas]].",
        "actioncomplete": "Acion acabada",
-       "deletedtext": "\"$1\" fue elhiminada.\nConsulte $2 para um registo de eliminações recentes.",
-       "dellogpage": "Registro de botado fuora",
+       "deletedtext": "\"$1\" fue botada fuora.\nCunsulte $2 pa un registro reciente de las páiginas botadas fuora.",
+       "dellogpage": "Registro de botados fuora",
+       "deletionlog": "registro de botados fuora",
        "deletecomment": "Rezon:",
        "deleteotherreason": "Rezon adicional:",
        "deletereasonotherlist": "Outra rezon",
+       "deletereason-dropdown": "* Motibos d'eliminaçon quemuns\n** Spam\n** Bandalismo\n** Biolaçon de dreitos d'outor\n** Pedido de l'outor\n** Ancaminamiento ambálido",
+       "delete-edit-reasonlist": "Eiditar rezones de botar fuora",
+       "deleting-backlinks-warning": "<strong>Abiso:</strong> Eisisten [[Special:WhatLinksHere/{{FULLPAGENAME}}|páiginas]] que cunténen lhigaçones ó que ancaminan pa la páigina que stá pristes a botar fuora.",
        "rollbacklink": "retornar",
+       "rollbacklinkcount": "çfazer $1 {{PLURAL:$1|eidiçon|eidiçones}}",
+       "revertpage": "Fúrun çfeitas las eidiçones de [[Special:Contributions/$2|$2]] ([[User talk:$2|cumbersa]]) pa la redadeira rebison de [[User:$1|$1]]",
+       "changecontentmodel": "Altarar l modelo de cuntenido dua páigina",
        "protectlogpage": "Registro de porteçon",
        "protectedarticle": "porteger \"[[$1]]\"",
        "modifiedarticleprotection": "demudeste l nible de porteçon pa \"[[$1]]\"",
        "restriction-level": "Nible de restriçon:",
        "restriction-edit": "Eiditar",
        "restriction-move": "Arrastrar",
+       "undelete": "Ber las páiginas botadas fuora",
+       "viewdeletedpage": "Ber las páiginas botadas fuora",
        "undeletebtn": "Recuperar",
        "undeletelink": "ber/restourar",
        "namespace": "Spácio de nomes:",
        "invert": "Amberter scuolha",
+       "tooltip-invert": "Marque esta caixa pa scunder las altaraçones la páiginas ne l domínio selecionado (i ne l domínio associado, se scolheu la oupçon)",
+       "namespace_association": "Domínio associado",
+       "tooltip-namespace_association": "Marque esta caixa pa ancluir tamien l domínio de cuntenido ó de cumbersa associado a la sue seleçon",
        "blanknamespace": "(Percipal)",
        "contributions": "Cuntribuiçones {{GENDER:$1|de l outelizador|de la outelizadora|de l(a) outelizador(a)}}",
        "contributions-title": "Upas {{GENDER:$1|de l outelizador|de la outelizadora}} $1",
        "year": "De l anho (i atrasados):",
        "sp-contributions-newbies": "Percurar solo an las cuntribuiçones de nuobas cuontas",
        "sp-contributions-newbies-sub": "Pa cuontas nuobas",
-       "sp-contributions-blocklog": "Registro de bloqueios",
+       "sp-contributions-blocklog": "registro de bloqueios",
        "sp-contributions-talk": "cumbersa",
        "sp-contributions-search": "Percurar cuntribuiçones",
        "sp-contributions-username": "Morada de IP ó outelizador:",
        "whatlinkshere-hidetrans": "$1 anclusones",
        "whatlinkshere-hidelinks": "$1 lhigaçones",
        "whatlinkshere-filters": "Filtros",
+       "unblock": "Zbloquiar outelizador",
        "blockip": "Bloquiar {{GENDER:$1|outelizador|outelizadora|outelizador(a)}}",
+       "blockip-legend": "Bloquiar outelizador(a)",
        "ipboptions": "2 horas:2 hours,1 die:1 day,3 dias:3 days,1 sumana:1 week,2 sumanas:2 weeks,1 més:1 month,3 meses:3 months,6 meses:6 months,1 anho:1 year,anfenito:infinite",
+       "unblockip": "Zbloquiar outelizador",
        "blocklist": "Outelizadores bloquiados",
        "autoblocklist": "Bloqueios outomáticos",
        "ipblocklist": "Outelizadores bloquiados",
        "unblocklink": "zbloquiar",
        "change-blocklink": "altarar bloqueio",
        "contribslink": "cuntribs",
-       "blocklogpage": "Registro de l bloqueio",
+       "blocklogpage": "Registro de bloqueios",
        "blocklogentry": "\"[[$1]]\" fui bloquiado cun un tiempo de balidade de $2 $3",
        "unblocklogentry": "zbloqueste $1",
        "block-log-flags-nocreate": "criaçon de cuontas zatibada",
        "move-watch": "Begiar esta páigina",
        "movepagebtn": "Arrastrar páigina",
        "pagemovedsub": "Páigina arrastrada cumo debe de ser",
-       "movepage-moved": "'''\"$1\" fui arrastrado pa \"$2\"'''",
+       "movepage-moved": "<strong>\"$1\" fui arrastrada pa \"$2\"</strong>",
+       "movepage-moved-redirect": "Fui criado un ancaminamiento.",
+       "movepage-moved-noredirect": "La criaçon dun ancaminamiento fui suprimida.",
        "articleexists": "Yá eisiste ua páigina cun este títalo, ou l títalo que scolhiste ye ambálido.\nPor fabor, scuolhe outro nome.",
        "movetalk": "Arrastrar tamien la páigina de cumbersa associada",
        "move-subpages": "Arrastrar subpáiginas (anté $1)",
        "move-talk-subpages": "Arrastrar subpáiginas de la páigina de cumbersa (anté $1)",
+       "movepage-page-moved": "La páigina $1 fui arrastrada pa $2.",
        "movelogpage": "Registro d'arrastros",
        "movereason": "Rezon:",
        "revertmove": "poner al robés",
+       "delete_and_move_text": "La páigina de çtino (\"[[:$1]]\") yá eisiste. \nDesea botar fuora eilha pa arrastrar la páigina?",
        "move-leave-redirect": "Criar un ancaminamiento",
        "export": "Sportar páiginas",
+       "export-submit": "Sportar",
        "export-download": "Grabar cumo fexeiro",
        "allmessages": "Todas las mensaiges de l sistema",
        "allmessagesname": "Nome",
        "allmessages-language": "Lhéngua:",
        "thumbnail-more": "Oumentar",
        "thumbnail_error": "Erro al criar eimaige pequeinha: $1",
+       "import": "Amportar páiginas",
        "importlogpage": "Registro de amportaçones",
        "tooltip-pt-userpage": "Páigina d'{{GENDER:|outelizador|outelizadora|outelizador(a)}}",
        "tooltip-pt-mytalk": "{{GENDER:|Mie}} cumbersa",
        "tooltip-pt-mycontris": "{{GENDER:|Mies}} upas",
        "tooltip-pt-login": "Tu sós animado pa que te outentiques, inda que esso nun seia oubrigatório.",
        "tooltip-pt-logout": "Salir",
+       "tooltip-pt-createaccount": "Ye ancorajado a criar ua cuonta i ampeçar sesson; inda assi, nun ye oubrigatório",
        "tooltip-ca-talk": "Cumbersa subre l cuntenido de la páigina",
        "tooltip-ca-edit": "Eiditar esta páigina",
        "tooltip-ca-addsection": "Ampeçar un cacho nuobo",
        "tooltip-rollback": "\"{{int:rollbacklink}}\" çfazer, cun un solo clique, las eidiçones de l redadeiro eiditor desta páigina.",
        "tooltip-undo": "\"Çfazer\" çfaç esta eidiçoni abre ls campos de eidiçon ne l modo \"ber cumo queda\".\nPremite ajuntar la rezon de la eidiçon ne l sumário.",
        "lastmodifiedatby": "Esta páigina fui eiditada pula redadeira beç a la(s) $2 de $1 por $3.",
+       "pageinfo-robot-noindex": "Nun premitida",
+       "pageinfo-subpages-name": "Subpáiginas desta páigina",
+       "pageinfo-subpages-value": "$1 ($2 {{PLURAL:$2|ancaminamiento|ancaminamientos}}; $3 {{PLURAL:$3|nun ancaminamiento|nun ancaminamientos}})",
+       "pageinfo-magic-words": "{{PLURAL:$1|Palabra mágica|Palabras mágicas}} ($1)",
        "pageinfo-toolboxlink": "Anformaçones de la páigina",
        "previousdiff": "← Eidiçon d'atrás",
        "nextdiff": "Redadeira eidiçon →",
        "file-nohires": "Sin resoluçon maior çponible.",
        "svg-long-desc": "fexeiro SVG, de $1 × $2 píxeles, tamanho: $3",
        "show-big-image": "Fexeiro oureginal",
+       "show-big-image-preview": "Tamanho desta antebison: $1.",
+       "show-big-image-other": "{{PLURAL:$2|Outra resoluçon|Outras resoluçones}}: $1.",
+       "show-big-image-size": "$1 × $2 píxeles",
        "newimages": "Galerie de nuobos fexeiros",
        "noimages": "Nun hai nada pa ber.",
        "ilsubmit": "Percurar",
        "table_pager_empty": "Sien resultados",
        "autoredircomment": "Ancaminamiento pa [[$1]]",
        "autosumm-new": "Criou la páigina cun \"$1\"",
+       "autosumm-newblank": "Páigina an branco criada",
        "watchlistedit-normal-title": "Eiditar la lhista de páiginas begiadas",
        "watchlistedit-raw-titles": "Títalos",
        "watchlistedit-clear-title": "Lhimpar la lhista de páiginas begiadas",
        "version-ext-colheader-description": "Çcriçon",
        "version-software-product": "Perduto",
        "version-software-version": "Berson",
+       "redirect": "Ancaminar por nome de fexeiro, ó eidentificaçon de outelizador, páigina, rebison ó registro",
        "redirect-lookup": "Percurar:",
+       "fileduplicatesearch": "Percurar por fexeiros duplicados",
        "fileduplicatesearch-filename": "Nome de l fexeiro",
        "fileduplicatesearch-submit": "Percurar",
        "specialpages": "Páiginas speciales",
        "specialpages-group-pagetools": "Ferramienta de páiginas",
        "specialpages-group-wiki": "Dados i ferramientas",
        "specialpages-group-redirects": "Páiginas speciales de ancaminamientos",
+       "blankpage": "Páigina an branco",
+       "intentionallyblankpage": "Esta páigina fui antencionalmente deixada an branco",
+       "tags": "Eitiquetas de modeficaçon bálidas",
+       "tag-filter": "Filtrar las [[Special:Tags|etiquetas]]:",
+       "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Eitiqueta|Eitiquetas}}]]: $2)",
        "tags-title": "Eitiquetas",
        "tags-edit": "eiditar",
        "tags-activate": "atibar",
        "tags-deactivate": "zatibar",
        "tags-activate-submit": "Atibar",
+       "comparepages": "Acumparar páiginas",
        "diff-form": "Defréncias",
+       "permanentlink": "Lhigaçon permaniente",
        "logentry-move-move": "$1 {{GENDER:$2|arrastrou}} $3 pa $4",
        "logentry-move-move-noredirect": "$1 {{GENDER:$2|arrastrou}} $3 pa $4 sin deixar un ancaminamiento",
        "logentry-move-move_redir": "$1 {{GENDER:$2|arrastrou}} $3 pa l sou ancaminamiento $4",
+       "logentry-move-move_redir-noredirect": "$1 {{GENDER:$2|arrastrou}} $3 pa l sou ancaminamiento $4, suprimindo l purmeiro",
+       "logentry-newusers-create": "La cuonta de {{GENDER:$2|outelizador|outelizadora}} $1 fui criada",
        "rightsnone": "(nanhun)",
+       "searchsuggest-search": "Percurar an {{SITENAME}}",
+       "expandtemplates": "Spandir modelos",
+       "mediastatistics": "Statísticas multimédia",
        "mediastatistics-header-multimedia": "Média anriquecida",
+       "mw-widgets-usersmultiselect-placeholder": "Poner mais...",
+       "randomrootpage": "Páigina aleatória de raiç",
        "authmanager-email-label": "Correio eiletrónico",
        "changecredentials": "Altarar credenciales",
        "changecredentials-submit": "Altarar credenciales",
index 8c67a7c..0aec41e 100644 (file)
        "tog-shownumberswatching": "စောင့်ကြည့်နေသော အသုံးပြုသူအရေအတွက်ကို ပြရန်",
        "tog-oldsig": "သင်၏ ရှိနှင့်ပြီးသား လက်မှတ်:",
        "tog-fancysig": "လက်မှတ်ကို ဝီကီလင့်အဖြစ် သတ်မှတ်ရန် (အလိုအလျောက်လင့်မပါဘဲနှင့်)",
+       "tog-uselivepreview": "စာမျက်နှာကို ပြန်လည် မခေါ်ယူဘဲ နမူနာများ ပြသရန်",
        "tog-forceeditsummary": "တည်းဖြတ်အတိုချုပ် ဗလာဖြစ်နေလျှင် သတိပေးရန်",
        "tog-watchlisthideown": "ကျွန်ုပ်၏ တည်းဖြတ်မှုများကို စောင့်ကြည့်စာရင်းမှ ဝှက်ထားရန်",
        "tog-watchlisthidebots": "ဘော့တည်းဖြတ်မှုများကို စောင့်ကြည့်စာရင်းမှ ဝှက်ထားရန်",
        "tog-watchlisthideminor": "အရေးမကြီးသော တည်းဖြတ်မှုများကို စောင့်ကြည့်စာရင်းမှ ဝှက်ထားရန်",
        "tog-watchlisthideliu": "စောင့်ကြည့်စာရင်းမှ log in ဝင်ထားသော အသုံးပြုသူတို့၏ တည်းဖြတ်မှုများကို ဝှက်ရန်",
+       "tog-watchlistreloadautomatically": "filter တစ်ခု အပြောင်းအလဲဖြစ်တိုင်း စောင့်ကြည့်စာရင်းကို အလိုအလျောက် ပြန်လည် ခေါ်ယူရန် (JavaScript လိုအပ်)",
        "tog-watchlisthideanons": "စောင့်ကြည့်စာရင်းမှ အမည်မသိ အသုံးပြုသူများ၏ တည်းဖြတ်မှုများကို ဝှက်ရန်",
        "tog-watchlisthidepatrolled": "စောင့်ကြည့်စစ်ဆေးထားသော တည်းဖြတ်မှုများကို စောင့်ကြည့်စာရင်းမှ ဝှက်ထားရန်",
        "tog-watchlisthidecategorization": "စာမျက်နှာများ၏ ကဏ္ဍကို ဝှက်ရန်",
        "createaccount-title": "{{SITENAME}} အတွက် အကောင့်ပြုလုပ်ခြင်း",
        "login-throttled": "သင်သည် login ဝင်ရန် အကြိမ်မြောက်မြားစွာ အားထုတ်ခဲ့ပြီးဖြစ်သည်။\nကျေးဇူးပြု၍ ထပ်မဝင်ခင် $1 စောင့်ပေးပါ။",
        "login-abort-generic": "လော့ဂ်အင်ဝင်ခြင်း မအောင်မြင်ပါ - ဖျက်သိမ်းပြီး",
-       "loginlanguagelabel": "ဘာသာ: $1",
+       "loginlanguagelabel": "ဘာသာစကား: $1",
        "pt-login": "အကောင့်ဝင်ရန်",
        "pt-login-button": "အကောင့်ဝင်ရန်",
        "pt-login-continue-button": "ဆက်လက် ဝင်ရောက်ပါ",
        "prefs-editwatchlist-clear": "သင့် စောင့်ကြည့်စာရင်းကို ရှင်းလင်းရန်",
        "prefs-watchlist-days": "စောင့်ကြည့်စာရင်းတွင် ပြရန်နေ့များ",
        "prefs-watchlist-days-max": "အများဆုံး $1 {{PLURAL:$1|ရက်|ရက်}}",
-       "prefs-watchlist-edits": "á\80\81á\80»á\80²á\80·á\80\91á\80¬á\80¸á\80\9eá\80±á\80¬ á\80\85á\80±á\80¬á\80\84á\80·á\80ºá\80\80á\80¼á\80\8aá\80·á\80ºá\80\85á\80¬á\80\9bá\80\84á\80ºá\80¸á\80\90á\80½á\80\84á\80º á\80\95á\80¼á\80\9bá\80\94á\80º á\80¡á\80\95á\80¼á\80±á\80¬á\80\84á\80ºá\80¸á\80¡á\80\9cá\80²á\80\90á\80­á\80¯á\80·á\81\8f á\80¡á\80\99á\80»á\80¬á\80¸á\80\86á\80¯á\80¶á\80¸ á\80¡á\80\9bá\80±á\80¡á\80\90á\80½á\80\80á\80º",
+       "prefs-watchlist-edits": "စောင့်ကြည့်စာရင်းတွင် ပြရန် အပြောင်းအလဲတို့၏ အများဆုံး အရေအတွက်",
        "prefs-watchlist-edits-max": "အများဆုံးအရေအတွက် - ၁ဝဝဝ",
        "prefs-watchlist-token": "စောင့်ကြည့်စာရင်း တိုကင် -",
        "prefs-misc": "အသေးအမွှား",
        "prefs-memberingroups": "{{PLURAL:$1|အုပ်စု|အုပ်စုများ}}၏ {{GENDER:$2|အဖွဲ့ဝင်}}",
        "prefs-registration": "မှတ်ပုံတင်သည့် အချိန် -",
        "yourrealname": "နာမည်ရင်း -",
-       "yourlanguage": "ဘာသာစကား -",
+       "yourlanguage": "ဘာသာစကား:",
        "yournick": "လက်မှတ်အသစ် -",
        "badsig": "တရားမဝင်သည့် လက်မှတ်အကြမ်း။\nHTML tags ကို စစ်ဆေးပါ။",
        "badsiglength": "သင့်လက်မှတ်သည် ရှည်လွန်းနေပါသည်။\nယင်းသည် စာလုံး {{PLURAL:$1|လုံး|လုံး}}ထက် မရှည်ရပါ။",
        "unwatch": "စောင့်မကြည့်ပါနှင့်",
        "unwatchthispage": "စောင့်ကြည့်ခြင်းကို ရပ်တန့်ရန်",
        "notanarticle": "မာတိကာစာမျက်နှာတစ်ခု မဟုတ်",
-       "watchlist-details": "{{PLURAL:$1|စာမျက်နှာ $1 ခု|စာမျက်နှာ $1 ခု}} သည် သင့်စောင့်ကြည့်စာရင်းတွင် ရှိပြီး ဆွေးနွေးချက်စာမျက်နှာများကို ထည့်တွက် မထားပါ။",
+       "watchlist-details": "သင့်စောင့်ကြည့်စာရင်းတွင် (ဆွေးနွေးချက် စာမျက်နှာများ အပါအဝင်){{PLURAL:$1|စာမျက်နှာ $1 ခု|စာမျက်နှာ $1 ခု}} ရှိသည်။",
        "wlheader-showupdated": "သင် နောက်ဆုံးကြည့်ရှုခဲ့ပြီးနောက် ပြောင်းလဲမှုရှိခဲ့သော စာမျက်နှာများကို <strong>စာလုံးမဲ</strong> ဖြင့် ပြသထားသည်",
        "wlnote": "အောက်ပါတို့သည် $3၊ $4 အထိ နောက်ဆုံး {{PLURAL:$2|နာရီ|<strong>$2</strong> နာရီ}}အတွင်း {{PLURAL:$1|နောက်ဆုံးပြောင်းလဲချက် တစ်ခု|နောက်ဆုံးပြောင်းလဲချက်များ <strong>$1</strong> ခု}} ဖြစ်သည်။",
        "wlshowlast": "နောက်ဆုံး $1 နာရီ $2 ရက်  ကိုပြရန်",
        "deleting-backlinks-warning": "<strong>သတိပေးချက်။</strong> သင်ဖျက်ပစ်တော့မည့် စာမျက်နှာအား [[Special:WhatLinksHere/{{FULLPAGENAME}}|အခြားစာမျက်နှာများမှ]] ချိတ်ဆက်ထားခြင်း သို့မဟုတ် ထည့်သွင်းထားခြင်း ရှိနေသည်။",
        "rollbacklink": "နောက်ပြန် ပြန်သွားရန်",
        "rollbacklinkcount": "{{PLURAL:$1|တည်းဖြတ်မှု|တည်းဖြတ်မှုများ}} $1 ကို နောက်ပြန်ပြင်ရန်",
+       "revertpage": "[[Special:Contributions/$2|$2]] ([[User talk:$2|ဆွေးနွေး]]) ၏ ပြင်ဆင်မှုများကို [[User:$1|$1]] ၏ နောက်ဆုံးတည်းဖြတ်မူသို့ နောက်ပြန် ပြန်ပြင်ခဲ့သည်",
        "protectlogpage": "ကာကွယ်မှုများ၏ မှတ်တမ်း",
        "protectlogtext": "အောက်ပါတို့သည် စာမျက်နှာ ကာကွယ်မှုများအတွက် အပြောင်းအလဲ စာရင်း ဖြစ်သည်။\nလက်ရှိ စာမျက်နှာ ကာကွယ်မှုများ စာရင်းအတွက် [[Special:ProtectedPages|ကာကွယ်ထားသော စာမျက်နှာများ စာရင်း]]ကို ကြည့်ပါ။",
        "protectedarticle": "\"[[$1]]\" ကို ကာကွယ်ထားသည်",
        "contribslink": "ပံ့ပိုး",
        "blocklogpage": "ပိတ်ပင်တားဆီးမှု မှတ်တမ်း",
        "blocklog-showlog": "ဤအသုံးပြုသူအား ယခင်က ပိတ်ပင်ထားပြီး ဖြစ်သည်။\nပိတ်ပင်မှု မှတ်တမ်းအား ကိုးကားနိုင်ရန် အောက်တွင် ဖော်ပြထားသည်။",
-       "blocklogentry": "[[$1]] ကို $2 ကြာအောင် ပိတ်ပင် တားဆီးလိုက်သည် $3",
+       "blocklogentry": "သက်တမ်း $2 ဖြင့် [[$1]] ကို ပိတ်ပင်လိုက်သည် $3",
        "reblock-logentry": "[[$1]] အတွက် ပိတ်ပင်မှု အပြင်အဆင်ကို သက်တမ်း $2 ဖြင့် ပြောင်းလဲခဲ့သည် $3",
        "blocklogtext": "ဤသည်မှာ အသုံးပြုသူအား ပိတ်ပင်ခြင်းနှင့် ပိတ်ပင်မှုဖယ်ရှားခြင်း ဆောင်ရွက်မှု မှတ်တမ်း ဖြစ်သည်။\nအလိုအလျောက် ပိတ်ပင်ထားသည့် အိုင်ပီလိပ်စာများအား မထည့်သွင်းထားပါ။\nလက်ရှိ တားမြစ်မှုများနှင့် ပိတ်ပင်မှုများ စာရင်းအတွက် [[Special:BlockList|ပိတ်ပင်စာရင်း]]ကို ကြည့်ပါ။",
        "unblocklogentry": "$1 ကို ပိတ်ထားရာမှ ပြန်ဖွင့်ရန်",
        "allmessages-filter-unmodified": "မပြုပြင်ထားသော",
        "allmessages-filter-all": "အားလုံး",
        "allmessages-filter-modified": "ပြုပြင်ထားသော",
-       "allmessages-language": "ဘာသာ -",
+       "allmessages-language": "ဘာသာစကား:",
        "allmessages-filter-submit": "သွား",
        "thumbnail-more": "ပုံကြီးချဲ့ရန်",
        "filemissing": "ဖိုင်ပျောက်နေသည်",
        "logentry-move-move_redir-noredirect": "$3 မှ $4 သို့ ပြန်ညွှန်းပေါ်ထပ်အုပ်ကာ ပြန်ညွှန်းချန်မထားဘဲ $1 က {{GENDER:$2|ရွှေ့ခဲ့သည်}}",
        "logentry-patrol-patrol-auto": "စာမျက်နှာ $3 ၏ တည်းဖြတ်မူ $4 အား $1 က စောင့်ကြပ်စစ်ဆေးပြီးကြောင်း အလိုအလျောက် {{GENDER:$2|မှတ်သားခဲ့သည်}}",
        "logentry-newusers-create": "အသုံးပြုသူအကောင့် $1 ကို {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
+       "logentry-newusers-create2": "အသုံးပြုသူအကောင့် $3 ကို $1 က{{GENDER:$2|ဖန်တီးခဲ့သည်}}",
        "logentry-newusers-autocreate": "အသုံးပြုသူအကောင့် $1 ကို အလိုအလျောက် {{GENDER:$2|ဖန်တီးခဲ့သည်}}",
        "logentry-protect-protect": "$1 က  $3 ကို {{GENDER:$2|ကာကွယ်ခဲ့သည်}} $4",
        "logentry-protect-modify": "$3 အတွက် ကာကွယ်မှုအဆင့်ကို $1 {{GENDER:$2|က ပြောင်းလဲခဲ့သည်}} $4",
index 7c60994..0e6cc2e 100644 (file)
        "parser-template-loop-warning": "Mal-loop oppdaget: [[$1]]",
        "template-loop-category": "Sider med malsløyfer",
        "template-loop-category-desc": "Siden inneholder en malløkke, altså en mal som kaller seg selv rekursivt.",
+       "template-loop-warning": "<strong>Advarsel:</strong> Denne sider henter inn [[:$1]], som forårsaker en malsløyfe (en uendelig rekursiv innhenting).",
        "parser-template-recursion-depth-warning": "Mal er brukt for mange ganger ($1)",
        "language-converter-depth-warning": "Dybdegrense for språkkonvertering overskredet ($1)",
        "node-count-exceeded-category": "Sider hvor antallet noder er overskredet",
        "timezoneregion-indian": "Indiahavet",
        "timezoneregion-pacific": "Stillehavet",
        "allowemail": "Tillat andre å sende meg e-post",
+       "email-blacklist-label": "Forhindre disse brukerne fra å sende meg e-post:",
        "prefs-searchoptions": "Søk",
        "prefs-namespaces": "Navnerom",
        "default": "standard",
        "rcfilters-empty-filter": "Ingen aktive filtre. Alle bidrag vises.",
        "rcfilters-filterlist-title": "Filtre",
        "rcfilters-filterlist-whatsthis": "Hvordan virker dette?",
-       "rcfilters-filterlist-feedbacklink": "Gi tilbakemelding på de nye (beta)filtrene",
+       "rcfilters-filterlist-feedbacklink": "Gi tilbakemelding på disse (nye) filterverktøyene",
        "rcfilters-highlightbutton-title": "Marker resultater",
        "rcfilters-highlightmenu-title": "Velg en farge",
        "rcfilters-highlightmenu-help": "Velg en farge for å merke denne egenskapen",
        "rcfilters-liveupdates-button-title-on": "Slå av live-oppdateringer",
        "rcfilters-liveupdates-button-title-off": "Vis nye endringer når de skjer",
        "rcfilters-watchlist-markseen-button": "Merk alle endringer som sett.",
+       "rcfilters-watchlist-edit-watchlist-button": "Rediger listen over sider du overvåker",
+       "rcfilters-watchlist-showupdated": "Endringer til sider du ikke har besøkt siden endringene ble gjort vises med <strong>fet</strong> skrift.",
+       "rcfilters-preference-label": "Skjul den forbedrede versjonen av siste endringer",
+       "rcfilters-preference-help": "Fjerner grensesnittendringen fra 2017 og alle verktøyene som ble lagt fra og med da.",
        "rcnotefrom": "Nedenfor er vist {{PLURAL:$5|endringen|endringene}} som er gjort siden <strong>$3, $4</strong> (frem til <strong>$1</strong>).",
        "rclistfromreset": "Nullstill datovalg",
        "rclistfrom": "Vis nye endringer fra og med $3 $2",
        "uploadbtn": "Last opp fil",
        "reuploaddesc": "Avbryt opplasting og gå tilbake til opplastingsskjemaet",
        "upload-tryagain": "Send inn endret filbeskrivelse",
+       "upload-tryagain-nostash": "Send inn nyopplastet fil og endret beskrivelse",
        "uploadnologin": "Ikke logget inn",
        "uploadnologintext": "Du må $1 for å kunne laste opp filer.",
        "upload_directory_missing": "Oppplastingsmappen ($1) mangler og kunne ikke opprettes av tjeneren.",
        "file-deleted-duplicate-notitle": "En annen fil identisk med denne filen har tidligere blitt slettet og tittelen har blitt fjernet. Du bør sjekke med noen som kan se på fjernede fildata å vurdere saken før filen lastes opp igjen.",
        "uploadwarning": "Opplastingsadvarsel",
        "uploadwarning-text": "Vennligst endre filbeskrivelsen nedenfor og prøv igjen.",
+       "uploadwarning-text-nostash": "Vennligst last opp filen på nytt, endre beskrivelsen nedenfor og prøv igjen.",
        "savefile": "Lagre fil",
        "uploaddisabled": "Opplastingsfunksjonen er slått av",
        "copyuploaddisabled": "Opplasting via nettadresse deaktivert.",
        "listfiles_size": "Størrelse (bytes)",
        "listfiles_description": "Beskrivelse",
        "listfiles_count": "Versjoner",
-       "listfiles-show-all": "Inkluderer gamle versjoner av bilder",
+       "listfiles-show-all": "Inkluderer gamle versjoner av filer",
        "listfiles-latestversion": "Gjeldende versjon",
        "listfiles-latestversion-yes": "Ja",
        "listfiles-latestversion-no": "Nei",
        "sp-contributions-newonly": "Bare vis bidrag som er sideopprettinger",
        "sp-contributions-hideminor": "Skjul mindre endringer",
        "sp-contributions-submit": "Søk",
+       "sp-contributions-outofrange": "Kan ikke vise resultater. Det gitte IP-intervallet er større enn CIDR-grensen på /$1.",
        "whatlinkshere": "Det som lenker hit",
        "whatlinkshere-title": "Sider som lenker til «$1»",
        "whatlinkshere-page": "Side:",
index 52e95e9..ff06964 100644 (file)
@@ -55,7 +55,7 @@
        "tog-shownumberswatching": "निगरानी गरिरहेका प्रयोगकर्ताहरूको संख्या देखाउने",
        "tog-oldsig": "वर्तमान हस्ताक्षर:",
        "tog-fancysig": "मेरो दस्तखतलाई विकि पाठको रुपमा लिने (स्वत लिङ्क बिना)",
-       "tog-uselivepreview": "पà¥\8dरतà¥\8dयà¤\95à¥\8dष à¤ªà¥\82रà¥\8dवरà¥\81प à¤ªà¥\8dरयà¥\8bà¤\97 à¤\97रà¥\8dनà¥\81हà¥\8bस",
+       "tog-uselivepreview": "पà¥\83षà¥\8dठ à¤ªà¥\81नरà¥\8dभरण à¤¨à¤\97रà¥\80à¤\95न à¤ªà¥\82रà¥\8dवावलà¥\8bà¤\95नहरà¥\82 à¤¦à¥\87à¤\96ाà¤\89नà¥\81हà¥\8bसà¥\8d",
        "tog-forceeditsummary": "खाली सम्पादन शीर्षक प्रविष्टि गरेमा मलाई सोध्ने",
        "tog-watchlisthideown": "मेरा सम्पादनहरू निगनारी सूचीबाट लुकाउने",
        "tog-watchlisthidebots": "बोट सम्पादनहरू निगरानी सूचीबाट लुकाउने",
        "userlogin-resetpassword-link": "पासवर्ड भुल्नुभयो?",
        "userlogin-helplink2": "प्रवेश गर्नको लागि सहयोग",
        "userlogin-loggedin": "तपाईं {{GENDER:$1|$1}}को रूपमा प्रवेश (लग इन) भइ सक्नु भयो ।\nअर्को प्रयोगकर्ताको रूपमा प्रवेश (लग इन) गर्न तलको फारम प्रयोग गर्नुहोस् ।",
+       "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|पृष्ठ|पृष्ठहरू}}",
        "changepassword-success": "तपाईंको पासवर्ड सफलतापूर्वक परिवर्तन भयो!",
        "changepassword-throttled": "तपाईंले भर्खरै धेरै पल्ट प्रवेश (लग इन)को निम्ति प्रयास गर्नुभएको छ। \nकृपया $1 पर्खेर मात्र प्रयास गर्नुहोस्।",
        "botpasswords": "बोट पासवर्ड",
+       "botpasswords-disabled": "बोट पासवर्डहरू असक्षम गरिएका छन्।",
        "botpasswords-createnew": "नयाँ बोटको लागि पासवर्ड बनाउने",
        "botpasswords-label-appid": "बोट नाम",
        "botpasswords-label-create": "बनाउनुहोस्",
        "passwordreset-emailtext-user": "{{SITENAME}} को $1 प्रयोगकर्ताले  {{SITENAME}} ($4)को लागि खाता विवरणको निम्ति एउटा अनुस्मारकको अनुरोध गरेको छ । निम्न प्रयोगकर्ता {{PLURAL:$3|खाता यस इमेल ठेगानासित सम्बन्धित छ|खाताहरू यस इमेल ठेगानासित सम्बन्धित छन् ।}}:\n\n$2\n\n{{PLURAL:$3|यो अस्थाई पासवर्डको|यी अस्थाई पासवर्डहरूको}} समय {{PLURAL:$5|एक दिन|$5 दिन}}मा सकिनेछ ।\nतपाईंले प्रवेश गरेर अहिले नैं नयाँ पासवर्ड छान्नुहोस्। यदि अरु कसैले अनुरोध गरेको भए अथवा यदि तपाईंलाई मूल पासवर्ड याद भए अनि यसलाई परिवर्तन गर्न चाहनुहुन्न भने, तपाईंले यस सन्देशलाई अनदेखा गर्नुहोस् र पुरानै पासवर्डलाई चालू राख्नुहोस् ।",
        "passwordreset-emailelement": "प्रयोगकर्ताको नाम: \n$1\n\nअस्थाई पासवर्ड: \n$2",
        "passwordreset-emailsentemail": "पासवर्ड परिवर्तनको लागि इमेल पठाइएको छ।",
+       "passwordreset-invalidemail": "अमान्य इमेल ठेगाना",
        "changeemail": "इमेल ठेगाना परिवर्तन गर्नुहोस",
        "changeemail-header": "खाताको इमेल ठेगाना परिवर्तन गर्नुहोस",
        "changeemail-no-info": "यस पृष्ठमा सिधै जानको लागि प्रवेश गर्नु पर्ने हुन्छ ।",
        "sig_tip": "तपाईंको समयछाप सहितको दस्तखत",
        "hr_tip": "क्षितिजिय रेखा (कम प्रयोग गर्नुहोस्)",
        "summary": "सारांश:",
-       "subject": "विषय/शीर्षक:",
+       "subject": "विषय:",
        "minoredit": "यो सानो सम्पादन हो",
        "watchthis": "यो पृष्ठ अवलोकन गर्नुहोस्",
        "savearticle": "सङ्ग्रह गर्ने",
        "selfredirect": "<strong>चेतावनी:</strong> तपाईं यस पृष्ठलाई आफुमा पुनः निर्देशित गर्दै हुनुहुन्छ।\nहुनसक्छ तपाईं अनुप्रेषितको लागि गलत लक्ष्य निर्दिष्ट गर्दै हुनुहुन्छ, वा गलत पृष्ठको सम्पादन गर्दै हुनुहुन्छ।\nतपाईं पुनः एकपटक \"$1\" क्लिक गर्नुहुन्छ, पुनः निर्देशित त्यसै पनि बनाइनेछ।",
        "missingcommenttext": "कृपया टिप्पणी प्रविष्ठ गर्नुहोस् ।",
        "missingcommentheader": "<strong>याद गर्नुहोस् :</strong> तपाईंले टिप्पणीमा विषय /शीर्ष पंक्ति  दिनुभएको छैन ।\nतपाईंले फेरि \"$1\"  थिच्नु भएमा , तपाईंको सम्पादन यसै रुपमा सङ्ग्रहित हुनेछ ।",
-       "summary-preview": "साराà¤\82श पूर्वालोकन:",
-       "subject-preview": "विषय/शीर्षपंक्ति पूर्वरुप:",
+       "summary-preview": "समà¥\8dपादन à¤¸à¤¾à¤°à¤¾à¤\82शà¤\95à¥\8b पूर्वालोकन:",
+       "subject-preview": "विषयको पूर्वावलोकन:",
        "previewerrortext": "तपाईंको परिवर्तनको पूर्वावलोकन बनाउन खोज्दा समस्या आएको छ ।",
        "blockedtitle": "प्रयोककर्तालाई रोक लगाइएको छ",
        "blockedtext": "'''तपाईंको प्रयोगकर्ता नाम या आइ पी ठेगानालाई रोक लगाइएको छ ।'''\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कृपया तपाईँको प्रश्नमा सबै जानकारी खुलाउनुहोला ।",
        "page_last": "अन्तिम",
        "histlegend": "अन्तर चयन:संशोधनहरूको तुलनाको लागि रेडियो बाकसमा क्लिक गरेर इण्टर गर्नुहोस् अथवा तल दिएको बटनमा थिच्नुहोस् <br />\nलिजेंड: (चालू): '''({{int:cur}})''' = अवतरणको बीचमा अन्तर, '''({{int:last}})''' = पहिलाका अवतरणको बीचमा अन्तर, '''{{int:minoreditletter}}''' = सानो परिवर्तन।",
        "history-fieldset-title": "संशोधनका लागि खोजी गर्नुहोस्",
-       "history-show-deleted": "मेटिएका मात्र",
+       "history-show-deleted": "सà¤\82शà¥\8bधन à¤®à¥\87à¤\9fिà¤\8fà¤\95ा à¤®à¤¾à¤¤à¥\8dर",
        "histfirst": "पुरानो",
        "histlast": "नयाँ",
        "historysize": "({{PLURAL:$1|१ बाइट |$1 बाइटहरू}})",
        "revdelete-unsuppress": "पुनर्स्थापित पुनरावृत्तिबाट बन्देज हटाउने",
        "revdelete-log": "कारण :",
        "revdelete-submit": "{{PLURAL:$1|छानिएको संशोधन|छानिएका संशोधनहरु}}मा प्रयोग गर्ने",
-       "revdelete-success": "'''संशोधन दृश्यता सफलतापूर्वक अद्यतन भयो।'''",
+       "revdelete-success": "संशोधन दृश्यता अद्यतन भयो।",
        "revdelete-failure": "'''संशोधन दृश्यता अद्यतन गर्न सकिएन:'''\n$1",
        "logdelete-success": "'''लग दृष्टि सफलतापूर्वक मिलाइयो ।'''",
        "logdelete-failure": "'''लग दृष्टि मिलाउन सकिएन :'''\n$1",
        "prefs-help-prefershttps": "यो अभिरूची तपाईंको अर्को प्रवेश (लग इन) बाट लागु हुनेछ ।",
        "prefswarning-warning": "तपाईंले आफ्नो अभिरूचीमा गर्नुभएको परिवर्तन अहिले सम्म सङ्ग्रह गरिएको छैन। यदि तपाईं \"$1\" मा क्लिक नगरी यस पृष्ठबाट बाहिर जानुभयो भने तपाईंको अभिरूची अपडेट गर्न सकिदैन।",
        "prefs-tabs-navigation-hint": "सुझाव: तपाईं ट्याबसहरूमा ट्याबसको बीच आवागमन गर्नका लागि देब्रे वा दाहिने तीर साँचोको प्रयोग गर्न सक्नुहुन्छ।",
-       "userrights": "प्रयोगकर्ता अधिकार व्यवस्थापन",
+       "userrights": "प्रयोगकर्ता अधिकारहरू",
        "userrights-lookup-user": "प्रयोगकर्ता समूह व्यवस्थापन गर्नुहोस",
        "userrights-user-editname": "प्रयोगकर्ता नाम दिनुहोस् :",
        "editusergroup": "प्रयोगकर्ता समूह सम्पादन गर्नुहोस्",
index 3bf9a31..cb8cb0a 100644 (file)
        "parser-template-loop-warning": "Er is een kringloop in sjablonen geconstateerd: [[$1]]",
        "template-loop-category": "Pagina's met sjablonen die zichzelf insluiten",
        "template-loop-category-desc": "De pagina bevat een sjabloon dat zichzelf insluit, bijvoorbeeld een sjabloon dat zichzelf recursief aanroept.",
+       "template-loop-warning": "<strong>Waarschuwing:</strong> Deze pagina roept [[:$1]] aan, wat een sjabloon kringloop veroorzaakt (een oneindige recursieve aanroep).",
        "parser-template-recursion-depth-warning": "De recursiediepte voor sjablonen is overschreden ($1)",
        "language-converter-depth-warning": "De dieptelimiet voor de taalconvertor is overschreden ($1)",
        "node-count-exceeded-category": "Pagina's waar het maximaal aantal nodes is overschreden",
        "timezoneregion-indian": "Indische Oceaan",
        "timezoneregion-pacific": "Stille Oceaan",
        "allowemail": "E-mail van andere gebruikers toestaan",
+       "email-blacklist-label": "Voorkom dat deze gebruikers e-mails naar mij kunnen sturen:",
        "prefs-searchoptions": "Zoeken",
        "prefs-namespaces": "Naamruimten",
        "default": "standaard",
        "rcfilters-liveupdates-button-title-off": "Toon nieuwe wijzigingen op het moment dat ze gebeuren",
        "rcfilters-watchlist-markseen-button": "Alle wijzigingen markeren als bezocht.",
        "rcfilters-watchlist-edit-watchlist-button": "Bewerk uw volglijst",
+       "rcfilters-preference-label": "Verberg de verbeterde versie van Recente Wijzigingen",
        "rcnotefrom": "Wijzigingen sinds <strong>$3 om $4</strong> (maximaal <strong>$1</strong> {{PLURAL:$1|wijziging|wijzigingen}}).",
        "rclistfromreset": "Datum selectie opnieuw instellen",
        "rclistfrom": "Wijzigingen bekijken vanaf $3 $2",
        "file-deleted-duplicate-notitle": "Er is een verwijderd bestand aangetroffen dat identiek is aan dit bestand, en de naam van het bestand is onderdrukt.\nVraag iemand die onderdrukte bestandsgegevens kan bekijken om de situatie opnieuw te beoordelen voordat u het bestand opnieuw toevoegt.",
        "uploadwarning": "Uploadwaarschuwing",
        "uploadwarning-text": "Pas de onderstaande bestandsbeschrijving aan en probeer het daarna opnieuw.",
+       "uploadwarning-text-nostash": "Upload het bestand opnieuw, pas de beschrijving hier beneden aan en probeer het opnieuw.",
        "savefile": "Bestand opslaan",
        "uploaddisabled": "Uploaden is uitgeschakeld",
        "copyuploaddisabled": "Het uploaden van bestanden via een URL is uitgeschakeld.",
        "listfiles_size": "Grootte",
        "listfiles_description": "Beschrijving",
        "listfiles_count": "Versies",
-       "listfiles-show-all": "Oude versies van afbeeldingen opnemen",
+       "listfiles-show-all": "Oude versies van bestanden opnemen",
        "listfiles-latestversion": "Huidige versie",
        "listfiles-latestversion-yes": "Ja",
        "listfiles-latestversion-no": "Nee",
index e2bb178..7641cca 100644 (file)
        "passwordreset-emailelement": "↓Brukarnamn: \n$1\n\nMellombels passord: \n$2",
        "passwordreset-emailsentemail": "Ein e-post for attendestilling av passord er vorten send",
        "changeemail": "Endre eller fjern e-postadresse",
-       "changeemail-header": "↓Endre kontoen si e-postadresse",
+       "changeemail-header": "Fyll ut dette skjemaet for å endre e-postadressa di. Ynskjer du å fjerne tilknytinga ei e-postadresse har til kontoen din, lat feltet for ny e-postadresse stå tomt når du sender inn skjemaet.",
        "changeemail-no-info": "↓Du må vera pålogga for å få tilgang direkte til denne sida.",
-       "changeemail-oldemail": "↓Noverande e-postadresse:",
+       "changeemail-oldemail": "Gjeldande e-postadresse:",
        "changeemail-newemail": "Ny e-postadresse:",
+       "changeemail-newemail-help": "Dette feltet skal stå tomt om du ynskjer å fjerne e-postadressa di. Du kan ikkje nullstille eit gløymt passord og kan heller ikkje ta imot e-postar frå denne wikien om e-postadressa er fjerna.",
        "changeemail-none": "↓(ingen)",
        "changeemail-password": "{{SITENAME}}-passordet ditt:",
-       "changeemail-submit": "Endre e-post",
+       "changeemail-submit": "Endre e-post",
        "changeemail-throttled": "Du har freista for mange gonger å logga inn. Du lyt venta $1 før du kan freista på nytt.",
        "bold_sample": "Halvfeit skrift",
        "bold_tip": "Halvfeit skrift",
        "last": "førre",
        "page_first": "fyrste",
        "page_last": "siste",
-       "histlegend": "Merk av for dei versjonane du vil samanlikne og trykk [Enter] eller klikk på knappen nedst på sida.<br />Forklaring: (no) = skilnad frå den noverande versjonen, (førre) = skilnad frå den førre versjonen, <b>s</b> = småplukk",
+       "histlegend": "Merk av for dei versjonane du vil samanlikne og trykk [Enter] eller klikk på knappen nedst på sida.<br />\nForklaring: <strong>({{int:cur}})</strong> = skilnad frå den noverande versjonen, <strong>({{int:last}})</strong> = skilnad frå den førre versjonen, <strong>{{int:minoreditletter}}</strong> = småplukk",
        "history-fieldset-title": "Søk etter versjonar",
        "history-show-deleted": "Berre sletta versjonar",
        "histfirst": "eldste",
        "prefs-watchlist-token": "Nykel for overvakingslista:",
        "prefs-misc": "Andre",
        "prefs-resetpass": "Endra passord",
-       "prefs-changeemail": "↓Endre e-postadresse",
+       "prefs-changeemail": "Endre eller fjern e-postadresse",
        "prefs-setemail": "↓Oppgje ei e-postadresse",
        "prefs-email": "Val for e-post",
        "prefs-rendering": "Utsjånad",
index 8fcd2b7..9d4e883 100644 (file)
@@ -89,7 +89,9 @@
                        "Kirsan",
                        "Krottyianock",
                        "Mazab IZW",
-                       "InternerowyGołąb"
+                       "InternerowyGołąb",
+                       "Wojtas",
+                       "Kastanoto"
                ]
        },
        "tog-underline": "Podkreślenie linków:",
        "rcfilters-liveupdates-button-title-off": "Wyświetlaj nowe zmiany zaraz po tym jak nastąpią",
        "rcfilters-watchlist-markseen-button": "Oznacz wszystkie zmiany jako obejrzane",
        "rcfilters-watchlist-edit-watchlist-button": "Edytuj swoją listę obserwowanych stron",
+       "rcfilters-preference-label": "Wyłącz ulepszenia strony Ostatnie zmiany",
        "rcnotefrom": "Poniżej {{PLURAL:$5|pokazano zmianę|pokazano zmiany}} {{PLURAL:$5|wykonaną|wykonane}} po <strong>$3, $4</strong> (nie więcej niż '''$1''' pozycji).",
        "rclistfromreset": "Zresetuj wybór daty",
        "rclistfrom": "Pokaż nowe zmiany od $3 $2",
        "listfiles_size": "Wielkość",
        "listfiles_description": "Opis",
        "listfiles_count": "Wersje",
-       "listfiles-show-all": "Uwzględnij starsze wersje zdjęć",
+       "listfiles-show-all": "Uwzględnij starsze wersje plików",
        "listfiles-latestversion": "Aktualna wersja",
        "listfiles-latestversion-yes": "Tak",
        "listfiles-latestversion-no": "Nie",
        "unwatchthispage": "Nie obserwuj",
        "notanarticle": "To nie jest artykuł",
        "notvisiblerev": "Wersja została usunięta",
-       "watchlist-details": "Lista obserwowanych przez Ciebie stron zawiera {{PLURAL:$1|$1 pozycję|$1 pozycje|$1 pozycji}}, nie licząc oddzielnie stron dyskusji.",
+       "watchlist-details": "Lista obserwowanych przez Ciebie stron zawiera {{PLURAL:$1|$1 pozycję|$1 pozycje|$1 pozycji}}, razem ze stronami dyskusji.",
        "wlheader-enotif": "Wysyłanie powiadomień na adres e‐mail jest włączone.",
        "wlheader-showupdated": "'''Wytłuszczone''' zostały strony, które zostały zmodyfikowane od Twojej ostatniej wizyty na nich.",
        "wlnote": "Poniżej pokazano {{PLURAL:$1|zmianę wykonaną|<strong>$1</strong> zmiany wykonane|<strong>$1</strong> zmian wykonanych}} w ciągu {{PLURAL:$2|ostatniej godziny|ostatnich <strong>$2</strong> godzin}}, licząc od $4 dnia $3.",
        "htmlform-int-toolow": "Podana wartość jest poniżej dopuszczalnego minimum $1",
        "htmlform-int-toohigh": "Podana wartość jest powyżej dopuszczalnego maximum $1",
        "htmlform-required": "Podanie tej wartości jest wymagane",
-       "htmlform-submit": "Wyślij",
+       "htmlform-submit": "Prześlij",
        "htmlform-reset": "Cofnij zmiany",
        "htmlform-selectorother-other": "Inne",
        "htmlform-no": "Nie",
index c49bcd0..75879f7 100644 (file)
@@ -8,7 +8,8 @@
                        "Macofe",
                        "Amire80",
                        "Matma Rex",
-                       "Ibrahim khashrowdi"
+                       "Ibrahim khashrowdi",
+                       "Baloch Khan"
                ]
        },
        "tog-underline": "کرښنې تړنې:",
        "anontalk": "خبرې اترې",
        "navigation": "گرځښت",
        "and": "&#32;او",
-       "qbfind": "موندل",
-       "qbbrowse": "سپړل",
-       "qbedit": "سمول",
-       "qbpageoptions": "همدا مخ",
-       "qbmyoptions": "زما پاڼې",
        "faq": "ډ-ځ-پ",
-       "faqpage": "Project:ډ-ځ-پ",
        "actions": "کړنې",
        "namespaces": "نوم-تشيالونه",
        "variants": "ډولونه",
        "searcharticle": "ورځه",
        "history": "د مخ پېښليک",
        "history_short": "پېښليک",
+       "history_small": "تاریخ",
        "updatedmarker": "زما د وروستي راتگ نه راپدېخوا اوسمهاله شوی",
        "printableversion": "چاپي بڼه",
        "permalink": "تلپاتې تړنه",
        "edit-local": "سيمه ايزې څرگندونې سمول",
        "create": "جوړول",
        "create-local": "سيمه ايزې څرگندونې ورگډول",
-       "editthispage": "همدا مخ سمول",
-       "create-this-page": "همدا مخ ليکل",
        "delete": "ړنگول",
-       "deletethispage": "دا مخ ړنگول",
-       "undeletethispage": "دا مخ ناړنگول",
        "undelete_short": "{{PLURAL:$1|يو سمون|$1 سمونې}} ناړنگول",
        "viewdeleted_short": "{{PLURAL:$1|يو ړنگ شوی سمون|$1 ړنگ شوي سمونونه}} کتل",
        "protect": "ژغورل",
        "protect_change": "بدلون",
-       "protectthispage": "همدا مخ ژغورل",
        "unprotect": "ژغورنه بدلول",
-       "unprotectthispage": "د دې مخ ژغورنه بدلول",
        "newpage": "نوی مخ",
-       "talkpage": "د دې مخ په اړه خبرې اترې کول",
        "talkpagelinktext": "خبرې اترې",
        "specialpage": "ځانگړی مخ",
        "personaltools": "شخصي اوزار",
-       "articlepage": "د مخ مېنځپانگه ښکاره کول",
        "talk": "خبرې اترې",
        "views": "کتنې",
        "toolbox": "اوزارونه",
-       "userpage": "د کارن پاڼه کتل",
-       "projectpage": "د پروژې مخ کتل",
+       "tool-link-userrights": "د{{GENDER:$1|کارن}} ګروپونه بدل کړي",
+       "tool-link-userrights-readonly": "د{{GENDER:$1|کارن}} ګروپونه ښکاره کړي",
+       "tool-link-emailuser": "دې {{GENDER:$1|کارن}} ته برېښناليک لېږل",
        "imagepage": "د دوتنې مخ کتل",
        "mediawikipage": "پيغام مخ کتل",
        "templatepage": "د کينډۍ مخ کتل",
        "virus-scanfailed": "ځيرڅارنه بريالۍ نه شوه (کوډ $1)",
        "virus-unknownscanner": "ناڅرگند ضدويروس:",
        "logouttext": "'''اوس تاسې د غونډال څخه ووتلئ.'''\n\nدا په پام کې وساتۍ چې تر څو تاسې د خپل کتنمل حافظه نه وي سپينه کړې، نو ځينې مخونو کې به لا تر اوسه پورې په غونډال کې ننوتي ښکارۍ.",
+       "cannotlogoutnow-title": "وس نسم کولاي بهر تري ووځم",
        "welcomeuser": "$1، ښه راغلې!",
        "welcomecreation-msg": "گڼون مو جوړ شو.\nد [[Special:Preferences|{{SITENAME}} غوره توبونه]] بدلول مو مه هېروۍ.",
        "yourname": "کارن-نوم:",
        "createacct-yourpasswordagain-ph": "پټنوم مو بيا وټاپئ",
        "userlogin-remembermypassword": "غونډال کې مې ننوتلی وساته",
        "userlogin-signwithsecure": "خوندي اړيکتيا کارول",
+       "cannotloginnow-title": "نسم کولای چې دننه سم",
        "cannotcreateaccount-title": "گڼونونه نه شي جوړېدای",
        "yourdomainname": "ستاسې شپول:",
        "password-change-forbidden": "تاسې په دې ويکي باندې خپل پټنوم نه شی بدلولی.",
        "botpasswords-label-update": "اوسمهالول",
        "botpasswords-label-cancel": "ناگارل",
        "botpasswords-label-delete": "ړنگول",
+       "botpasswords-label-resetpassword": "پټوم بدل کړي",
+       "botpasswords-label-grants": "تطبیق وړ ګرانټ:",
        "resetpass_forbidden": "پټنومونه مو نه شي بدلېدلای",
        "resetpass-no-info": "دې مخ ته د لاسرسي لپاره بايد غونډال کې ورننوځۍ.",
        "resetpass-submit-loggedin": "پټنوم بدلول",
        "editusergroup": "{{GENDER:$1|کارن}} ډلې سمول",
        "editinguser": "د <strong>[[User:$1|$1]]</strong> {{GENDER:$1|کارن}} رښتې بدلول $2",
        "userrights-editusergroup": "کارن ډلې سمول",
+       "userrights-viewusergroup": "د{{GENDER:$1|کارن}} ګروپونه ښکاره کړي",
        "saveusergroups": "{{GENDER:$1|کارن}} ډلې خوندي کول",
        "userrights-groupsmember": "غړی د:",
        "userrights-groupsmember-auto": "ضمني غړی د:",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|د نويو مخونو لړليک]] هم وگورئ)",
        "recentchanges-legend-plusminus": "(<em>±123</em>)",
        "recentchanges-submit": "ښکاره کول",
+       "rcfilters-tag-remove": "لرې کړئ'$1'",
+       "rcfilters-savedqueries-rename": "نوم بدلول",
        "rcfilters-filterlist-title": "چاڼگران",
        "rcfilters-filter-user-experience-level-newcomer-label": "نوي راغلي",
        "rcfilters-filter-user-experience-level-learner-label": "زده کوونکي",
        "pageswithprop-submit": "ورځه",
        "doubleredirects": "دوه ځلي ورگرځېدنې",
        "doubleredirectstext": "په دې مخ د هغو مخونو لړليک دی چې نورو مخ گرځېدنو ته مخ گرځونې لري.\nهره يوه ليکه لومړنۍ او دويمې مخ گرځونې سره تړنه لري، همداراز د دويمې مخ گرځونې مخ چې اکثراً د \"اصلي\" موخې مخ دی، بايد لومړنۍ مخ گرځونې ته نغوته وکړي.\n<del>کرښه خوړلي</del> توکي وار له مخه سم شوي دي.",
+       "double-redirect-fixer": "راګرځونه جوړونکي",
        "brokenredirects": "ماتې ورگرځېدنې",
        "brokenredirectstext": "لاندينۍ مخ گرځونې ناموجوده مخونو سره تړنې لري:",
        "brokenredirects-edit": "سمول",
        "unblocked-range": "له $1 بنديز ليرې شو",
        "unblocked-ip": "له [[Special:Contributions/$1|$1]] څخه بنديز ليرې شو.",
        "blocklist": "بنديز لگېدلي کارنان",
+       "autoblocklist-submit": "پلټل",
        "ipblocklist": "بنديز لگېدلي کارنان",
        "ipblocklist-legend": "يو بنديز شوی کارن موندل",
        "blocklist-userblocks": "گڼون بنديزونه پټول",
        "ipb-needreblock": "پر $1 د پخوا نه بنديز لگېدلی.\nآيا تاسې د امستنو بدلول غواړۍ؟",
        "ipb-otherblocks-header": "{{PLURAL:$1|بل بنديز|نور بنديزونه}}",
        "ip_range_invalid": "ناسم آی پي بريد.",
+       "proxyblocker": "پروکسي بنديز لګونکي",
        "lockdb": "توکبنسټ تړل",
        "unlockdb": "توکبنسټ پرانيستل",
        "lockconfirm": "هو، زه د توکبنسټ تړل غواړم.",
        "patrol-log-header": "دا د څارل شويو مخکتنو يو يادښت دی.",
        "log-show-hide-patrol": "د څارنې يادښت $1",
        "log-show-hide-tag": "نښلن يادښت $1",
+       "confirm-markpatrolled-button": "ښه",
        "deletedrevision": "د $1 زړه ړنگه شوې بڼه",
        "filedeleteerror-short": "د دوتنې د ړنگولو ستونزه: $1",
        "filedeleteerror-long": "د دوتنې په ړنگولو کې تېروتنې پېښې شوې:\n\n$1",
        "version-libraries-authors": "ليکوالان",
        "redirect": "ورگرځېدنې د دوتنې، کارن، مخ يا بڼې پېژند له مخې",
        "redirect-submit": "ورځه",
+       "redirect-lookup": "وګوري:",
        "redirect-value": "ارزښت:",
        "redirect-user": "کارن پېژند",
        "redirect-page": "د مخ پېژند",
+       "redirect-revision": "بياکتونکي مخ",
        "redirect-file": "د دوتنې نوم",
        "redirect-logid": "پېژند يادښت",
        "redirect-not-exists": "ارزښت و نه موندل شو",
        "fileduplicatesearch-noresults": "د \"$1\" په نوم دوتنه و نه موندل شوه.",
        "specialpages": "ځانگړي مخونه",
        "specialpages-note-top": "څرگندونې",
-       "specialpages-note": "* نورماله ځانگړي مخونه.\n* <strong class=\"mw-specialpagerestricted\">محدوده ځانگړي مخونه.</strong>",
        "specialpages-group-maintenance": "د څارنې راپورونه",
        "specialpages-group-other": "نور ځانگړي مخونه",
        "specialpages-group-login": "ننوتل / گڼون جوړول",
        "htmlform-title-not-exists": "$1 نشته.",
        "htmlform-user-not-exists": "<strong>$1</strong> نشته.",
        "logentry-delete-delete": "$1 د $3 مخ {{GENDER:$2|ړنگ کړ}}",
+       "logentry-delete-restore": "$1 د $3 مخ $4 ته {{GENDER:$2|ولېږداوه}}",
        "revdelete-content-hid": "مېنځپانگه پټېدلې",
        "revdelete-uname-hid": "کارن نوم پټ شوی",
        "revdelete-content-unhid": "مېنځپانگه ښکاره شوی",
        "logentry-rights-rights": "$1 د $3 لپاره د غړيتوب ډله له $4 څخه $5 ته {{GENDER:$2|بدله کړه}}",
        "logentry-rights-rights-legacy": "$1 د $3 لپاره د غړيتوب ډله {{GENDER:$2|بدله کړه}}",
        "logentry-upload-upload": "$1 $3 {{GENDER:$2|ورپورته يې کړ}}",
+       "logentry-upload-overwrite": "$1 نوي ويرژن {{GENDER:$2|پورته}} سو $3",
        "logentry-upload-revert": "$1 $3 يې {{GENDER:$2|ورپورته کړه}}",
        "log-name-managetags": "د نښلن مهارولو يادښت",
        "log-name-tag": "نښلن يادښت",
        "authmanager-realname-label": "اصلي نوم",
        "authmanager-realname-help": "د کارن اصلي نوم",
        "authprovider-resetpass-skip-label": "تېرېدل",
+       "specialpage-securitylevel-not-allowed-title": "اجازه نسته",
        "changecredentials-submit": "بدلول",
        "removecredentials-submit": "غورځول",
        "credentialsform-account": "گڼون نوم:"
index d1c9de9..5097c2b 100644 (file)
        "parser-template-loop-warning": "Ciclo de predefinições detectado: [[$1]]",
        "template-loop-category": "Páginas com loops de predefinição",
        "template-loop-category-desc": "A página contém um loop de predefinição, ou seja, uma predefinição que se chama recursivamente.",
+       "template-loop-warning": "<strong>Aviso:</strong> Esta página chama [[:$1]] o que causa um ciclo infinito de predefinições (uma chamada recursiva sem término).",
        "parser-template-recursion-depth-warning": "O limite de profundidade de recursividade de predefinição foi ultrapassado ($1)",
        "language-converter-depth-warning": "O limite de profundidade do conversor de línguas excedeu a ($1)",
        "node-count-exceeded-category": "Páginas em que o total de nós é excedido",
        "timezoneregion-indian": "Oceano Índico",
        "timezoneregion-pacific": "Oceano Pacífico",
        "allowemail": "Permitir que outros usuários me enviem e-mails",
+       "email-blacklist-label": "Proibir que esses usuários me enviem e-mails:",
        "prefs-searchoptions": "Busca",
        "prefs-namespaces": "Espaços nominais",
        "default": "padrão",
        "rcfilters-watchlist-markseen-button": "Marque todas as mudanças como visto",
        "rcfilters-watchlist-edit-watchlist-button": "Edite sua lista de páginas vigiadas",
        "rcfilters-watchlist-showupdated": "As alterações nas páginas que você não visitou desde as mudanças ocorridas estão em <strong>negrito</strong>, com marcadores sólidos.",
+       "rcfilters-preference-label": "Ocultar a versão melhorada das Mudanças Recentes",
+       "rcfilters-preference-help": "Reverte o redesenho da interface de 2017 e todas as ferramentas adicionadas na altura e desde então.",
        "rcnotefrom": "Abaixo {{PLURAL:$5|é a mudança|são as mudanças}} desde <strong>$3, $4</strong> (up to <strong>$1</strong> shown).",
        "rclistfromreset": "Redefinir seleção da data",
        "rclistfrom": "Mostrar as novas alterações a partir das $2 de $3",
        "file-deleted-duplicate-notitle": "Um arquivo idêntico a este foi anteriormente excluído, e o título foi suprimido. Você deve comunicar com alguém capaz de visualizar dados suprimidos, para verificar a situação antes de enviá-lo novamente.",
        "uploadwarning": "Aviso de envio",
        "uploadwarning-text": "Modifique a descrição do arquivo abaixo e tente novamente.",
+       "uploadwarning-text-nostash": "Por favor, recarregue o arquivo, modifique a descrição abaixo e tente novamente.",
        "savefile": "Salvar arquivo",
        "uploaddisabled": "Envio de arquivos desativado.",
        "copyuploaddisabled": "O upload por URL encontra-se desativado.",
        "listfiles_size": "Tamanho",
        "listfiles_description": "Descrição",
        "listfiles_count": "Versões",
-       "listfiles-show-all": "Incluir versões antigas das imagens",
+       "listfiles-show-all": "Inclua versões antigas de arquivos",
        "listfiles-latestversion": "Versão atual",
        "listfiles-latestversion-yes": "Sim",
        "listfiles-latestversion-no": "Não",
        "sp-contributions-newonly": "Mostrar somente as criações de páginas",
        "sp-contributions-hideminor": "Ocultar edições menores",
        "sp-contributions-submit": "Pesquisar",
+       "sp-contributions-outofrange": "Não é possível mostrar nenhum resultado. A gama de endereços IP pedida é maior do que o limite /$1 do intervalo CIDR.",
        "whatlinkshere": "Páginas afluentes",
        "whatlinkshere-title": "Páginas que têm links para \"$1\"",
        "whatlinkshere-page": "Página:",
index e6f323e..107b547 100644 (file)
        "parser-template-loop-warning": "Ciclo de predefinições detetado: [[$1]]",
        "template-loop-category": "Páginas com ciclos infinitos de predefinições",
        "template-loop-category-desc": "Esta página contém um ciclo infinito de predefinições, isto é, uma predefinição que se chama a si própria recursivamente.",
+       "template-loop-warning": "<strong>Aviso:</strong> Esta página chama [[:$1]] o que causa um ciclo infinito de predefinições (uma chamada recursiva sem término).",
        "parser-template-recursion-depth-warning": "Foi excedido o limite da profundidade de recursividade nas predefinições ($1)",
        "language-converter-depth-warning": "O limite de profundidade do conversor de idiomas excedeu a ($1)",
        "node-count-exceeded-category": "Páginas em que o total de nós é excedido",
        "timezoneregion-indian": "Oceano Índico",
        "timezoneregion-pacific": "Oceano Pacífico",
        "allowemail": "Aceitar correio eletrónico de outros utilizadores",
+       "email-blacklist-label": "Proibir estes utilizadores de me enviarem correio eletrónico:",
        "prefs-searchoptions": "Pesquisa",
        "prefs-namespaces": "Domínios",
        "default": "padrão",
        "rcfilters-watchlist-markseen-button": "Marcar todas as modificações como já vistas",
        "rcfilters-watchlist-edit-watchlist-button": "Editar a sua lista de páginas vigiadas",
        "rcfilters-watchlist-showupdated": "As mudanças das páginas que ainda não visitou após terem sido alteradas aparecem a <strong>negrito</strong>, com marcadores sólidos.",
+       "rcfilters-preference-label": "Ocultar a versão melhorada das mudanças recentes",
+       "rcfilters-preference-help": "Reverte o redesenho da interface de 2017 e todas as ferramentas adicionadas na altura e desde então.",
        "rcnotefrom": "Abaixo {{PLURAL:$5|está a mudança|estão as mudanças}} desde <strong>$2</strong> (mostradas até <strong>$1</strong>).",
        "rclistfromreset": "Reiniciar a seleção da data",
        "rclistfrom": "Mostrar as novas mudanças a partir das $2 de $3",
        "uploadbtn": "Carregar ficheiro",
        "reuploaddesc": "Cancelar o envio e voltar ao formulário de carregamento",
        "upload-tryagain": "Submeta a descrição do ficheiro modificado",
+       "upload-tryagain-nostash": "Enviar o ficheiro a recarregar e a descrição modificada",
        "uploadnologin": "Não autenticado",
        "uploadnologintext": "Tem de $1 para enviar ficheiros.",
        "upload_directory_missing": "O diretório de carregamento de ficheiros ($1) não existe e o servidor de Internet não conseguiu criá-lo.",
        "file-deleted-duplicate-notitle": "Um ficheiro idêntico já foi eliminado e o seu título suprimido. Devia pedir a alguém capaz de ver os dados dos ficheiros eliminados para verificar a situação antes de carregá-lo novamente.",
        "uploadwarning": "Aviso de envio",
        "uploadwarning-text": "Modifique a descrição do ficheiro abaixo e tente novamente, por favor.",
+       "uploadwarning-text-nostash": "Recarregue o ficheiro, modifique a descrição abaixo e tente novamente, por favor.",
        "savefile": "Gravar ficheiro",
        "uploaddisabled": "Carregamentos desativados",
        "copyuploaddisabled": "Carregamento por URL desativado.",
        "listfiles_size": "Tamanho",
        "listfiles_description": "Descrição",
        "listfiles_count": "Versões",
-       "listfiles-show-all": "Incluir versões antigas de imagens",
+       "listfiles-show-all": "Incluir as versões antigas dos ficheiros",
        "listfiles-latestversion": "Versão atual",
        "listfiles-latestversion-yes": "Sim",
        "listfiles-latestversion-no": "Não",
index 897728e..0a6e91b 100644 (file)
                        "Jhertel",
                        "Stryn",
                        "Mazab IZW",
-                       "Mainframe98"
+                       "Mainframe98",
+                       "Pginer"
                ]
        },
        "sidebar": "{{notranslate}}",
        "parser-template-loop-warning": "Parameters:\n* $1 - page title",
        "template-loop-category": "This message is used as a category name for a [[mw:Special:MyLanguage/Help:Tracking categories|tracking category]] where pages with template loops will be listed.",
        "template-loop-category-desc": "Pages with template loops category description. Shown on [[Special:TrackingCategories]].\n\nSee also:\n* {{msg-mw|Template-loop-category}}",
+       "template-loop-warning": "This message is displayed in edit preview when a template loop is detected on the previewed page.\n\nParameters:\n* $1 - the full title of template which causes the template loop.",
        "parser-template-recursion-depth-warning": "Parameters:\n* $1 - limit value of recursion depth",
        "language-converter-depth-warning": "Error message shown when a page uses too deeply nested language conversion syntax. Parameters:\n* $1 - the value of the depth limit",
        "node-count-exceeded-category": "This message is used as a category name for a [[mw:Help:Tracking categories|tracking category]] where pages are placed automatically if the node-count of the preprocessor exceeds the limit.\n\nSee also:\n* {{msg-mw|Node-count-exceeded-warning}}",
        "timezoneregion-indian": "Used in \"Time zone\" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], \"date and time\" tab.\n{{Related|Timezoneregion}}",
        "timezoneregion-pacific": "Used in \"Time zone\" listbox in [[Special:Preferences#mw-prefsection-datetime|preferences]], \"date and time\" tab.\n{{Related|Timezoneregion}}",
        "allowemail": "Used in [[Special:Preferences]] > {{int:prefs-personal}} > {{int:email}}.",
+       "email-blacklist-label": "Used in [[Special:Preferences]] > {{int:prefs-prohibit}} > {{int:email}}.",
        "prefs-searchoptions": "{{Identical|Search}}",
        "prefs-namespaces": "Shown as legend of the second fieldset of the tab 'Search' in [[Special:Preferences]]\n{{Identical|Namespace}}",
        "default": "{{Identical|Default}}",
        "prefs-editor": "Used in [[Special:Preferences]], tab \"Editing\" ({{int:prefs-editing}}).\n\n{{Identical|Editor}}",
        "prefs-preview": "Used in [[Special:Preferences]], tab \"Editing\".\n{{Identical|Preview}}",
        "prefs-advancedrc": "Used in [[Special:Preferences]], tab \"Recent changes\".\n{{Identical|Advanced options}}",
+       "prefs-opt-out": "Used in [[Special:Preferences]], tab \"Recent changes\".",
        "prefs-advancedrendering": "Used in [[Special:Preferences]], tab \"Appearence\".\n{{Identical|Advanced options}}",
        "prefs-advancedsearchoptions": "Used in [[Special:Preferences]], tab \"Search options\".\n{{Identical|Advanced options}}",
        "prefs-advancedwatchlist": "Used in [[Special:Preferences]], tab \"Watchlist\".\n{{Identical|Advanced options}}",
        "rcfilters-tag-prefix-namespace-inverted": "Prefix for the namespace inverted tags in [[Special:RecentChanges]]. Namespace tags use a colon (:) as prefix. Please keep this format.\n\nParameters:\n* $1 - Filter name.\n{{Identical|Not}}",
        "rcfilters-tag-prefix-tags": "Prefix for the edit tags in [[Special:RecentChanges]]. Edit tags use a hash (#) as prefix. Please keep this format.\n\nParameters:\n* $1 - Tag display name.",
        "rcfilters-exclude-button-off": "Title for the button that excludes selected namespaces, when it is not yet active.",
-       "rcfilters-exclude-button-on": "Title for the button that excludes selected namespaces, when it is not yet active.",
+       "rcfilters-exclude-button-on": "Title for the button that excludes selected namespaces, when it is active.",
        "rcfilters-view-advanced-filters-label": "Label for the view switch that changes between advanced filters in [[Special:RecentChanges]]",
        "rcfilters-view-tags": "Title for the tags view in [[Special:RecentChanges]]\n{{Identical|Tag}}",
        "rcfilters-view-namespaces-tooltip": "Tooltip for the button that loads the namespace view in [[Special:RecentChanges]]",
        "rcfilters-watchlist-markseen-button": "Label for the button to mark all changes as seen on [[Special:Watchlist]] when using the structured filters interface.",
        "rcfilters-watchlist-edit-watchlist-button": "Label for the button to edit the watched pages on [[Special:Watchlist]] when using the structured filters interface.\n\nCf. {{msg-mw|watchlisttools-edit}}.",
        "rcfilters-watchlist-showupdated": "Message at the top of [[Special:Watchlist]] when the Structured filters are enabled that describes what unseen changes look like.\n\nCf. {{msg-mw|wlheader-showupdated}}",
+       "rcfilters-preference-label": "Option in RecentChanges tab of [[Special:Preferences]].",
+       "rcfilters-preference-help": "Explanation for the option in the RecentChanges tab of [[Special:Preferences]].",
        "rcnotefrom": "This message is displayed at [[Special:RecentChanges]] when viewing recentchanges from some specific time.\n\nThe corresponding message is {{msg-mw|Rclistfrom}}.\n\nParameters:\n* $1 - the maximum number of changes that are displayed\n* $2 - (Optional) a date and time\n* $3 - a date\n* $4 - a time\n* $5 - Number of changes are displayed, for use with PLURAL",
        "rclistfromreset": "Used on [[Special:RecentChanges]] to reset a selection of a certain date range.",
        "rclistfrom": "Used on [[Special:RecentChanges]]. Parameters:\n* $1 - (Currently not use) date and time. The date and the time adds to the rclistfrom description.\n* $2 - time. The time adds to the rclistfrom link description (with split of date and time).\n* $3 - date. The date adds to the rclistfrom link description (with split of date and time).\n\nThe corresponding message is {{msg-mw|Rcnotefrom}}.",
        "uploadbtn": "Button name in [[Special:Upload]].\n\nSee also:\n* {{msg-mw|Uploadbtn}}\n* {{msg-mw|Accesskey-upload}}\n* {{msg-mw|Tooltip-upload}}\n{{Identical|Upload file}}",
        "reuploaddesc": "Used as button text in the Upload form on [[Special:Upload]].\n\nSee also:\n* {{msg-mw|upload-tryagain|Submit button text}}\n* {{msg-mw|ignorewarning|button text}}",
        "upload-tryagain": "Used as Submit button text in [[Special:Upload]].\n\nSee also:\n* {{msg-mw|Uploaderror|section header}}\n* {{msg-mw|ignorewarning|button text}}\n* {{msg-mw|reuploaddesc|button text}}",
+       "upload-tryagain-nostash": "Used as Submit button text in [[Special:Upload]] when the upload could not be stashed & the file needs to be reuploaded.\n\nSee also:\n* {{msg-mw|Uploaderror|section header}}\n* {{msg-mw|ignorewarning|button text}}\n* {{msg-mw|reuploaddesc|button text}}",
        "uploadnologin": "Used as title of the error message {{msg-mw|Uploadnologintext}}.\n{{Identical|Not logged in}}",
        "uploadnologintext": "Used as error message.\n\nThe title for this message is {{msg-mw|Uploadnologin}}.\n\nParameters:\n* $1 - link text {{msg-mw|Loginreqlink}}. The link points to [[Special:UserLogin]].\nSee also:\n* {{msg-mw|Whitelistedittext}}\n* {{msg-mw|Nocreatetext}}\n* {{msg-mw|Loginreqpagetext}}",
        "upload_directory_missing": "Parameters:\n* $1 - directory name",
        "file-deleted-duplicate-notitle": "Used in [[Special:Upload]] when the title of the deleted duplicate is not available.\n\nSee also:\n* {{msg-mw|file-deleted-duplicate}}",
        "uploadwarning": "Used as section header in [[Special:Upload]].",
        "uploadwarning-text": "Used in [[Special:Upload]].",
+       "uploadwarning-text-nostash": "Used in [[Special:Upload]], when the upload could not be stashed & the file needs to be reuploaded.",
        "savefile": "When uploading a file",
        "uploadedimage": "{{ignored}}This is a ''logentry'' message only used on IRC. $1 is the name of the file uploaded.",
        "overwroteimage": "{{ignored}}This is a ''logentry'' message only used on IRC. $1 is the name of the file uploaded.",
        "diff-form-revid": "Label for the field of the new revision in the comparison for [[Special:Diff]]",
        "diff-form-submit": "Submit button on [[Special:Diff]]",
        "diff-form-summary": "{{doc-specialpagesummary|diff}}",
-       "permanentlink": "The title of [[Special:PermanentLink]]",
-       "permanentlink-revid": "Label for the field for the revision ID in [[Special:PermanentLink]]",
+       "permanentlink": "The title of [[Special:PermanentLink]]\n{{Identical|Permalink}}",
+       "permanentlink-revid": "Label for the field for the revision ID in [[Special:PermanentLink]]\n{{Identical|Revision ID}}",
        "permanentlink-submit": "Submit button on [[Special:PermanentLink]]",
        "permanentlink-summary": "{{doc-specialpagesummary|permanentlink}}",
        "dberr-problems": "This message does not allow any wiki nor html markup.",
index 5fb74ed..343152d 100644 (file)
@@ -45,6 +45,7 @@
        "tog-watchlisthideminor": "Scunne le cangiaminde stuèdeche da l'elenghe de le pàggene condrollate",
        "tog-watchlisthideliu": "Scunne le cangiaminde de l'utinde canusciute da l'elenghe de le pàggene condrollate",
        "tog-watchlistreloadautomatically": "Recareche automaticamende l'eleghe de le pàggene condrollate quanne cange 'nu filtre (richieste Javascript)",
+       "tog-watchlistunwatchlinks": "Aggiunge collegaminde dirette pe langià/non langià le eleminde jndr'à le pàggene condrollate (vole 'u JavaScript pe ausà sta funzionalità).",
        "tog-watchlisthideanons": "Scunne le cangiaminde de l'utinde scanusciute da l'elenghe de le pàggene condrollate",
        "tog-watchlisthidepatrolled": "Scunne le cangiaminde condrollate jndr'à l'elenghe de le pàggene condrollate",
        "tog-watchlisthidecategorization": "Scunne 'a categorizzazzione d'a vôsce",
        "recentchanges-legend-heading": "<strong>Leggende:</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ('ndruche pure [[Special:NewPages|elenghe de le pàggene nuève]])",
        "recentchanges-submit": "Fà 'ndrucà",
+       "rcfilters-tag-remove": "Live '$1'",
+       "rcfilters-legend-heading": "<strong>Elenghe de le abbreviazziune:</strong>",
+       "rcfilters-other-review-tools": "<strong>Otre struminde de revisione</strong>",
+       "rcfilters-group-results-by-page": "Raggruppe le resultate pe pàgene",
        "rcfilters-grouping-title": "Stoche e raggruppe",
        "rcfilters-activefilters": "Filtre attive",
        "rcfilters-advancedfilters": "Filtre avanzate",
        "rcfilters-hours-title": "Urteme ore",
        "rcfilters-days-show-days": "$1 {{PLURAL:$1|sciurne}}",
        "rcfilters-days-show-hours": "$1 {{PLURAL:$1|ore}}",
+       "rcfilters-highlighted-filters-list": "Evidenziate: $1",
        "rcfilters-quickfilters": "Filtre reggistrate",
        "rcfilters-quickfilters-placeholder-title": "Nisciune collegamende reggistrate",
        "rcfilters-quickfilters-placeholder-description": "Pe reggistrà le 'mbostaziune d'u filtre tune e ausarle cchiù tarde, cazze sus a l'icone segnalibbre jndr'à l'arèe \"Fitlre attive\" aqquà sotte",
        "rcfilters-savedqueries-new-name-label": "Nome",
        "rcfilters-savedqueries-new-name-placeholder": "Dì a ce serve 'u filtre",
        "rcfilters-savedqueries-apply-label": "Ccrèje 'nu filtre",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "Ccreje 'nu filtre de base",
        "rcfilters-savedqueries-cancel-label": "Annulle",
+       "rcfilters-savedqueries-add-new-title": "Reggìstre le 'mbostaziune de mò d'u filtre",
+       "rcfilters-restore-default-filters": "Repristine le filtre de base",
+       "rcfilters-clear-all-filters": "Pulizze tutte le filtre",
+       "rcfilters-show-new-changes": "'Ndruche le urteme cangiaminde",
        "rcfilters-invalid-filter": "Filtre invalide",
        "rcfilters-empty-filter": "Nisciune filtre attive. Tutte le condrebbute avènene fatte 'ndrucà.",
        "rcfilters-filterlist-title": "Filtre",
        "listfiles_size": "Dimenzione",
        "listfiles_description": "Descrizione",
        "listfiles_count": "Versiune",
-       "listfiles-show-all": "'Nglude le versiune vicchie de le immaggine",
+       "listfiles-show-all": "'Nglude le versiune vicchie de le file",
        "listfiles-latestversion": "Versione de mò",
        "listfiles-latestversion-yes": "Sìne",
        "listfiles-latestversion-no": "None",
index f20985d..03b382d 100644 (file)
                        "Санюн Вадик",
                        "MustangDSG",
                        "Valeri'swiki",
-                       "Marat-avgust"
+                       "Marat-avgust",
+                       "Ernác",
+                       "Wertuose"
                ]
        },
        "tog-underline": "Подчёркивание ссылок:",
        "parser-template-loop-warning": "Обнаружена петля в шаблонах: [[$1]]",
        "template-loop-category": "Страницы с петлями в шаблонах",
        "template-loop-category-desc": "Эта страница содержит петлю в шаблоне, т.е. шаблон, который рекурсивно вызывает сам себя.",
+       "template-loop-warning": "<strong>Предупреждение:</ strong> Эта страница вызывает [[:$1]], который приводит к возникновению цикла в шаблоне (бесконечный рекурсивный вызов).",
        "parser-template-recursion-depth-warning": "Превышен предел глубины рекурсии шаблона ($1)",
        "language-converter-depth-warning": "Превышен предел глубины преобразователя языков ($1)",
        "node-count-exceeded-category": "Страницы, на которых превышено число узлов",
        "timezoneregion-indian": "Индийский океан",
        "timezoneregion-pacific": "Тихий океан",
        "allowemail": "Разрешить получение электронной почты от других участников",
+       "email-blacklist-label": "Запретить этим участникам отправлять мне электронные письма:",
        "prefs-searchoptions": "Поиск",
        "prefs-namespaces": "Пространства имён",
        "default": "по умолчанию",
        "rcfilters-view-advanced-filters-label": "Расширенные фильтры",
        "rcfilters-view-tags": "Тегированные правки",
        "rcfilters-view-namespaces-tooltip": "Результаты фильтра по пространствам имён",
-       "rcfilters-view-tags-tooltip": "РезÑ\83лÑ\8cÑ\82аÑ\82Ñ\8b Ñ\84илÑ\8cÑ\82Ñ\80а, Ð¸Ñ\81полÑ\8cзÑ\83Ñ\8eÑ\89его метки правок",
+       "rcfilters-view-tags-tooltip": "ФилÑ\8cÑ\82Ñ\80оваÑ\82Ñ\8c Ñ\80езÑ\83лÑ\8cÑ\82аÑ\82Ñ\8b, Ð¸Ñ\81полÑ\8cзÑ\83Ñ\8f метки правок",
        "rcfilters-view-return-to-default-tooltip": "Вернуться в главное меню фильтров",
        "rcfilters-liveupdates-button": "Обновлять автоматически",
        "rcfilters-liveupdates-button-title-on": "Отключить автоматические обновления",
        "rcfilters-watchlist-markseen-button": "Отметить все изменения как просмотренные",
        "rcfilters-watchlist-edit-watchlist-button": "Редактировать ваш список просмотренных страниц",
        "rcfilters-watchlist-showupdated": "Изменения страниц, которые вы не посещали с того момента, как они изменились, выделены <strong>жирным</strong> и отмечены полным маркером.",
+       "rcfilters-preference-label": "Скрыть улучшенную версию Последних изменений",
+       "rcfilters-preference-help": "Откатывает редизайн интерфейса 2017 года и все инструменты, добавленные с тех пор.",
        "rcnotefrom": "Ниже {{PLURAL:$5|указано изменение|перечислены изменения}} с <strong>$3, $4</strong> (показано не более <strong>$1</strong>).",
        "rclistfromreset": "Сбросить выбор даты",
        "rclistfrom": "Показать изменения с $3 $2.",
        "uploadbtn": "Загрузить файл",
        "reuploaddesc": "Вернуться к форме загрузки",
        "upload-tryagain": "Отправить изменённое описание файла",
+       "upload-tryagain-nostash": "Отправить повторно загруженный файл и изменённое описание",
        "uploadnologin": "Вы не представились системе",
        "uploadnologintext": "Вы должны $1, чтобы загружать файлы на сервер.",
        "upload_directory_missing": "Директория для загрузок ($1) отсутствует и не может быть создана веб-сервером.",
        "file-deleted-duplicate-notitle": "Файл, идентичный этому файлу, был ранее удалён, а имя файла было запрещено.\nВам следует попросить кого-нибудь с правами просмотра данных по запрещённым файлам, чтобы он проанализировал ситуацию перед тем, как загружать файл снова.",
        "uploadwarning": "Предупреждение",
        "uploadwarning-text": "Пожалуйста, измените представленное ниже описание файла и попробуйте ещё раз.",
+       "uploadwarning-text-nostash": "Повторите загрузку файла, измените описание ниже и повторите попытку.",
        "savefile": "Записать файл",
        "uploaddisabled": "Загрузка запрещена",
        "copyuploaddisabled": "Загрузка по URL отключена.",
index 047d508..12889fb 100644 (file)
@@ -26,8 +26,8 @@
        "tog-watchuploads": "منھنجا نوان چاڙهيل فائيلس نظر ۾ فھرست ۾ شامل ڪريو",
        "tog-watchrollback": "انهن صفحن کي منهنجي نظر ۾ فھرست تي رکو، جن ۾ تبديلين کي مون واپس ورايو آهي",
        "tog-minordefault": "سمورين تبديلين کي بنان چئي معمولي ترميم تصور ڪريو",
-       "tog-previewontop": "ترميمي دٻيءَ مٿان پيش نگاهہ ڏيکاريو",
-       "tog-previewonfirst": "پهرين ترميم تي پيش نگاهہ ڏيکاريو",
+       "tog-previewontop": "ترميمي دٻيءَ مٿان پيش نگاھ ڏيکاريو",
+       "tog-previewonfirst": "پهرين ترميم تي پيش نگاھ ڏيکاريو",
        "tog-enotifwatchlistpages": "منهنجي نظر ۾ فھرست اندر شامل ڪنهن صفحي يا فائيل ۾ تبديل پيش اچي مون کي برقٽپال اماڻيو",
        "tog-enotifusertalkpages": "منهنجي مباحثي صفحي ۾ تبديليءَ جي صورت ۾ مون کي برقٽپال اماڻيو",
        "tog-enotifminoredits": "صفحن ۾ معمولي ترميمن جي صورت ۾ بہ مون کي برقٽپال ڪريو",
@@ -40,7 +40,7 @@
        "tog-watchlisthidebots": "نظر ۾ فھرست تان بوٽ جون ترميمون لڪايو",
        "tog-watchlisthideminor": "نظر ۾ فھرست تان معمولي ترميمون لڪايو",
        "tog-watchlisthideliu": "داخل ٿيل يوزرس جون ڪيل ترميمون نظر ۾ فھرست ۾ نہ ڏيکاريو",
-       "tog-watchlisthideanons": "Ù\86ظر Û¾ Ù\81ھرست ØªØ§Ù\86 Ø§Ú»Ú\84اتÙ\84 Ù\8aÙ\88زر جون ترميمون لڪايو",
+       "tog-watchlisthideanons": "Ù\86ظر Û¾ Ù\81ھرست ØªØ§Ù\86 Ø§Ú»Ú\84اتÙ\84 Ù\88اپرائÙ\8aÙ\86دÚ\99 جون ترميمون لڪايو",
        "tog-watchlisthidepatrolled": "نظر ۾ فھرست مان گشت ڪيل ترميمون لڪايو",
        "tog-watchlisthidecategorization": "صفحن جا زمرا لڪايو",
        "tog-ccmeonemails": "ٻين يوزرس ڏانھن منهنجي موڪليل برقٽپال جو پرت مون کي اماڻيو",
@@ -49,7 +49,7 @@
        "tog-norollbackdiff": "واپس ورائڻ کان پوءِ تفاوت نہ ڏيکاريو",
        "tog-useeditwarning": "مونکي خبردار ڪريو جڏهن مان هڪ ترميم وارو صفحو بغير تبديلين سانڍڻ جي ڇڏيان",
        "tog-prefershttps": "هميشہ محفوظ ڪنيڪشن استعمال ڪريو جڏهن داخل ٿيل هجو",
-       "underline-always": "هميشہ",
+       "underline-always": "سدائين",
        "underline-never": "ڪڏهن بہ نہ",
        "underline-default": "پيش طَي چَم يا جھانگُو",
        "editfont-style": "ايراضي جو فونٽ اسٽائيل سنواريو:",
        "category_header": "\"$1\" زمري جا صفحا",
        "subcategories": "ذيلي زمرا",
        "category-media-header": " \"$1\" زمري اندر ذريعات",
-       "category-empty": "''في‌الوقت هن زمري ۾ ڪي بہ صفحا يا ذريعات شامل ناهن.''",
+       "category-empty": "<em>في‌الوقت هن زمري ۾ ڪي بہ صفحا يا ذريعات شامل ناهن.</em>",
        "hidden-categories": "{{PLURAL:$1|لڪيل زمرو|لڪيل زمرا}}",
        "hidden-category-category": "لڪل زمرا",
        "category-subcat-count": "{{PLURAL:$2|ھن زمري ۾ رڳو ھيٺيون ذيلي زمرو آهي.|هن زمري ۾ ڪل $2 مان ھيٺيان {{PLURAL:$1|subcategory|$1 ذيلي زمرا}} آھن.}}",
        "article": "موادي صفحو",
        "newwindow": "(نئين دريءَ ۾ کلندو)",
        "cancel": "رد",
-       "moredotdotdot": "اڃا...",
+       "moredotdotdot": "وڌيڪ...",
        "morenotlisted": "ھي فھرست نامڪمل بہ ٿي سگھي ٿي.",
-       "mypage": "منهنجو صفحو",
+       "mypage": "صفحو",
        "mytalk": "بحث",
        "anontalk": "بحث",
        "navigation": "رھنمائي",
        "help": "مدد",
        "search": "ڳولا",
        "searchbutton": "ڳوليو",
-       "go": "کوليو",
+       "go": "هلو",
        "searcharticle": "وڃو",
        "history": "صفحي جي سوانح",
        "history_short": "سوانح",
        "undelete_short": "اڻڊاهيو {{PLURAL:$1|هڪ ترميم|$1 ترميمون}}",
        "viewdeleted_short": "ڏسو {{PLURAL:$1|هڪ ڊاٺل ترميم|$1 ڊاٺل ترميمون}}",
        "protect": "تحفظيو",
-       "protect_change": "تبديل ڪريو",
+       "protect_change": "مٽايو",
        "unprotect": "تحفظ بدلايو",
        "newpage": "نئون صفحو",
        "talkpagelinktext": "بحث",
        "talk": "بحث",
        "views": "ڏيٺون",
        "toolbox": "اوزارَ",
-       "tool-link-userrights": "{{GENDER:$1|Ù\8aÙ\88زر}} Ú¯Ø±Ù\88Ú¾ ØªØ¨Ø¯Ù\8aÙ\84 ÚªØ±يو",
-       "tool-link-userrights-readonly": "{{GENDER:$1|Ù\8aÙ\88زر}} گروھ ڏسو",
-       "tool-link-emailuser": "Ú¾Ù\86 {{GENDER:$1|Ù\8aÙ\88زر}} ڏانھن برقٽپال موڪليو",
-       "imagepage": "ذريعاتي صفحو ڏسو",
+       "tool-link-userrights": "{{GENDER:$1|Ù\88اپرائÙ\8aÙ\86دÚ\99}} Ú¯Ø±Ù\88Ú¾ Ù\85Ù\8eٽايو",
+       "tool-link-userrights-readonly": "{{GENDER:$1|Ù\88اپرائÙ\8aÙ\86دÚ\99}}Ù\86 Ø¬Ø§ گروھ ڏسو",
+       "tool-link-emailuser": "Ú¾Ù\86 {{GENDER:$1|Ù\88اپرائÙ\8aÙ\86دÚ\99}} ڏانھن برقٽپال موڪليو",
+       "imagepage": "فائيل صفحو ڏسو",
        "mediawikipage": "نياپي جو صفحو ڏسو",
        "templatepage": "سانچي جو صفحو ڏسو",
-       "viewhelppage": "امدادي صفحو ڏسو",
+       "viewhelppage": "مددي صفحو ڏسو",
        "categorypage": "زمراتي صفحو ڏسو",
        "viewtalkpage": "بحث ڏسو",
        "otherlanguages": "ٻين ٻولين ۾",
        "jumpto": "ڏانھن ٽپ ڏيو:",
        "jumptonavigation": "رھنمائي",
        "jumptosearch": "ڳولا",
-       "view-pool-error": "Ù\85عذرت Ø³Ø§Ù\86 Ø³Ø±Ù\88ر Ù\87اڻÙ\8a ØªÙ\85اÙ\85 Ú¯Ú¾Ú»Ù\88 Ø³Ù\8fÚª Ø¢Ù\87Ù\8a.\nتÙ\85اÙ\85 Ú¯Ú¾Ú»Ø§ Ù\8aÙ\88زر ھن صفحي کي ڏسڻ جي ڪوشش ڪري رھيا آھن.\nمهرباني ڪري ٿورو ترسو انکان اڳ جو توھان ھن صفحي تائين رسڻ لاءِ ٻيھر ڪوشش ڪريو.\n\n$1",
-       "generic-pool-error": "Ù\85عذرت Ø³Ø§Ù\86 Ø³Ø±Ù\88ر Ù\87اڻÙ\8a ØªÙ\85اÙ\85 Ú¯Ú¾Ú»Ù\88 Ø³Ù\8fÚª Ø¢Ù\87Ù\8a.\nتÙ\85اÙ\85 Ú¯Ú¾Ú»Ø§ Ù\8aÙ\88زر هتي موجود آهن.\nمهرباني ڪري ٿورو ترسي پوءِ ڪوشش ڪريو.",
+       "view-pool-error": "Ù\85عذرت Ø³Ø§Ù\86 Ø³Ø±Ù\88ر Ù\87اڻÙ\8a ØªÙ\85اÙ\85 Ú¯Ú¾Ú»Ù\88 Ø³Ù\8fÚª Ø¢Ù\87Ù\8a.\nتÙ\85اÙ\85 Ú¯Ú¾Ú»Ø§ Ù\88اپرائÙ\8aÙ\86دÚ\99 ھن صفحي کي ڏسڻ جي ڪوشش ڪري رھيا آھن.\nمهرباني ڪري ٿورو ترسو انکان اڳ جو توھان ھن صفحي تائين رسڻ لاءِ ٻيھر ڪوشش ڪريو.\n\n$1",
+       "generic-pool-error": "Ù\85عذرت Ø³Ø§Ù\86 Ø³Ø±Ù\88ر Ù\87اڻÙ\8a ØªÙ\85اÙ\85 Ú¯Ú¾Ú»Ù\88 Ø³Ù\8fÚª Ø¢Ù\87Ù\8a.\nتÙ\85اÙ\85 Ú¯Ú¾Ú»Ø§ Ù\88اپرائÙ\8aÙ\86دÚ\99Ù\8e هتي موجود آهن.\nمهرباني ڪري ٿورو ترسي پوءِ ڪوشش ڪريو.",
        "pool-errorunknown": "اڻڄاتل چُڪَ",
        "poolcounter-usage-error": "استعمال جي خرابي: $1",
        "aboutsite": "{{SITENAME}} بابت",
        "aboutpage": "Project:بابت",
-       "copyright": "ڪجھہ ٻيو ڄاڻايل نہ هجڻ جي صورت ۾ سمورو مواد $1 تحت ميسر ڪجي ٿو.",
+       "copyright": "ڪجھ ٻيو ڄاڻايل نہ هجڻ جي صورت ۾ سمورو مواد $1 تحت ميسر ڪجي ٿو.",
        "copyrightpage": "{{ns:project}}:تاليف جا حق",
        "currentevents": "ھاڻوڪا واقعا",
        "currentevents-url": "Project:ھاڻوڪا واقعا",
        "portal-url": "Project:نياتي باب",
        "privacy": "ذاتيات پاليسي",
        "privacypage": "Project:ذاتيات پاليسي",
-       "badaccess": "اجازتÙ\86اÙ\85Û\81 چُڪَ",
+       "badaccess": "اجازتÙ\8a چُڪَ",
        "versionrequired": "ذريعات‌وڪي جو ورزن $1 درڪار",
        "versionrequiredtext": "هيءُ صفحو استعمال ڪرڻ لاءِ ذريعات‌وڪي جو ورزن $1 درڪار آهي. وڌيڪ ڄاڻڻ لاءِ [[Special:Version|ورزن بابت صفحو]] ڏسو.",
        "ok": "ٺيڪ",
        "retrievedfrom": "\"$1\" تان ورتل",
-       "youhavenewmessages": "توهان لاءِ $1 ($2) آهن.",
+       "youhavenewmessages": "{{PLURAL:$3|توھان وٽ}} $1 ($2) آھن.",
        "youhavenewmessagesmanyusers": "توهان لاءِ ڪيترن ئي يُوزرس ($2) طرفان $1 آيل آهن.",
        "newmessageslinkplural": "{{PLURAL:$1|ھڪ نئون پيغام|999=نوان پيغام}}",
        "newmessagesdifflinkplural": "آخري {{PLURAL:$1|تبديلي|999=تبديليون}}",
        "confirmable-confirm": "ڇا{{GENDER:$1|توهانکي}} پڪ آهي؟",
        "confirmable-yes": "ها",
        "confirmable-no": "نہ",
-       "thisisdeleted": "$1 کي ڏسڻ يا بحالڻ چاهيندا؟",
-       "viewdeleted": "$1 Ú\8fسÙ\86دا؟",
-       "restorelink": "{{PLURAL:$1|Ù\87ÚªÚ\99Ù\8a Ú\8aاٺÙ\84 ØªØ±Ù\85Ù\8aÙ\85|$1 Ú\8aاٺل ترميمون}}",
+       "thisisdeleted": "$1 کي ڏسندئو يا بحاليندئو؟",
+       "viewdeleted": "$1 Ú\8fسÙ\86دئÙ\88؟",
+       "restorelink": "{{PLURAL:$1|Ù\87ÚªÚ\99Ù\8a Ú\8aاٿÙ\84 ØªØ±Ù\85Ù\8aÙ\85|$1 Ú\8aاٿل ترميمون}}",
        "feedlinks": "روان رسد:",
-       "site-rss-feed": "$1 آر ايس ايس روان رسد",
+       "site-rss-feed": "$1 آرايسايس روان رسد",
        "site-atom-feed": "$1 اڻو روان رسد",
        "page-rss-feed": "\"$1\" RSS برق مواد",
        "page-atom-feed": "\"$1\" اڻو روان رسد",
        "sort-descending": "لهندڙ ترتيب ڏيو",
        "sort-ascending": "چڙهندڙ ترتيب ڏيو",
        "nstab-main": "صفحو",
-       "nstab-user": "Ù\8aÙ\8fÙ\88زر صفحو",
+       "nstab-user": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ø¬Ù\88 صفحو",
        "nstab-media": "ذريعاتي صفحو",
        "nstab-special": "خاص صفحو",
        "nstab-project": "رٿائي صفحو",
        "nstab-image": "فائيل",
        "nstab-mediawiki": "نياپو",
        "nstab-template": "سانچو",
-       "nstab-help": "امدادي صفحو",
+       "nstab-help": "مددي صفحو",
        "nstab-category": "زمرو",
        "mainpage-nstab": "مک صفحو",
        "nosuchaction": "اهڙو ڪو بہ عمل نہ آهي",
        "badarticleerror": "هن صفحي تي اهڙو عمل ڪار نہ آهي.",
        "cannotdelete": "$1 نالي صفحو يا فائيل ڊهي نہ سگھيو. ٿي سگھي ٿو تہ ڪنهن ان کي اڳ ۾ ئي ڊاهي ڇڏيو هجي.",
        "cannotdelete-title": "$1 نالي صفحي کي ڊاهي نہ ٿا سگھون.",
-       "badtitle": "غÙ\8aردرست عنوان",
+       "badtitle": "خراب عنوان",
        "badtitletext": "صفحي جو گھربل عنوان ڪار ڪونهي، يا خالي آهي، يا وري غيردرست طريقي سان ڳنڍيل بين‌الزباني يا بين‌الوڪي عنوان آهي. \nان ۾ هڪ يا هڪ کان وڌيڪ اهڙا اکر موجود آهن، جيڪي عنوان ۾ استعمال ڪري نہ ٿا سگھجن.",
        "title-invalid-utf8": "صفحي جي ڄاڻايل عنوان ۾ ناقابل ڪار يُو ٽِي ايف اکر شامل آهن.",
        "title-invalid-interwiki": "ڄاڻايل عنوان ۾ اهڙو بين‌الوڪِي ڳنڍڻو شامل آهي، جيڪو عنوانن ۾ استعمال ڪري نہ ٿو سگھجي.",
        "cannotlogoutnow-title": "ھاڻي خارج نٿو ٿي سگھجي",
        "cannotlogoutnow-text": "$1 استعمال ڪرڻ دوران خارج ٿيڻ ممڪن نہ آھي.",
        "welcomeuser": "ڀلي ڪري آيا، $1!",
-       "yourname": "Ù\8aÙ\8fÙ\88زرنانءُ:",
-       "userlogin-yourname": "Ù\8aÙ\88زرنانءُ",
+       "yourname": "Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ:",
+       "userlogin-yourname": "Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ",
        "userlogin-yourname-ph": "پنھنجو يوزرنانءُ ڄاڻايو",
-       "createacct-another-username-ph": "Ù\8aÙ\8fÙ\88زرنانءُ ڄاڻايو",
+       "createacct-another-username-ph": "Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ ڄاڻايو",
        "yourpassword": "ڳجھولفظ:",
        "userlogin-yourpassword": "ڳجھولفظ",
        "userlogin-yourpassword-ph": "پنهنجو ڳجھولفظ ڄاڻايو",
        "createacct-yourpassword-ph": "ڪو ڳجھولفظ ڄاڻايو",
-       "yourpasswordagain": "يُوزرنان ٻيهر ٽائيپ ڪريو:",
+       "yourpasswordagain": "ڳجھولفظ ٻيھر لکو:",
        "createacct-yourpasswordagain": "ڳجھي لفظ جي پڪ ڪريو",
        "createacct-yourpasswordagain-ph": "ٻيھر ڳجھولفظ داخل ڪريو",
        "userlogin-remembermypassword": "مون کي داخل ٿيل رکو",
        "logout": "خارج ٿيو",
        "userlogout": "خارج ٿيو",
        "notloggedin": "داخل ٿيل نہ آهيو",
-       "userlogin-noaccount": "کاتو نہ ٿا رکو؟",
+       "userlogin-noaccount": "کاتو نٿا رکو؟",
        "userlogin-joinproject": "{{SITENAME}} ۾ شامل ٿيو",
        "createaccount": "کاتو کوليو",
        "userlogin-resetpassword-link": "ڳجھولفظ وساري ويٺا آهيو؟",
        "createacct-emailrequired": "برقٽپال پتو",
        "createacct-emailoptional": "برقٽپال پتو (مرضيءَ موجب)",
        "createacct-email-ph": "پنھنجو برقٽپال پتو ڄاڻايو",
-       "createacct-another-email-ph": "برق ٽپال پتو ڄاڻايو",
+       "createacct-another-email-ph": "برقٽپال پتو ڄاڻايو",
        "createaccountmail": "ڪو بہ عارضي ڳجھولفظ استعمال ڪريو ۽ ڄاڻايل برقٽپال پتي تي اماڻيو",
        "createacct-realname": "اصل نالو (مرضيءَ موجب)",
        "createacct-reason": "سبب",
        "createacct-benefit-body2": "{{PLURAL:$1|صفحو|صفحا}}",
        "createacct-benefit-body3": "ھاڻوڪا {{PLURAL:$1|ڀاڱيدار}}",
        "badretype": "توهان جو ڄاڻايل ڳجھولفظ درست نہ آهي.",
-       "usernameinprogress": "اÙ\86 Ù\8aÙ\8fÙ\88زرÙ\86اÙ\86Ø¡Ù\8f Ù\84اءÙ\90 Ú©Ø§ØªÙ\88 Ø§Ú³ Û¾ Ø¦Ù\8a ØªÙ\8aارÙ\8aØ¡Ù\8e Ù\87Ù\8aÙº Ø¢Ù\87Ù\8aمهرباني ڪري انتظار فرمايو.",
-       "userexists": "Ú\84اڻاÙ\8aÙ\84 Ù\8aÙ\88زرÙ\86اÙ\86Ø¡Ù\8f Ø§Ú³ Û¾ Ø¦Ù\8a Ø§Ø³ØªØ¹Ù\85اÙ\84 Ù\87Ù\8aÙº Ø¢Ù\87Ù\8a. Ù\85Ù\87رباÙ\86Ù\8a ÚªØ±Ù\8a ÚªÙ\88 Ù»Ù\8aÙ\88 Ù\8aÙ\8fÙ\88زرنانءُ چونڊيو.",
+       "usernameinprogress": "اÙ\86 Ù\88اپرائÙ\8aÙ\86دÚ\99\86اÙ\86Ø¡Ù\8e Ù\84اءÙ\90 Ú©Ø§ØªÙ\88 Ø§Ú³ Û¾ Ø¦Ù\8a ØªÙ\8aارÙ\8aØ¡Ù\8e Ù\87Ù\8aÙº Ø¢Ù\87Ù\8a.\nمهرباني ڪري انتظار فرمايو.",
+       "userexists": "Ú\84اڻاÙ\8aÙ\84 Ù\88اپرائÙ\8aÙ\86دÚ\99\86اÙ\86Ø¡Ù\8f Ø§Ú³ Û¾ Ø¦Ù\8a Ø§Ø³ØªØ¹Ù\85اÙ\84 Ù\87Ù\8aÙº Ø¢Ù\87Ù\8a.\nÙ\85Ù\87رباÙ\86Ù\8a ÚªØ±Ù\8a ÚªÙ\88 Ù»Ù\8aÙ\88 Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ چونڊيو.",
        "loginerror": "داخل ٿيڻ ۾ چُڪَ",
        "createacct-error": "کاتو کولڻ ۾ چُڪَ",
        "createaccounterror": "کاتو کُلي نہ سگھيو: $1",
-       "nocookiesnew": "Ù\8aÙ\8fÙ\88زر Ú©Ø§ØªÙ\88 Ú©Ù\84Ù\8a Ú\86ÚªÙ\88Ø\8c Ù¾Ø± ØªÙ\88Ù\87اÙ\86 Ø¯Ø§Ø®Ù\84 Ù\86Û\81 Ù¿Ù\8aا Ø¢Ù\87Ù\8aÙ\88. Ù\8aÙ\8fÙ\88زرس کي داخل ڪرڻ لاءِ {{SITENAME}} ڪوڪيز استعمال ڪندي آهي. توهان ڪوڪيز کي ناڪاره بڻائي رکيو آهي. داخل ٿيڻ لاءِ ڪوڪيز کي ڪارائتو بڻايو.",
+       "nocookiesnew": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ú©Ø§ØªÙ\88 Ú©Ù\84Ù\8a Ú\86ÚªÙ\88Ø\8c Ù¾Ø± ØªÙ\88Ù\87اÙ\86 Ø¯Ø§Ø®Ù\84 Ù\86Û\81 Ù¿Ù\8aا Ø¢Ù\87Ù\8aÙ\88. Ù\88اپرائÙ\8aÙ\86دÚ\99 کي داخل ڪرڻ لاءِ {{SITENAME}} ڪوڪيز استعمال ڪندي آهي. توهان ڪوڪيز کي ناڪاره بڻائي رکيو آهي. داخل ٿيڻ لاءِ ڪوڪيز کي ڪارائتو بڻايو.",
        "nocookieslogin": "يُوزرس کي داخل ڪرڻ لاءِ {{SITENAME}} ڪوڪيز استعمال ڪندي آهي.\nتوھان ڪوڪيز کي ناڪاره بڻائي رکيو آھي.\nداخل ٿيڻ لاءِ ڪوڪيز کي ڪارائتو بڻايو.",
-       "noname": "تÙ\88Ù\87اÙ\86 Ø¬Ù\88 Ú\84اڻاÙ\8aÙ\84 Ù\8aÙ\8fÙ\88زرنانءُ ناقابل ڪار آهي.",
+       "noname": "تÙ\88Ù\87اÙ\86 Ø¬Ù\88 Ú\84اڻاÙ\8aÙ\84 Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ ناقابل ڪار آهي.",
        "loginsuccesstitle": "داخل ٿيل",
        "loginsuccess": "'''هاڻي توهان {{SITENAME}} تي بطور \"$1\" داخل ٿيل آهيو.'''",
-       "nosuchuser": "\"$1\" Ù\86اÙ\84Ù\8a Ø³Ø§Ù\86 ÚªÙ\88 Ø¨Û\81 Ù\8aÙ\88زر Ù\86Û\81 Ø¢Ù\87Ù\8a.\nÙ\86Ù\86Ú\8dÙ\86 Ù\88Ú\8fÙ\86 Ø§Ú©Ø±Ù\86 Û¾ Ø§Ù\85تÙ\8aاز ÚªØ±Ú» Ù\84ازÙ\85Ù\8a Ø¢Ù\87Ù\8a. \nÙ\87Ù\90جÙ\8a Ú\86ڪاسÙ\8aÙ\88Ø\8c Ù\8aا [[Special:CreateAccount|Ù\86ئÙ\88Ù\86 Ú©Ø§ØªÙ\88 ØªØ®Ù\84Ù\8aÙ\82 ÚªØ±Ù\8aÙ\88]]",
-       "nosuchusershort": "\"$1\" Ù\86اÙ\84Ù\8a ÚªÙ\88 Ø¨Û\81 Ù\8aÙ\8fÙ\88زر Ù\86اÙ\87Ù\8a.\nهِجي جي پڪ ڪندا.",
-       "nouserspecified": "تÙ\88Ù\87اÙ\86 Ú©Ù\8a ÚªÙ\88 Ù\8aÙ\88زرÙ\86اÙ\86ءُ ڄاڻائڻو پوندو.",
-       "login-userblocked": "Ù\87Ù\8aØ¡Ù\8f Ù\8aÙ\8fÙ\88زر بندشيل آهي. داخل ٿيڻ جي اجازت نٿي ڏجي.",
+       "nosuchuser": "\"$1\" Ù\86اÙ\84Ù\8a Ø³Ø§Ù\86 ÚªÙ\88 Ø¨Û\81 Ù\88اپرائÙ\8aÙ\86دÚ\99 Ù\86Û\81 Ø¢Ù\87Ù\8a.\nÙ\86Ù\86Ú\8dÙ\86 Ù\88Ú\8fÙ\86 Ø§Ú©Ø±Ù\86 Û¾ Ø§Ù\85تÙ\8aاز ÚªØ±Ú» Ù\84ازÙ\85Ù\8a Ø¢Ù\87Ù\8a. \nÙ\87Ù\90جÙ\8a Ú\86ڪاسÙ\8aÙ\88Ø\8c Ù\8aا [[Special:CreateAccount|Ù\86ئÙ\88Ù\86 Ú©Ø§ØªÙ\88 ØªØ®Ù\84Ù\8aÙ\82 ÚªØ±Ù\8aÙ\88]].",
+       "nosuchusershort": "\"$1\" Ù\86اÙ\84Ù\8a ÚªÙ\88 Ø¨Û\81 Ù\88اپرائÙ\8aÙ\86دÚ\99 Ù\86اÙ\87Ù\8a.\nÙ¾Ù\86Ú¾Ù\86جÙ\8a هِجي جي پڪ ڪندا.",
+       "nouserspecified": "تÙ\88Ù\87اÙ\86 Ú©Ù\8a ÚªÙ\88 Ù\88اپرائÙ\8aÙ\86دÚ\99\86اÙ\86â\80\8eءُ ڄاڻائڻو پوندو.",
+       "login-userblocked": "Ù\87Ù\8aØ¡Ù\8f Ù\88اپرائÙ\8aÙ\86دÚ\99 بندشيل آهي. داخل ٿيڻ جي اجازت نٿي ڏجي.",
        "wrongpassword": "ڏنل ڳجھولفظ غير درست آهي. مھرباني ڪري ٻيھر ڪوشش ڪندا.",
        "wrongpasswordempty": "ڏنل ڳجھولفظ خالي هو.\nمهرباني ڪري وري ڪوشش ڪندا.",
        "passwordtooshort": "ڳجھولفظ گھٽ ۾ گھٽ  {{PLURAL:$1|1 اکر|$1 اکرَن}} تي ٻڌل هوڻ گھرجي.",
        "password-name-match": "توهان جو ڳجھولفظ توهان جي يوزرنانءُ کان مختلف هجڻ گھرجي.",
        "mailmypassword": "ڳجھولفظ ٻيھر مقرر ڪريو",
        "passwordremindertitle": "{{SITENAME}} لاءِ نئون عارضي ڳجھولفظ",
-       "passwordremindertext": "ÚªÙ\86Ú¾Ù\86 (شاÙ\8aد ØªÙ\88ھاÙ\86 Ø¢Ø¡Ù\90Ù¾Ù\8a Ù¾ØªÙ\8a $1 ØªØ§Ù\86) Ø§Ø³Ø§Ù\86 Ú©Ù\8a {{SITENAME}} ($4) Ù\84اءÙ\90 Ù\86ئÙ\88Ù\86 Ú³Ø¬Ú¾Ù\88Ù\84Ù\81ظ Ø§Ù\85اڻڻ Ø¬Ù\8a Ú¯Ù\8fھرÙ\8e ÚªØ¦Ù\8a.\"$2\" Ù\8aÙ\88زر لاءِ ھڪ ڳجھولفظ تخليق ڪيو ويو آهي \"$3\" تي ترتيب ڏنو ويو ھو. جيڪڏھن اھو توھان جو ارادو ھيو، تہ ھاڻي توھان کي ھينئر ئي داخل ٿي پنھنجو ڳجھولفظ تبديل ڪرڻ گھرجي.\nتوھان جو عارضي ڳجھولفظ {{PLURAL:$5|هڪ ڏينھُن|$5 ڏينھَن}} ۾ ختم ٿيندو.\n\nجيڪڏھن اھا گُھرَ اوھان نہ ڪئي ھئي، يا ھاڻي اوھان کي پنھنجو ڳجھولفظ ياد اچي ويو آھي ۽ توھان ان کي تبديل ڪرڻ نٿا چاھيو، تہ توھان ھن نياپي کي نظر انداز ڪندي پنھنجو پراڻو ڳجھولفظ ئي استعمال ڪري سگھو ٿا.",
-       "noemail": "Ù\8aÙ\8fÙ\88زر \"$1\" Ø¬Ù\8a ڪو بہ برقٽپال پتو درج ٿيل ناهي.",
+       "passwordremindertext": "ÚªÙ\86Ú¾Ù\86 (شاÙ\8aد ØªÙ\88ھاÙ\86 Ø¢Ø¡Ù\90Ù¾Ù\8a Ù¾ØªÙ\8a $1 ØªØ§Ù\86) Ø§Ø³Ø§Ù\86 Ú©Ù\8a {{SITENAME}} ($4) Ù\84اءÙ\90 Ù\86ئÙ\88Ù\86 Ú³Ø¬Ú¾Ù\88Ù\84Ù\81ظ Ø§Ù\85اڻڻ Ø¬Ù\8a Ú¯Ù\8fھرÙ\8e ÚªØ¦Ù\8a.\"$2\" Ù\88اپرائÙ\8aÙ\86دÚ\99 لاءِ ھڪ ڳجھولفظ تخليق ڪيو ويو آهي \"$3\" تي ترتيب ڏنو ويو ھو. جيڪڏھن اھو توھان جو ارادو ھيو، تہ ھاڻي توھان کي ھينئر ئي داخل ٿي پنھنجو ڳجھولفظ تبديل ڪرڻ گھرجي.\nتوھان جو عارضي ڳجھولفظ {{PLURAL:$5|هڪ ڏينھُن|$5 ڏينھَن}} ۾ ختم ٿيندو.\n\nجيڪڏھن اھا گُھرَ اوھان نہ ڪئي ھئي، يا ھاڻي اوھان کي پنھنجو ڳجھولفظ ياد اچي ويو آھي ۽ توھان ان کي تبديل ڪرڻ نٿا چاھيو، تہ توھان ھن نياپي کي نظر انداز ڪندي پنھنجو پراڻو ڳجھولفظ ئي استعمال ڪري سگھو ٿا.",
+       "noemail": "Ù\88اپرائÙ\8aÙ\86دÚ\99 \"$1\" Ø¬Ù\88 ڪو بہ برقٽپال پتو درج ٿيل ناهي.",
        "noemailcreate": "توھان کي قابلڪار برقٽپال پتو مھيا ڪرڻو پوندو.",
-       "passwordsent": "Ù\8aÙ\88زر \"$1\" Ù\84اءÙ\90 Ú¾Úª Ù\86ئÙ\88Ù\86 Ú³Ø¬Ú¾Ù\88Ù\84Ù\81ظ Ø¨Ø±Ù\82ٽپاÙ\84 Ø°Ø±Ù\8aعÙ\8a Ø§Ù\85اڻÙ\8aÙ\88 Ù\88Ù\8aÙ\88 Ø¢Ù\87Ù\8a.  مھرباني ڪري اھو حاصل ڪرڻ بعد داخل ٿيندا.",
+       "passwordsent": "Ù\88اپرائÙ\8aÙ\86دÚ\99 \"$1\" Ù\84اءÙ\90 Ú¾Úª Ù\86ئÙ\88Ù\86 Ú³Ø¬Ú¾Ù\88Ù\84Ù\81ظ Ø¨Ø±Ù\82ٽپاÙ\84 Ø°Ø±Ù\8aعÙ\8a Ø§Ù\85اڻÙ\8aÙ\88 Ù\88Ù\8aÙ\88 Ø¢Ù\87Ù\8a.\nمھرباني ڪري اھو حاصل ڪرڻ بعد داخل ٿيندا.",
        "mailerror": "ٽپال اماڻڻ ۾ چُڪَ: $1",
        "acct_creation_throttle_hit": "توهان جي آءِپي پتي تان هن وڪيءَ تي پوئين $2، کان {{PLURAL:$1|1 کاتو|$1 کاتا}} کلي چڪا آهن، جيڪو وڌ ۾ وڌ اجازت ڏنل وقت آهي. \nنتيجتاً ساڳي آءِپي پتي تان في‌الوقت وڌيڪ کاتا کولي نٿا سگھجن.",
        "emailauthenticated": "توھان جي برقٽپال پتي جي تصديق $2 تي $3 بجي ڪئي وئي.",
        "cannotchangeemail": "هن وڪيءَ تي کاتيدار جو برقٽپال پتو بدلائي نہ ٿو سگھجي.",
        "emaildisabled": "هيءَ سرزمين برقٽپال اماڻي نہ ٿي سگھي.",
        "accountcreated": "کاتو کلي چڪو",
-       "accountcreatedtext": "Ù\8aÙ\88زر Ú©Ø§ØªÙ\88 [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|talk]]) جي لاءِ تخليق ٿي چڪو آهي.",
+       "accountcreatedtext": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ú©Ø§ØªÙ\88 Ø¨Ø±Ø§Ø¡Ù\90 [[{{ns:User}}:$1|$1]] ([[{{ns:User talk}}:$1|بحث]]) جي لاءِ تخليق ٿي چڪو آهي.",
        "createaccount-title": "{{SITENAME}} تي کاتو کولڻ",
        "login-throttled": "توهان تازو ئي داخل ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
        "login-abort-generic": "توهان جو داخل ٿيڻ ناڪام ويو - بند ڪيل",
-       "login-migrated-generic": "تÙ\88Ù\87اÙ\86 Ø¬Ù\88 Ú©Ø§ØªÙ\88 Ù\84Ú\8fÙ\8a Ú\86ÚªÙ\88 Ø¢Ù\87Ù\8aØ\8c Û½ Ù\87Ù\86 Ù\88ÚªÙ\8aØ¡Ù\8e ØªÙ\8a ØªÙ\88Ù\87اÙ\86 Ø¬Ù\88 Ù\8aÙ\8fÙ\88زÙ\86اÙ\86Ø¡Ù\8f Ù\87اڻÙ\8a Ù\88جÙ\88د Ù\86Û\81 ٿو رکي.",
+       "login-migrated-generic": "تÙ\88Ù\87اÙ\86 Ø¬Ù\88 Ú©Ø§ØªÙ\88 Ù\84Ú\8fÙ\8a Ú\86ÚªÙ\88 Ø¢Ù\87Ù\8aØ\8c Û½ Ù\87Ù\86 Ù\88ÚªÙ\8aØ¡Ù\8e ØªÙ\8a ØªÙ\88Ù\87اÙ\86 Ø¬Ù\88 Ù\88اپرائÙ\8aÙ\86دÚ\99\86اÙ\86â\80\8eØ¡Ù\8f Ù\87اڻÙ\8a Ù\88جÙ\88د Ù\86ٿو رکي.",
        "loginlanguagelabel": "ٻولي: $1",
        "createacct-another-realname-tip": "اصل نالو ڄاڻائڻ اختياري آهي. جيڪڏهن توهان اصل نالو ڄاڻايو ٿا، تہ اهو توهان کي توهان جي ڪم جي مڃتا ڏيڻ لاءِ ڪم آندو ويندو.",
        "pt-login": "داخل ٿيو",
        "changepassword-throttled": "توهان تازو ئي داخل ٿيڻ جون هيڪانديون گھڻيون ڪوششون ڪيون آهن. مهرباني ڪري $1 لاءِ ترسي پوءِ وري ڪوشش ڪريو.",
        "botpasswords": "بوٽ جو ڳجھولفظ",
        "botpasswords-disabled": "بوٽ ڳجھالفظ ناقابلِڪار ڪيل آھن.",
+       "botpasswords-label-appid": "باٽ جو نالو:",
        "botpasswords-label-create": "سرجيو",
        "botpasswords-label-update": "تجديد",
        "botpasswords-label-cancel": "رد",
        "passwordreset-text-one": "برقٽپال ذريعي عارضي ڳجھولفظ حاصل ڪرڻ لاءِ هيءُ فارم پُر ڪريو.",
        "passwordreset-disabled": "هن وڪيءَ تي ڳجھولفظ ٻيھر مقرر ڪرڻ وارو چارو غير فعال بڻايو ويو آهي.",
        "passwordreset-emaildisabled": "هن وڪيءَ تي برق‌ٽپال واريون خصوصيتون غير فعال بڻايون ويون آهن.",
-       "passwordreset-username": "Ù\8aÙ\8fÙ\88زرنانءُ:",
+       "passwordreset-username": "Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ:",
        "passwordreset-domain": "ميدان:",
        "passwordreset-email": "برقٽپال پتو:",
        "passwordreset-emailtitle": "{{SITENAME}} واري کاتي جا تفصيل",
        "missingcommenttext": "براءِ مھرباني هيٺ پنهنجو تاثر درج ڪندا.",
        "summary-preview": "تت جي پيش نگاھ:",
        "subject-preview": "موضوع جي پيش نگاھ:",
-       "blockedtitle": "Ù\8aÙ\8fÙ\88زر Ø¨Ù\86دشÙ\8aÙ\84 Ø¢Ù\87Ù\8a.",
-       "blockedtext": "'''تÙ\88ھاÙ\86 Ø¬Ù\8a Ù\8aÙ\88زرÙ\86اÙ\86Ø¡Ù\8f Ù\8aا Ø¢Ø¡Ù\90 Ù¾Ù\8a Ú©Ù\8a Ø¨Ù\86دشÙ\8aÙ\88 Ù\88Ù\8aÙ\88 Ø¢Ú¾Ù\8a.'''\n\nبÙ\86دش $1 Ú¾Ù\86Ù\8a. Ø¬Ú\8fÚ¾Ù\86 ØªÛ\81 Ú\84اڻاÙ\8aÙ\84 Ø³Ø¨Ø¨ ''$2'' Ø¢Ù\87Ù\8a.\n\n\n* Ø¨Ù\86دش Ø¬Ù\88 Ø¢ØºØ§Ø²: $8\n* Ø¨Ù\86دش Ø¬Ù\88 Ø§Ù\86جاÙ\85: $6\n* Ø¨Ù\86دش Ø¬Ù\88 Ù\87دÙ\81: $7\n\nاھÚ\99Ù\8a Ø±Ù\88Úª ØªÙ\8a Ø¨Ø­Ø« ÚªØ±Ú» Ù\84اءÙ\90 ØªÙ\88ھاÙ\86 $1 Ù\8aا ÚªÙ\86Ú¾Ù\86 Ù»Ù\8a [[{{MediaWiki:Grouppage-sysop}}|Ù\85Ù\86تظÙ\85]] Ø³Ø§Ù\86 Ø±Ø§Ø¨Ø·Ù\88 ÚªØ±Ù\8a Ø³Ú¯Ú¾Ù\88 Ù¿Ø§. Ø¬Ù\8aÚªÚ\8fÙ\87Ù\86 ØªÙ\88ھاÙ\86 Ø¬Ù\88 Ø¯Ø±Ø³Øª [[Special:ترجÙ\8aØ­Ù\88Ù\86|کاتÙ\88 ØªØ±Ø¬Ù\8aØ­Ù\88Ù\86]] Û¾ Ø¯Ø±Ø³Øª Ø¨Ø±Ù\82ٽپاÙ\84 Ù¾ØªÙ\88 Ø¯Ø±Ø¬ Ù¿Ù\8aÙ\84 Ù\86Û\81 Ø¢Ù\87Ù\8a ØªÛ\81 ØªÙ\88Ù\87اÙ\86 'Ù\87Ù\86 Ù\8aÙ\88زر Ú©Ù\8a Ø¨Ø±Ù\82ٽپاÙ\84 ÚªØ±Ù\8aÙ\88' Ù\88ارÙ\88 Ù\81Ù\8aÚ\86ر Ù\86Û\81 Ù¿Ø§ \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استعÙ\85اÙ\84 ÚªØ±Ù\8a Ø³Ú¯Ú¾Ù\88. ØªÙ\88ھاÙ\86 Ø¬Ù\88 Ú¾Ø§Ú»Ù\88ÚªÙ\88 Ø¢Ø¡Ù\90Ù¾Ù\8a Ù¾ØªÙ\88 $3 Ø¢Ú¾Ù\8aØ\8c Û½ Ø¨Ù\86دش Ø³Ú\83اڻپ $5 Ø¢Ù\87Ù\8a. Ù\85ھرباÙ\86Ù\8a ÚªØ±Ù\8a ÚªÙ\86Ú¾Ù\86 Ø¨Û\81 Ù¾Ú\87ا Ú³Ø§Ú\87ا Ù\8aا Ù\84Ú¾Ù\88Ú\86Ú\99 لاءِ انھن مان ڪنھن ھڪ يا ٻنھي جو حوالو ڏيندا.",
+       "blockedtitle": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ø¨Ù\86دشÙ\8aÙ\84 Ø¢Ù\87Ù\8a",
+       "blockedtext": "'''تÙ\88ھاÙ\86 Ø¬Ù\8a Ù\88اپرائÙ\8aÙ\86دÚ\99\86اÙ\86Ø¡Ù\8f Ù\8aا Ø¢Ø¡Ù\90 Ù¾Ù\8a Ú©Ù\8a Ø¨Ù\86دشÙ\8aÙ\88 Ù\88Ù\8aÙ\88 Ø¢Ú¾Ù\8a.'''\n\nبÙ\86دش $1 Ú¾Ù\86ئÙ\8a. Ø¬Ú\8fÚ¾Ù\86 ØªÛ\81 Ú\84اڻاÙ\8aÙ\84 Ø³Ø¨Ø¨ ''$2'' Ø¢Ù\87Ù\8a.\n\n\n* Ø¨Ù\86دش Ø¬Ù\88 Ø¢ØºØ§Ø²: $8\n* Ø¨Ù\86دش Ø¬Ù\88 Ø§Ù\86جاÙ\85: $6\n* Ø¨Ù\86دش Ø¬Ù\88 Ù\87دÙ\81: $7\n\nاھÚ\99Ù\8a Ø±Ù\88Úª ØªÙ\8a Ø¨Ø­Ø« ÚªØ±Ú» Ù\84اءÙ\90 ØªÙ\88ھاÙ\86 $1 Ù\8aا ÚªÙ\86Ú¾Ù\86 Ù»Ù\8a [[{{MediaWiki:Grouppage-sysop}}|Ù\85Ù\86تظÙ\85]] Ø³Ø§Ù\86 Ø±Ø§Ø¨Ø·Ù\88 ÚªØ±Ù\8a Ø³Ú¯Ú¾Ù\88 Ù¿Ø§. Ø¬Ù\8aÚªÚ\8fÙ\87Ù\86 ØªÙ\88ھاÙ\86 Ø¬Ù\88 Ø¯Ø±Ø³Øª [[Special:Preferences|کاتÙ\8a Ø¬Ù\8a ØªØ±Ø¬Ù\8aØ­Ù\86]] Û¾ Ø¯Ø±Ø³Øª Ø¨Ø±Ù\82ٽپاÙ\84 Ù¾ØªÙ\88 Ø¯Ø±Ø¬ Ù¿Ù\8aÙ\84 Ù\86Û\81 Ø¢Ù\87Ù\8a ØªÛ\81 ØªÙ\88Ù\87اÙ\86 'Ù\87Ù\86 Ù\88اپرائÙ\8aÙ\86دÚ\99 Ú©Ù\8a Ø¨Ø±Ù\82ٽپاÙ\84 ÚªØ±Ù\8aÙ\88' Ù\88ارÙ\88 Ù\81Ù\8aÚ\86ر Ù\86Û\81 Ù¿Ø§ \nاستعÙ\85اÙ\84 ÚªØ±Ù\8a Ø³Ú¯Ú¾Ù\88. ØªÙ\88ھاÙ\86 Ø¬Ù\88 Ú¾Ø§Ú»Ù\88ÚªÙ\88 Ø¢Ø¡Ù\90Ù¾Ù\8a Ù¾ØªÙ\88 $3 Ø¢Ú¾Ù\8aØ\8c Û½ Ø¨Ù\86دش Ø³Ú\83اڻپ $5 Ø¢Ù\87Ù\8a. Ù\85ھرباÙ\86Ù\8a ÚªØ±Ù\8a ÚªÙ\86Ú¾Ù\86 Ø¨Û\81 Ù¾Ú\87ا Ú³Ø§Ú\87ا Ù\8aا Ù\84Ú¾ Ù\88 Ú\86Ú\99Ú¾ لاءِ انھن مان ڪنھن ھڪ يا ٻنھي جو حوالو ڏيندا.",
        "blockednoreason": "سبب اڻڄاڻايل",
        "whitelistedittext": "صفحا سنوارڻ لاءِ مھرباني ڪري $1.",
-       "confirmedittext": "صفحا سنوارڻ کان اڳ توھان کي پنھنجي برقٽپال پتي جي تصديق ڪرڻي پوندي. مھرباني ڪري [[Special:Preferences|يوزر ترجيحن]] ذريعي پنھنجو برقٽپال پتو ڄاڻايو ۽ تصديقيو.",
+       "confirmedittext": "صفحا سنوارڻ کان اڳ توھان کي پنھنجي برقٽپال پتي جي تصديق ڪرڻي پوندي.\nمھرباني ڪري [[Special:Preferences|واپرائيندڙ جي ترجيحن]] ذريعي پنھنجو برقٽپال پتو ڄاڻايو ۽ تصديقيو.",
        "nosuchsectiontitle": "سيڪشن نٿو لھي سگھي",
        "loginreqtitle": "داخل ٿيڻ گھربل آهي",
        "loginreqlink": "داخل ٿيو",
        "newarticletext": "توھان اھڙي صفحي جو ڳنڍڻو وٺي ھتي پھتا آھيو، جيڪو اڃا وجود نٿو رکي.\nاھڙو صفحو جوڙڻ لاءِ، ھيٺين دٻي ۾ لکڻ شروع ڪريو (وڌيڪ ڄاڻڻ لاءِ [$1 امدادي صفحو] ڏسندا).\nجي توھان ھتي غلطيءَ ۾ اچي ويا آهيو، تہ رڳو پنھنجي جھانگُوءَ جي <strong>back</strong> بٽڻ تي ٽڙڪ ڪريو.",
        "noarticletext": "في‌الوقت هن صفحي اندر ڪو بہ ٽيڪسٽ نہ آهي.\nتوهان ٻين صفحن ۾ [[Special:Search/{{PAGENAME}}|search ساڳي عنوان جي ڳولا]] ڪري سگھو ٿا،  \n<span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لاڳاپيل لاگس ۾ ڳوليو]،\nيا [{{fullurl:{{FULLPAGENAME}}|action=edit}} هيءُ صفحو ترميميو]</span>.",
        "noarticletext-nopermission": "ھن وقت ھن صفحي ۾  ڪا بہ لکت نہ آھي.\nتوھان ٻين صفحن ۾ [[Special:Search/{{PAGENAME}}|ھن صفحي جي عنوان سان ڳولا ڪري سگھو ٿا]]، يا <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} لاڳاپيل لاگس ڳوليو]</span>، پر توھان کي ان جي تخليق ڪرڻ جي اجازت نہ آھي.",
-       "userpage-userdoesnotexist-view": "Ù\8aÙ\8fÙ\88زر کاتو $1 درج ٿيل نہ آهي.",
-       "blocked-notice-logextract": "Ù\87Ù\8aØ¡Ù\8e Ù\8aÙ\8fÙ\88زر Ù\81Ù\8aâ\80\8cاÙ\84حاÙ\84 Ø¨Ù\86دشÙ\8aÙ\84 Ø¢Ù\87Ù\8aتازو بندش لاگ حوالي طور پيش ڪجي ٿو:",
+       "userpage-userdoesnotexist-view": "Ù\88اپرائÙ\8aÙ\86دÚ\99 کاتو $1 درج ٿيل نہ آهي.",
+       "blocked-notice-logextract": "Ù\87Ù\8aØ¡Ù\8f Ù\88اپرائÙ\8aÙ\86دÚ\99 Ù\81Ù\8aâ\80\8cاÙ\84حاÙ\84 Ø¨Ù\86دشÙ\8aÙ\84 Ø¢Ù\87Ù\8a.\nتازو بندش لاگ حوالي طور پيش ڪجي ٿو:",
        "updated": "(تجديديل)",
        "note": "<strong>نوٽ:</strong>",
        "previewnote": "<strong>هيءَ فقط پيش نگاھ آهي.</strong>\nتوھان جون ترميمون اڃان نہ سانڍيون ويون آھن!",
        "history-feed-description": "وڪي جي هن صفحي جي ترميمي سوانح",
        "history-feed-item-nocomment": "$2 تي $1",
        "rev-deleted-comment": "(ترميمي خلاصو ھٽايل)",
-       "rev-deleted-user": "(Ù\8aÙ\8fÙ\88زرÙ\86اÙ\86Ø¡Ù\8f Ú\8aاٺو ويو)",
+       "rev-deleted-user": "(Ù\88اپرائÙ\8aÙ\86دÚ\99\86اÙ\86Ø¡Ù\8f Ú\8aاٿو ويو)",
        "rev-deleted-event": "(لاگ تفصيل هٽايا ويا)",
-       "rev-deleted-user-contribs": "[Ù\8aÙ\8fÙ\88زرÙ\86اÙ\86Ø¡Ù\8f Ù\8aا Ø¢Ø¡Ù\90 پِي پتو مِٽايو ويو - ڀاڱيدارين مان ترميمون لڪايون ويون]",
+       "rev-deleted-user-contribs": "[Ù\88اپرائÙ\8aÙ\86دÚ\99\86اÙ\86Ø¡Ù\8f Ù\8aا Ø¢Ø¡Ù\90پِي پتو مِٽايو ويو - ڀاڱيدارين مان ترميمون لڪايون ويون]",
        "rev-suppressed-no-diff": "توهان اهو تفاوت ڏسي نہ ٿا سگھو، ڇاڪاڻ تہ ڪا هڪ ترميم <strong> ڊهي چڪي </strong> آهي.",
        "rev-delundel": "نمائش تبديل ڪريو",
        "rev-showdeleted": "ڏيکاريو",
        "revdelete-hide-image": "فائيل جو مواد لڪايو",
        "revdelete-hide-name": "هدف ۽ نيمپيما لڪايو",
        "revdelete-hide-comment": "ترميم جو تتُ",
-       "revdelete-hide-user": "اÙ\8aÚ\8aÙ\8aٽر Ø¬Ù\88 Ù\8aÙ\88زرÙ\86اÙ\86Ø¡Ù\8f / Ø¢Ø¡ Ù¾ي پتو",
+       "revdelete-hide-user": "اÙ\8aÚ\8aÙ\8aٽر Ø¬Ù\88 Ù\88اپرائÙ\8aÙ\86دÚ\99\86اÙ\86Ø¡Ù\8f/آءÙ\90Ù¾Ù\90ي پتو",
        "revdelete-hide-restricted": "منتظمن توڙي ٻين کان مليل اعداد دٻايو",
        "revdelete-radio-same": "(نہ بدلايو)",
        "revdelete-radio-set": "لڪل",
        "prefs-skin": "چَمَ",
        "skin-preview": "پيش نگاهہ",
        "datedefault": "بلا ترجيح",
-       "prefs-user-pages": "Ù\8aÙ\8fÙ\88زر ØµÙ\81Ø­Ù\88",
-       "prefs-personal": "Ù\8aÙ\8fÙ\88زر جو خدوخال",
+       "prefs-user-pages": "Ù\88اپرائÙ\8aÙ\86دÚ\99Ù\86 Ø¬Ø§ ØµÙ\81حا",
+       "prefs-personal": "Ù\88اپرائÙ\8aÙ\86دÚ\99 جو خدوخال",
        "prefs-rc": "تازيون تبديليون",
        "prefs-watchlist": "نظر ۾ فھرست",
        "prefs-editwatchlist": "نظر ۾ فھرست کي سنواريو",
        "recentchangescount": "عدم پيروي جي صورت ۾ ڏيکارڻ جي لاءِ ترميمون:",
        "prefs-help-recentchangescount": "ان ۾ تازيون تبديليون، صفحن جي سوانح، ۽ لاگ شامل آهن.",
        "savedprefs": "توھان جون ترجيحون سانڍجي چڪيون آھن.",
-       "savedrights": "{{GENDER:$1|$1}} Ø¬Ø§ Ù\8aÙ\88زر گروھ سانڍجي چڪا آھن.",
+       "savedrights": "{{GENDER:$1|$1}} Ø¬Ø§ Ù\88اپرائÙ\8aÙ\86دÚ\99 گروھ سانڍجي چڪا آھن.",
        "timezonelegend": "اوقاتي زون:",
        "localtime": "مقامي وقت:",
        "timezoneuseserverdefault": "وڪي عدم پيروي استعمال ڪريو ($1)",
        "prefs-files": "فائيلس",
        "prefs-emailconfirm-label": "برقٽپال خاطري:",
        "youremail": "برقٽپال:",
-       "username": "{{GENDER:$1|Ù\8aÙ\8fÙ\88زرنانءُ}}",
+       "username": "{{GENDER:$1|Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ}}",
        "prefs-memberingroups": "{{PLURAL:$1|گروھ|گروھن}} جو {{GENDER:$2|رڪن}}:",
        "prefs-registration": "رجسٽريشن جو وقت:",
        "yourrealname": "اصل نالو:",
        "prefs-tokenwatchlist": "ٽوڪن",
        "prefs-diffs": "تفاوت",
        "prefs-help-prefershttps": "هيءَ ترجيح توهان جي ايند داخل ٿيڻ تي عمل ۾ ايندي.",
-       "userrights": "Ù\8aÙ\8fÙ\88زر حق",
-       "userrights-lookup-user": "ÚªÙ\88 Ù\8aÙ\88زر چونڊيو",
-       "userrights-user-editname": "يُوزرنانءُ ڄاڻايو:",
-       "editusergroup": "Ù\8aÙ\88زر Ú¯Ø±Ù\88Ú¾ Ø§ØªØ§Ø±يو",
-       "userrights-editusergroup": "{{GENDER:$1|Ù\8aÙ\88زر}} گروھ سنواريو",
-       "saveusergroups": "{{GENDER:$1|Ù\8aÙ\88زر}} گروھ سانڍيو",
+       "userrights": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ø¬Ø§ حق",
+       "userrights-lookup-user": "ÚªÙ\88 Ù\88اپرائÙ\8aÙ\86دÚ\99 چونڊيو",
+       "userrights-user-editname": "ڪو واپرائيندڙ-نانءُ ڄاڻايو:",
+       "editusergroup": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ø¬Ø§ Ú¯Ø±Ù\88Ú¾ Ù\84اÙ\87يو",
+       "userrights-editusergroup": "{{GENDER:$1|Ù\88اپرائÙ\8aÙ\86دÚ\99}} گروھ سنواريو",
+       "saveusergroups": "{{GENDER:$1|Ù\88اپرائÙ\8aÙ\86دÚ\99}} گروھ سانڍيو",
        "userrights-groupsmember": "برڪن:",
        "userrights-groupsmember-auto": "رڪن واجبي:",
        "userrights-reason": "سبب:",
-       "userrights-no-interwiki": "تÙ\88Ù\87اÙ\86 Ú©Ù\8a Ù»Ù\8aÙ\86 Ù\88ÚªÙ\8aز ØªÙ\8a Ù\8aÙ\8fÙ\88زر حقن ۾ ترميم ڪرڻ جو حق حاصل نہ آهي.",
+       "userrights-no-interwiki": "تÙ\88Ù\87اÙ\86 Ú©Ù\8a Ù»Ù\8aÙ\86 Ù\88ÚªÙ\8aز ØªÙ\8a Ù\88اپرائÙ\8aÙ\86دÚ\99 حقن ۾ ترميم ڪرڻ جو حق حاصل نہ آهي.",
        "userrights-nodatabase": "اعداخانو $1 يا تہ وجود نہ ٿو رکي يا تہ اهو مقامي اعدادخانو نہ آهي.",
        "userrights-changeable-col": "گروپَ جيڪي توهان تبديل ڪري سگھو ٿا",
        "userrights-unchangeable-col": "گروپَ جيڪي توهان تبديل نٿا ڪري سگھو",
        "group-sysop": "منتظم",
        "group-bureaucrat": "ڪامورا",
        "group-all": "(سڀ)",
-       "group-user-member": "{{GENDER:$1|Ù\8aÙ\8fÙ\88زر}}",
+       "group-user-member": "{{GENDER:$1|Ù\88اپرائÙ\8aÙ\86دÚ\99}}",
        "group-bot-member": "{{GENDER:$1|بوٽ}}",
        "group-sysop-member": "{{GENDER:$1|منتظم}}",
        "group-bureaucrat-member": "{{GENDER:$1|ڪامورو}}",
        "right-edit": "صفحا سنواريو",
        "right-createpage": "صفحا سنواريو (جيڪي مباحثي صفحا نہ آهن)",
        "right-createtalk": "مباحثي صفحا سرجيو",
-       "right-createaccount": "Ù\86Ù\88اÙ\86 Ù\8aÙ\8fÙ\88زر کاتا کوليو",
+       "right-createaccount": "Ù\86Ù\88اÙ\86 Ù\88اپرائÙ\8aÙ\86دÚ\99 کاتا کوليو",
        "right-minoredit": "ترميمُن کي معمُولي ڄاڻايو",
        "right-move": "صفحا چوريو",
        "right-move-subpages": "ذيلي صفحن سميت صفحا چوريو",
        "right-browsearchive": "ڊاٺل صفحا ڳوليو",
        "right-undelete": "ڪو صفحو اڻڊاهيو",
        "right-unblockself": "ڪنهن تان بندش ختم ڪريو",
-       "right-editinterface": "Ù\8aÙ\8fÙ\88زر باهمرُو کي سنواريو",
+       "right-editinterface": "Ù\88اپرائÙ\8aÙ\86دÚ\99 باهمرُو کي سنواريو",
        "right-viewmywatchlist": "پنهنجي نظر ۾ فھرست ڏسو",
        "right-editmyoptions": "پنهنجون ترجيحون سنواريو",
        "right-import": "ٻين وڪيز کان صفحا درآمديو",
        "right-importupload": "ڪو فائيل چاڙهي صفحا درآمديو",
        "right-mergehistory": "صفحن جي سوانح سنواريو",
-       "right-userrights": "سڀ يوزر حق ترميم ڪريو",
+       "right-userrights": "واپرائيندڙ جا سڀ حق سنواريو",
        "right-userrights-interwiki": "هن وڪي جي يوزرس جا حق ترميم ڪريو",
        "right-siteadmin": "اعدادخانو بنديو ۽ کوليو",
        "right-override-export-depth": "5ئين اونهائيءَ تائين ڳنڍيل صفحن سميت صفحا برآمديو",
        "grant-basic": "بنيادي حقَ",
        "grant-viewdeleted": "ڊَٺَلَ فائيلَ ۽ صفحا ڏسو",
        "grant-viewmywatchlist": "پنهنجي نظرھيٺ فھرست ڏسو",
-       "newuserlogpage": "Ù\8aÙ\88زر تخليق لاگ",
-       "rightslog": "Ù\8aÙ\8fÙ\88زر حق لاگ",
+       "newuserlogpage": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ø¬Ù\88 تخليق لاگ",
+       "rightslog": "Ù\88اپرائÙ\8aÙ\86دÚ\99 حق لاگ",
        "action-read": "هي صفحو پڙهو",
        "action-edit": "هن صفحي کي سسنواريو",
        "action-createpage": "ھي صفحو تخليق ڪريو",
        "action-createtalk": "ھي مباحثي صفحو تخليق ڪريو",
-       "action-createaccount": "هي يوزر کاتو تخليق ڪريو",
+       "action-createaccount": "ھي واپرائيندڙ کاتو سرجيو",
        "action-history": "هن صفحي جي سوانح ڏسو",
        "action-minoredit": "هن ترميم کي معمولي طور نشان لڳايو",
        "action-move": "هيءَُ صفحو چوريو",
        "action-undelete": "صفحا اڻڊاھيو",
        "action-suppressrevision": "لڪيل ڀيرن تي نظرثاني ڪريو ۽ بحاليو",
        "action-suppressionlog": "هيءُ ذاتي لاگ ڏسو",
-       "action-block": "Ù\87Ù\86 Ù\8aÙ\8fÙ\88زر Ú©Ù\8a Ø³Ù\86Ù\88ارڻ Ú©Ø§Ù\86 Ø±Ù\88Úªيو",
+       "action-block": "Ù\87Ù\86 Ù\88اپرائÙ\8aÙ\86دÚ\99 Ú©Ù\8a Ø³Ù\86Ù\88ارڻ Ú©Ø§Ù\86 Ø¨Ù\86دشيو",
        "action-protect": "هن صفحي جي تحفظاتي سطح بدلايو",
-       "action-rollback": "ÚªÙ\86Ù\87Ù\86 Ù\85خصÙ\88ص ØµÙ\81Ø­Ù\8a ØªÙ\8a Ø¢Ø®Ø±Ù\8a ØªØ±Ù\85Ù\8aÙ\85 ÚªÙ\86دÚ\99 Ù\8aÙ\8fÙ\88زر جي سمورين ترميمن کي ترت واپس ورايو",
+       "action-rollback": "ÚªÙ\86Ù\87Ù\86 Ù\85خصÙ\88ص ØµÙ\81Ø­Ù\8a ØªÙ\8a Ø¢Ø®Ø±Ù\8a ØªØ±Ù\85Ù\8aÙ\85 ÚªÙ\86دÚ\99 Ù\88اپرائÙ\8aÙ\86دÚ\99 جي سمورين ترميمن کي ترت واپس ورايو",
        "action-import": "ٻي ڪنهن وڪي کان صفحا درآمد ڪريو",
        "action-importupload": "ڪو فائيل چاڙهي صفحا درآمديو",
        "action-unwatchedpages": "اڻ ڏٺل صفحن جي فھرست ڏسو",
        "action-mergehistory": "هن صفحي جي سوانح ضم ڪريو",
-       "action-userrights": "سڀ يوزر حق ترميم ڪريو",
+       "action-userrights": "واپرائيندڙ جا سڀ حق سنواريو",
        "action-userrights-interwiki": "ٻين وڪيز جي يوزرس جا حق ترميم ڪريو",
        "action-siteadmin": "اعدادخاني کي بند ڪريو يا کوليو",
        "action-sendemail": "برقٽپال اماڻيو",
        "rcfilters-filter-user-experience-level-unregistered-label": "اڻرجسٽر ٿيل",
        "rcfilters-filter-user-experience-level-newcomer-label": "نوان ايندڙ",
        "rcfilters-filter-user-experience-level-learner-label": "سکندڙ",
-       "rcfilters-filter-user-experience-level-experienced-label": "تجربيڪار واھپ",
+       "rcfilters-filter-user-experience-level-experienced-label": "تجربيڪار واپرائيندڙ",
        "rcfilters-filter-bots-label": "بوٽ",
        "rcfilters-filter-humans-label": "انسان (بوٽ نہ)",
        "rcfilters-filter-humans-description": "انساني ايڊيٽرن پاران ڪيل ترميمون.",
        "listfiles_thumb": "ٽِڪِلِي",
        "listfiles_date": "تاريخ",
        "listfiles_name": "نالو",
-       "listfiles_user": "Ù\8aÙ\8fÙ\88زر",
+       "listfiles_user": "Ù\88اپرائÙ\8aÙ\86دÚ\99",
        "listfiles_size": "ماپَ",
        "listfiles_description": "تشريح",
        "listfiles_count": "ورزن",
        "filehist-thumb": "آڱوٺي ننھن",
        "filehist-thumbtext": "$1 جي نظرثاني لاءِ تصويري نشان",
        "filehist-nothumb": "ٽِڪِلِي اڻموجود",
-       "filehist-user": "Ù\8aÙ\8fÙ\88زر",
+       "filehist-user": "Ù\88اپرائÙ\8aÙ\86دÚ\99",
        "filehist-dimensions": "ماپَ",
-       "filehist-filesize": "فائيل سائيز",
+       "filehist-filesize": "فائيل ماپ",
        "filehist-comment": "تاثر",
        "imagelinks": "فائيل جو استعمال",
        "linkstoimage": "ھن فائيل سان {{PLURAL:$1|ھيٺيون صفحو ڳنڍيل آھي |$1 ھيٺيان صفحا ڳنڍيل آھن}}:",
        "statistics": "انگ اکر",
        "statistics-header-pages": "صفحي جا انگ اکر",
        "statistics-header-edits": "ترميمن جا انگ اکر",
-       "statistics-header-users": "Ù\8aÙ\8fÙ\88زر جا انگ اکر",
+       "statistics-header-users": "Ù\88اپرائÙ\8aÙ\86دÚ\99 جا انگ اکر",
        "statistics-header-hooks": "ٻيا انگ اکر",
        "statistics-articles": "موادي صفحا",
        "statistics-pages": "صفحا",
        "protectedpages-reason": "سبب",
        "protectedpages-submit": "صفحا ڏيکاريو",
        "protectedpages-unknown-timestamp": "اڻڄاتل",
-       "protectedpages-unknown-performer": "نامعلوم يُوزر",
+       "protectedpages-unknown-performer": "اڻڄاتل واپرائيندڙ",
        "protectedtitles": "تحفظيل عنوان",
        "protectedtitles-submit": "عنوان ڏيکاريو",
-       "listusers": "Ù\8aÙ\8fÙ\88زر فهرست",
+       "listusers": "Ù\88اپرائÙ\8aÙ\86دÚ\99Ù\86 Ø¬Ù\8a فهرست",
        "newpages": "نوان صفحا",
        "newpages-submit": "ڏيکاريو",
-       "newpages-username": "Ù\8aÙ\8fÙ\88زرنانءُ:",
+       "newpages-username": "Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ:",
        "ancientpages": "قديم ترين صفحا",
        "move": "چوريو",
        "movethispage": "هيءُ صفحو چوريو",
        "allpagesbadtitle": "صفحي جو گھربل عنوان ڪار ڪونهي، يا خالي آهي، يا وري غيردرست طريقي سان ڳنڍيل بين‌الزباني يا بين‌الوڪي عنوان آهي. \nان ۾ هڪ يا هڪ کان وڌيڪ اهڙا اکر موجود ٿي سگھن ٿا، جيڪي عنوان ۾ استعمال ڪري نہ ٿا سگھجن.",
        "categories": "زمرا",
        "categories-submit": "ڏيکاريو",
-       "deletedcontributions": "Ù\8aÙ\8fÙ\88زر Ø¬Ù\88Ù\86 Ú\8aاٺل ڀاڱيداريون",
-       "deletedcontributions-title": "Ù\8aÙ\8fÙ\88زر Ø¬Ù\88Ù\86 Ú\8aاٺل ڀاڱيداريون",
+       "deletedcontributions": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ø¬Ù\88Ù\86 Ú\8aاٿل ڀاڱيداريون",
+       "deletedcontributions-title": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ø¬Ù\88Ù\86 Ú\8aاٿل ڀاڱيداريون",
        "sp-deletedcontributions-contribs": "ڀاڱيداريون",
        "linksearch-ns": "نانءُپولار",
        "linksearch-ok": "ڳوليو",
-       "listusersfrom": "تÙ\8a Ø´Ø±Ù\88ع ÚªÙ\86دÚ\99 Ù\8aÙ\88زر ڏيکاريو:",
+       "listusersfrom": "تÙ\8a Ø´Ø±Ù\88ع ÚªÙ\86دÚ\99 Ù\88اپرائÙ\8aÙ\86دÚ\99 ڏيکاريو:",
        "listusers-submit": "ڏيکاريو",
-       "listusers-noresult": "ÚªÙ\88 Ø¨Û\81 Ù\8aÙ\8fÙ\88زر Ù\86Û\81 Ù\84Ú\8cÙ\88",
+       "listusers-noresult": "ÚªÙ\88 Ø¨Û\81 Ù\88اپرائÙ\8aÙ\86دÚ\99 Ù\86Û\81 Ù\84Ú\8cÙ\88.",
        "listusers-blocked": "(بندشيل)",
        "activeusers": "سرگرم يُوزرس جي فهرست",
        "activeusers-groups": "گروھن سان تعلق رکندڙ يوزرس ڏيکاريو:",
        "activeusers-excludegroups": "گروھن سان تعلق رکندڙ گروھ ڇڏيو:",
        "activeusers-noresult": "ڪي بہ يُوزرس نہ لڌا.",
        "activeusers-submit": "سرگرم يُوزرس ڏيکاريو",
-       "listgrouprights": "Ù\8aÙ\88زر Ú¯Ø±Ù\88Ù¾ Ø¬Ø§ Ø­Ù\82",
+       "listgrouprights": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ú¯Ø±Ù\88Ú¾ Ø¬Ø§ Ø­Ù\82",
        "listgrouprights-group": "گروهہ:",
        "listgrouprights-rights": "حق",
        "listgrouprights-members": "(رڪنن جي فھرست)",
        "trackingcategories-name": "پيغام جو نالو",
        "trackingcategories-nodesc": "ڪا به تشريح موجود نه آهي.",
        "trackingcategories-disabled": "زمرو ناقابلِ ڪار بڻايل آهي.",
-       "emailuser": "هن واھپ کي برق ٽپال اماڻيو",
-       "emailuser-title-target": "Ú¾Ù\86 {{GENDER:$1|Ù\8aÙ\88زر}} ڏانھن برقٽپال موڪليو",
-       "emailuser-title-notarget": "واھپ ڏانھن برقٽپال اماڻيو",
-       "usermaildisabled": "Ù\8aÙ\88زر Ø§Ù\8aÙ\85Ù\8aÙ\84 Ù\86اÙ\82ابÙ\84Ù\90 ڪار بڻيل",
+       "emailuser": "هن واپرائيندڙ کي برقٽپال اماڻيو",
+       "emailuser-title-target": "Ú¾Ù\86 {{GENDER:$1|Ù\88اپرائÙ\8aÙ\86دÚ\99}} ڏانھن برقٽپال موڪليو",
+       "emailuser-title-notarget": "واپرائيندڙ ڏانھن برقٽپال اماڻيو",
+       "usermaildisabled": "Ù\88اپرائÙ\8aÙ\86دÚ\99 Ø¨Ø±Ù\82ٽپاÙ\84 Ù\86اÙ\82ابÙ\84Ù\90ڪار بڻيل",
        "usermaildisabledtext": "توهان هن وڪي تي ٻين يوزرس ڏانهن ايميل نٿا موڪلي سگھو",
        "noemailtitle": "برقٽپال پتو ناھي",
-       "noemailtext": "هن واھپ ڪو بہ قابلِڪار برقٽپال پتو نہ ڄاڻايو آهي.",
-       "emailusername": "Ù\8aÙ\8fÙ\88زرنانءُ:",
+       "noemailtext": "هن واپرائيندڙ ڪو بہ قابلِڪار برقٽپال پتو نہ ڄاڻايو آهي.",
+       "emailusername": "Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ:",
        "emailusernamesubmit": "جمع ڪرايو",
        "emailfrom": "طرفان:",
        "emailto": "ڏانهن:",
        "unwatch": "نظر ۾ نہ رکو",
        "unwatchthispage": "نظر ۾ رکڻ ڇڏيو",
        "notanarticle": "غير موادي صفحو",
-       "watchlist-details": "{{PLURAL:$1|$1 صفحو|$1 صفحا}} توهان جي ٽيٽ فهرست، ڳالھ ٻولھ جا صفحا الڳ شمار نٿا ٿين.",
+       "watchlist-details": "توھان جي نظر ۾ فھرست (گڏوگڏ بحث صفحن تي) {{PLURAL:$1|$1 صفحو آھي|$1 صفحا آھن}}.",
        "wlshowlast": "گذريل $1 ڪلاڪ $2 ڏينهن ڏيکاريو",
        "watchlist-hide": "لڪايو",
        "watchlist-submit": "ڏيکاريو",
        "watching": "نظر ۾ رکندي...",
        "unwatching": "نظر مان ڪڍندي...",
        "enotif_reset": "سڀ گھميل صفحن تي نشان لڳايو",
-       "enotif_impersonal_salutation": "{{SITENAME}} Ù\8aÙ\8fÙ\88زر",
+       "enotif_impersonal_salutation": "{{SITENAME}} Ù\88اپرائÙ\8aÙ\86دÚ\99",
        "enotif_lastdiff": "هي تبديلي ڏسڻ لاءِ، $1 ڏسو",
-       "enotif_anon_editor": "Ú¯Ù\85Ù\86اÙ\85 Ù\8aÙ\8fÙ\88زر $1",
+       "enotif_anon_editor": "Ú¯Ù\85Ù\86اÙ\85 Ù\88اپرائÙ\8aÙ\86دÚ\99 $1",
        "created": "ٺهي چڪو",
        "changed": "تبديل ٿي ويو",
        "deletepage": "صفحو ڊاهيو",
        "tooltip-invert": "هن دٻي تي نشان لڳايو صحفن ۾ تبديليون لڪائڻ لاءِ چونڊيل نانءَپولار مان (۽ لاڳاپيل نانءُپولار جيڪڏهن نشان لڳل)",
        "namespace_association": "منسلڪ نانءُپولار",
        "blanknamespace": "(مُک)",
-       "contributions": "{{GENDER:$1|Ù\8aÙ\88زر}} جون ڀاڱيداريون",
-       "contributions-title": "يُوزر ڀاڱيداريون براءِ $1",
+       "contributions": "{{GENDER:$1|Ù\88اپرائÙ\8aÙ\86دÚ\99}} جون ڀاڱيداريون",
+       "contributions-title": "$1 لاءِ واپرائيندڙ جون ڀاڱيداريون",
        "mycontris": "ڀاڱيداريون",
        "anoncontribs": "ڀاڱيداريون",
        "contribsub2": "{{GENDER:$3|$1}} ($2) لاءِ",
-       "contributions-userdoesnotexist": "Ù\8aÙ\8fÙ\88زر کاتو \"$1\" درج ٿيل نہ آهي.",
+       "contributions-userdoesnotexist": "Ù\88اپرائÙ\8aÙ\86دÚ\99 کاتو \"$1\" درج ٿيل نہ آهي.",
        "uctop": "(هاڻوڪو)",
        "month": "مھيني کان (۽ اڳوڻيون):",
        "year": "سال کان (۽ اڳوڻيون):",
        "sp-contributions-newbies": "صرف نون کاتن جون ڀاڱيداريون ڏيکاريو",
        "sp-contributions-newbies-sub": "نون کاتن لاءِ",
-       "sp-contributions-newbies-title": "Ù\86Ù\88Ù\86 Ú©Ø§ØªÙ\86 Ø¬Ù\8a Ù\84اءÙ\90 Ù\8aÙ\88زر جون ڀاڱيداريون",
+       "sp-contributions-newbies-title": "Ù\86Ù\88Ù\86 Ú©Ø§ØªÙ\86 Ø¬Ù\8a Ù\84اءÙ\90 Ù\88اپرائÙ\8aÙ\86دÚ\99 جون ڀاڱيداريون",
        "sp-contributions-blocklog": "بندش لاگ",
-       "sp-contributions-deleted": "ڊاٿل {{GENDER:$1|يوزر}} ڀاڱيداريون",
+       "sp-contributions-deleted": "{{GENDER:$1|واپرائيندڙ}} جون ڊاٿل ڀاڱيداريون",
        "sp-contributions-uploads": "چاڙھَ",
        "sp-contributions-logs": "لاگس",
        "sp-contributions-talk": "ڳالھ",
        "sp-contributions-userrights": "{{GENDER:$1|يوُزر}} حقن جي سنڀال",
        "sp-contributions-search": "ڀاڱيدارين لاءِ ڳولا ڪريو",
-       "sp-contributions-username": "آءÙ\90Ù¾Ù\8a Ù¾ØªÙ\88 Ù\8aا Ù\8aÙ\88زرنانءُ:",
+       "sp-contributions-username": "آءÙ\90Ù¾Ù\8a Ù¾ØªÙ\88 Ù\8aا Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ:",
        "sp-contributions-submit": "ڳوليو",
        "whatlinkshere": "هتان ڇا ڳنڍيل آهي",
        "whatlinkshere-title": "\"$1\" سان ڳنڍيندڙ صفحا",
        "whatlinkshere-hidelinks": "$1 ڳنڍڻا",
        "whatlinkshere-filters": "ڇاڻيون",
        "whatlinkshere-submit": "هلو",
-       "block": "Ù\8aÙ\8fÙ\88زر کي بندشيو",
-       "unblock": "Ù\8aÙ\8fÙ\88زر کي اڻبندشيو",
-       "blockip": "{{GENDER:$1|Ù\8aÙ\88زر}} تي بندش وجھو",
-       "blockip-legend": "Ù\8aÙ\8fÙ\88زر کي بندشيو",
+       "block": "Ù\88اپرائÙ\8aÙ\86دÚ\99 کي بندشيو",
+       "unblock": "Ù\88اپرائÙ\8aÙ\86دÚ\99 کي اڻبندشيو",
+       "blockip": "{{GENDER:$1|Ù\88اپرائÙ\8aÙ\86دÚ\99}} تي بندش وجھو",
+       "blockip-legend": "Ù\88اپرائÙ\8aÙ\86دÚ\99 کي بندشيو",
        "ipbexpiry": "اختتام:",
        "ipbreason": "سبب:",
        "ipbother": "ٻيو وقت:",
        "ipb-confirm": "بندش جي پڪ ڪريو",
        "badipaddress": "ناقابلڪار آءِ پي پتو",
        "blockipsuccesssub": "بندش ڪامياب ٿي",
-       "unblockip": "Ù\8aÙ\8fÙ\88زر کي اڻبندشيو",
+       "unblockip": "Ù\88اپرائÙ\8aÙ\86دÚ\99 کي اڻبندشيو",
        "ipusubmit": "اها بندش هٽايو",
        "unblocked-range": "$1 تان بندش هٽي چڪي آهي.",
        "unblocked-id": "بندش $1 هٽي چڪي آهي.",
        "unblocklogentry": "$1 تان بندش هٽائي وئي",
        "block-log-flags-anononly": "فقط نامعلوم يوزرس",
        "block-log-flags-noemail": "برقٽپال غير فعال",
-       "block-log-flags-hiddenname": "Ù\84ÚªÙ\84 Ù\8aÙ\8fÙ\88زرÙ\86اÙ\86Ø¡Ù\8f",
+       "block-log-flags-hiddenname": "Ù\88اپرائÙ\8aÙ\86دÚ\99\86اÙ\86Ø¡Ù\8f Ù\84ÚªÙ\84",
        "ipb_already_blocked": "\"$1\" اڳ ۾ ئي بندشيل آهي.",
        "ipbnounblockself": "توهان پنهنجو پاڻ تان بندش هٽائي نہ ٿا سگھو.",
        "lockdb": "اعدادخاني کي بنديو",
        "import-upload-filename": "فائيل نانءُ:",
        "import-comment": "تاثر:",
        "importlogpage": "درآمد لاگ",
-       "tooltip-pt-userpage": "{{GENDER:|توھانجو يوزر}} صفحو",
-       "tooltip-pt-mytalk": "{{GENDER:|توھانجو}} يوزر صفحو",
+       "tooltip-pt-userpage": "{{GENDER:|توھانجو}} صفحو",
+       "tooltip-pt-mytalk": "{{GENDER:|توھانجو}} بحث صفحو",
        "tooltip-pt-preferences": "{{GENDER:|توھانجون}} ترجيحون",
        "tooltip-pt-watchlist": "صفحن جي فھرست جيڪي توھان تبديلين لاءِ نظر ۾ رکيا آھن",
        "tooltip-pt-mycontris": "{{GENDER:|توھانجي}} ڀاڱيدارين جي فھرست",
        "tooltip-t-whatlinkshere": "ھتان ڳنڍيل سمورن وڪي صفحن جي فھرست",
        "tooltip-t-recentchangeslinked": "ويجھڙائيءَ ۾ صفحن ۾ ٿيل تبديليون هن صفحي سان ڳنڍيل آهن",
        "tooltip-feed-atom": "هن صفحي لاءِ ايٽم فيڊ",
-       "tooltip-t-contributions": "{{GENDER:$1|Ú¾Ù\86 Ù\8aÙ\88زر}} جي ڀاڱيدارين جي فھرست",
-       "tooltip-t-emailuser": "{{GENDER:$1|Ú¾Ù\86 Ù\8aÙ\88زر}} ڏانھن برقٽپال موڪليو",
+       "tooltip-t-contributions": "{{GENDER:$1|Ú¾Ù\86 Ù\88اپرائÙ\8aÙ\86دÚ\99}} جي ڀاڱيدارين جي فھرست",
+       "tooltip-t-emailuser": "{{GENDER:$1|Ú¾Ù\86 Ù\88اپرائÙ\8aÙ\86دÚ\99}} ڏانھن برقٽپال موڪليو",
        "tooltip-t-upload": "فائيل چاڙهيو",
        "tooltip-t-specialpages": "سڀني خاص صفحن جي فھرست",
        "tooltip-t-print": "هن صفحي جو ڇاپائتو پرت",
        "tooltip-t-permalink": "صفحي جي ان نظرثاليءَ ڏانھن مستقل ڳنڍڻو",
        "tooltip-ca-nstab-main": "مواد جي صفحي کي ڏسو",
-       "tooltip-ca-nstab-user": "ھن جو يُوزر صفحو ڏسو",
+       "tooltip-ca-nstab-user": "واپرائيندڙ جو صفحو ڏسو",
        "tooltip-ca-nstab-special": "هيءُ خاص صفحو آهي، ان ۾ ترميم نٿي ڪري سگھجي",
        "tooltip-ca-nstab-project": "رٿائي صفحو ڏسو",
        "tooltip-ca-nstab-image": "ھن فائيل جو صفحو ڏسو",
        "tooltip-rollback": "\"واپس ورايو\" ھن صفحي ۾ پوئين ڀاڱيدار جي ڪيل ترميم(ن) کي ھڪ ٽڙڪ سان اڻڪري ٿو",
        "tooltip-preferences-save": "ترجيحون سانڍيو",
        "tooltip-summary": "ننڍو خلاصو ڏيو",
-       "anonymous": "گمنام {{PLURAL:$1|يوزر|يوزرس}} جو {{SITENAME}}",
+       "anonymous": "{{SITENAME}} جا گمنام {{PLURAL:$1|واپرائيندڙ|واپرائيندڙَ}}",
        "simpleantispam-label": "اينٽي-اسپام روڪ.\nھن کي <strong>نہ</strong> ڀريو!",
        "pageinfo-toolboxlink": "صفحي جي معلومات",
        "pageinfo-contentpage-yes": "ها",
        "pageinfo-category-total": "رڪنن جو ڪل تعداد",
        "pageinfo-category-subcats": "ذيلي زمرن جو تعداد",
        "pageinfo-category-files": "صفحن جو تعداد",
+       "markaspatrolledtext": "ھن صفحي کي گشت ڪيل طور نشان لڳايو",
        "previousdiff": "← اڳوڻي ترميم",
        "nextdiff": "نئين تر ترميم →",
        "file-info-size": "$1 × $2 عڪسلون، فائيل سائيز: $3، MIME ٽائيپ: $4",
        "show-big-image-other": "ٻيا {{PLURAL:$2|تحلل}}:$1",
        "show-big-image-size": "$1*$2 پڪزلس",
        "file-info-gif-frames": "$1 {{PLURAL:$1|فريم|فريمَ}}",
+       "file-info-png-frames": "$1 {{PLURAL:$1|فريم|فريمَ}}",
        "newimages": "نون فائيلن جي گيلري",
        "noimages": "ڏسڻ لاءِ ڪجھہ ناهي.",
        "ilsubmit": "ڳوليو",
        "bydate": "تاريخوار",
+       "days-abbrev": "$1 ڏ",
        "hours": "{{PLURAL:$1|$1 ڪلاڪ|$1 ڪلاڪَ}}",
        "days": "{{PLURAL:$1|$1 ڏينهن|$1 ڏينهَن}}",
        "weeks": "{{PLURAL:$1|$1 هفتو|$1 هفتا}}",
        "exif-colorspace": "رنگ پولار",
        "exif-pixelxdimension": "عڪس جي ويڪر",
        "exif-pixelydimension": "عڪس جي اوچائي",
-       "exif-usercomment": "Ù\8aÙ\8fÙ\88زر جا تاثرات",
+       "exif-usercomment": "Ù\88اپرائÙ\8aÙ\86دÚ\99 جا تاثرات",
        "exif-relatedsoundfile": "لاڳاپيل آوازي فائيل",
        "exif-datetimeoriginal": "اعداد جي جڙڻ جي تاريخ ۽ وقت",
        "exif-datetimedigitized": "عددڪاريءَ جي تاريخ ۽ وقت",
        "htmlform-cloner-delete": "هٽايو",
        "htmlform-title-not-exists": "$1 وجود نٿو رکي.",
        "logentry-delete-delete": "$1 {{GENDER:$2|ڊاٿو}} صفحو $3",
-       "revdelete-uname-hid": "Ù\8aÙ\8fÙ\88زرنانءُ لڪل",
+       "revdelete-uname-hid": "Ù\88اپرائÙ\8aÙ\86دÚ\99-نانءُ لڪل",
        "logentry-move-move": "$1 {{GENDER:$2|چوريو}} صفحو $3 ڏانهن $4",
-       "logentry-newusers-create": "Ù\8aÙ\88زر کاتو $1 {{GENDER:$2|سرجيو ويو}}",
+       "logentry-newusers-create": "Ù\88اپرائÙ\8aÙ\86دÚ\99 کاتو $1 {{GENDER:$2|سرجيو ويو}}",
        "logentry-upload-upload": "$1 {{GENDER:$2|چاڙهيو}} $3",
        "rightsnone": "(ڪو بہ نہ)",
        "feedback-back": "پوئتي",
index c033af2..2927c95 100644 (file)
@@ -7,6 +7,7 @@
        "tog-underline": "لنک  ہیٹھ لکیر",
        "tog-hideminor": "چھوٹیاں تبدیلیاں لُکاؤ",
        "tog-hidepatrolled": "تازہ تبدیلیاں وچوں زیرنگرانی تبدیلیاں لکاؤ",
+       "tog-newpageshidepatrolled": "نویں ورقیاں دی فہرست وچوں نگرانی ہیٹھ ورقے لُکاؤ",
        "tog-hidecategorization": "ورقیاں دیاں قسم بندی لُکاؤ",
        "tog-numberheadings": "سرخیاں کوں خود کار نمبر ݙیوو",
        "tog-showtoolbar": "آلات ترمیم ݙکھاؤ",
        "protect-othertime": "ٻیا ویلا:",
        "protect-othertime-op": "ٻیا ویلا",
        "restriction-edit": "لکھو",
-       "restriction-move": "ٹرو",
+       "restriction-move": "ٹورو",
        "restriction-create": "بݨاؤ",
        "restriction-upload": "اپلوڈ",
        "undelete": "مٹائے ڳئے ورقے ݙیکھو",
index 99a793b..b029127 100644 (file)
        "parser-template-loop-warning": "V predlogi je bila odkrita zanka: [[$1]]",
        "template-loop-category": "Strani z zankami predlog",
        "template-loop-category-desc": "Stran vsebuje zanko predloge, tj. predlogo, ki rekurzivno kliče sama sebe.",
+       "template-loop-warning": "<strong>Opozorilo:</strong> Ta stran kliče [[:$1]], kar povzroči zanko predloge (neskončni rekurzivni klic).",
        "parser-template-recursion-depth-warning": "Prekoračena globina rekurzije predlog ($1)",
        "language-converter-depth-warning": "Prekoračena globina pretvorbe jezikov ($1)",
        "node-count-exceeded-category": "Strani s prekoračenim številom vozlišč",
        "timezoneregion-indian": "Indijski ocean",
        "timezoneregion-pacific": "Tihi ocean",
        "allowemail": "Drugim uporabnikom omogoči pošiljanje e-pošte",
+       "email-blacklist-label": "Prepreči naslednjim uporabnikom, da mi pošiljajo e-pošto:",
        "prefs-searchoptions": "Iskanje",
        "prefs-namespaces": "Imenski prostori",
        "default": "privzeto",
        "rcfilters-watchlist-markseen-button": "Označi vse spremembe kot pregledane",
        "rcfilters-watchlist-edit-watchlist-button": "Uredite svoj seznam nadzorovanih strani",
        "rcfilters-watchlist-showupdated": "Spremembe strani, ki jih niste obiskali od zadnje spremembe, so prikazane <strong>krepko</strong>, z močnimi oznakami.",
+       "rcfilters-preference-label": "Skrij izboljšano različico Zadnjih sprememb",
+       "rcfilters-preference-help": "Povrne preoblikovanje vmesnika leta 2017 in vsa takrat in od takrat dodana orodja.",
        "rcnotefrom": "{{PLURAL:$5|Navedena je sprememba|Navedeni sta spremembi|Navedene so spremembe}} od <strong>$3 $4</strong> dalje (prikazujem jih do <strong>$1</strong>).",
        "rclistfromreset": "Ponastavi izbiro datuma",
        "rclistfrom": "Prikaži spremembe od $3 $2 naprej",
        "uploadbtn": "Naloži datoteko",
        "reuploaddesc": "Prekliči nalaganje in se vrni na obrazec za nalaganje",
        "upload-tryagain": "Vnesite spremenjen opis datoteke",
+       "upload-tryagain-nostash": "Naloži ponovno naloženo datoteko in spremenjen opis",
        "uploadnologin": "Niste prijavljeni",
        "uploadnologintext": "Za nalaganje datotek se morate $1.",
        "upload_directory_missing": "Mapa za nalaganje datotek ($1) manjka in je ni bilo mogoče ustvariti s spletnim strežnikom.",
        "file-deleted-duplicate-notitle": "Datoteka, identična tej datoteki, je bila v preteklosti izbrisana in naslov je bil zatrt.\nPoprosite koga, ki ima možnost ogleda podatkov zatrtih datotek, da preveri položaj, preden nadaljujete s ponovnim nalaganjem.",
        "uploadwarning": "Opozorilo!",
        "uploadwarning-text": "Prosimo, spremenite opis datoteke spodaj in poskusite ponovno.",
+       "uploadwarning-text-nostash": "Prosimo, ponovno naložite datoteko, spodaj spremenite opis in poskusite znova.",
        "savefile": "Shrani datoteko",
        "uploaddisabled": "Nalaganje je onemogočeno",
        "copyuploaddisabled": "Nalaganje preko URL je onemogočeno",
        "listfiles_size": "Velikost",
        "listfiles_description": "Opis",
        "listfiles_count": "Različice",
-       "listfiles-show-all": "Vključuje stare različice slik",
+       "listfiles-show-all": "Vključi stare različice datotek",
        "listfiles-latestversion": "Trenutna različica",
        "listfiles-latestversion-yes": "Da",
        "listfiles-latestversion-no": "Ne",
index 4126bac..148539f 100644 (file)
        "permissionserrorstext": "Немате овлашћење за ову радњу из {{PLURAL:$1|1=следећег|следећих}} разлога:",
        "permissionserrorstext-withaction": "Немате дозволу за $2 из {{PLURAL:$1|следећег|следећих}} разлога:",
        "recreate-moveddeleted-warn": "<strong>Упозорење: поново правите страницу која је претходно обрисана.</strong>\n\nРазмотрите да ли је прикладно да наставите с уређивањем ове странице.\nОвде је наведена историја брисања и премештања с образложењем:",
-       "moveddeleted-notice": "Ова страница је обрисана.\nИсторија њеног брисања и премештања налази се испод:",
+       "moveddeleted-notice": "Ова страница је обрисана.\nИсторија њеног брисања, заштите и премештања налази се испод:",
        "moveddeleted-notice-recent": "Жао нам је, ова страница је недавно обрисана (у последњих 24 сата).\nОвде је наведена историја брисања и премештања с образложењем.",
        "log-fulllog": "Погледај целу историју",
        "edit-hook-aborted": "Измену је прекинула кука.\nНије дато никакво образложење.",
        "rollbacklinkcount-morethan": "врати више од $1 {{PLURAL:$1|измене|измене|измена}}",
        "rollbackfailed": "Неуспешно враћање",
        "cantrollback": "Не могу да вратим измену.\nПоследњи аутор је уједно и једини.",
-       "alreadyrolled": "Враћање последње измене странице [[:$1]] од стране {{GENDER:$2|корисника|кориснице|корисника}} [[User:$2|$2]] ([[User talk:$2|разговор]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); неко други је већ изменио или вратио страницу.\n\nПоследњу измену је {{GENDER:$3|направио|направила|направио}} [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "alreadyrolled": "Враћање последње измене странице [[:$1]] од стране {{GENDER:$2|корисника|кориснице|корисника}} [[User:$2|$2]] ([[User talk:$2|разговор]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) није успело; неко други је у међувремену изменио или вратио страницу.\n\nПоследњу измену је {{GENDER:$3|направио|направила|направио}} [[User:$3|$3]] ([[User talk:$3|разговор]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Опис измене: <em>$1</em>.",
        "revertpage": "Враћене измене [[Special:Contribs/$2|$2]] ([[User talk:$2|разговор]]) на последњу измену корисника [[User:$1|$1]]",
        "revertpage-nouser": "Враћене су измене скривеног корисника на последњу измену {{GENDER:$1|корисника|кориснице}} [[User:$1|$1]]",
        "markedaspatrollederror": "Не могу да означим као патролирано",
        "markedaspatrollederrortext": "Морате изабрати измену да бисте је означили као патролирану.",
        "markedaspatrollederror-noautopatrol": "Не можете да означите своје измене као патролиране.",
-       "markedaspatrollednotify": "Ð\9eва Ð¸Ð·Ð¼ÐµÐ½Ð° Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и â\80\9e$1â\80\9c Ñ\98е Ð¾Ð·Ð½Ð°Ñ\87ена као патролирана.",
+       "markedaspatrollednotify": "Ð\9eва Ð¸Ð·Ð¼ÐµÐ½Ð° Ð½Ð° Ñ\81Ñ\82Ñ\80аниÑ\86и â\80\9e$1â\80\9d Ð¾Ð·Ð½Ð°Ñ\87ена Ñ\98е као патролирана.",
        "markedaspatrollederrornotify": "Означавање ове измене патролираном није успело.",
        "patrol-log-page": "Дневник патролирања",
        "patrol-log-header": "Ово је дневник патролираних измена.",
        "fileduplicatesearch-noresults": "Датотека под називом „$1“ није пронађена.",
        "specialpages": "Посебне странице",
        "specialpages-note-top": "Легенда",
+       "specialpages-note-restricted": "* Обичне посебне странице.\n* <span class=\"mw-specialpagerestricted\">Посебне странице са ограничењем.</span>",
        "specialpages-group-maintenance": "Извештаји одржавања",
        "specialpages-group-other": "Остале посебне странице",
        "specialpages-group-login": "Пријава / регистрација",
        "compare-title-not-exists": "Наведени наслов не постоји.",
        "compare-revision-not-exists": "Наведена измена не постоји.",
        "diff-form": "'''форма'''",
+       "permanentlink": "Стална веза",
        "dberr-problems": "Дошло је до техничких проблема.",
        "dberr-again": "Сачекајте неколико минута и поново учитајте страницу.",
        "dberr-info": "(Не могу приступити бази података: $1)",
        "mw-widgets-mediasearch-noresults": "Нема резултата.",
        "mw-widgets-titleinput-description-new-page": "страница још увек не постоји",
        "mw-widgets-titleinput-description-redirect": "преусмерава на $1",
+       "mw-widgets-usersmultiselect-placeholder": "Додај још...",
        "date-range-from": "Од датума:",
        "date-range-to": "До датума:",
        "randomrootpage": "Случајна коренска страница",
index 95b1797..28fd9a6 100644 (file)
        "rollbacklinkcount-morethan": "vrati više od $1 {{PLURAL:$1|izmene|izmene|izmena}}",
        "rollbackfailed": "Neuspešno vraćanje",
        "cantrollback": "Ne mogu da vratim izmenu.\nPoslednji autor je ujedno i jedini.",
-       "alreadyrolled": "Vraćanje poslednje izmene stranice [[:$1]] od strane {{GENDER:$2|korisnika|korisnice|korisnika}} [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]); neko drugi je već izmenio ili vratio stranicu.\n\nPoslednju izmenu je {{GENDER:$3|napravio|napravila|napravio}} [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
+       "alreadyrolled": "Vraćanje poslednje izmene stranice [[:$1]] od strane {{GENDER:$2|korisnika|korisnice|korisnika}} [[User:$2|$2]] ([[User talk:$2|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$2|{{int:contribslink}}]]) nije uspelo; neko drugi je u međuvremenu izmenio ili vratio stranicu.\n\nPoslednju izmenu je {{GENDER:$3|napravio|napravila|napravio}} [[User:$3|$3]] ([[User talk:$3|razgovor]]{{int:pipe-separator}}[[Special:Contributions/$3|{{int:contribslink}}]]).",
        "editcomment": "Opis izmene: <em>$1</em>.",
        "revertpage": "Vraćene izmene [[Special:Contribs/$2|$2]] ([[User talk:$2|razgovor]]) na poslednju izmenu korisnika [[User:$1|$1]]",
        "revertpage-nouser": "Vraćene su izmene skrivenog korisnika na poslednju izmenu {{GENDER:$1|korisnika|korisnice}} [[User:$1|$1]]",
        "markedaspatrollederror": "Ne mogu da označim kao patrolirano",
        "markedaspatrollederrortext": "Morate izabrati izmenu da biste je označili kao patroliranu.",
        "markedaspatrollederror-noautopatrol": "Ne možete da označite svoje izmene kao patrolirane.",
-       "markedaspatrollednotify": "Ova izmena na stranici â\80\9e$1â\80\9c je oznaÄ\8dena kao patrolirana.",
+       "markedaspatrollednotify": "Ova izmena na stranici â\80\9e$1â\80\9d oznaÄ\8dena je kao patrolirana.",
        "markedaspatrollederrornotify": "Označavanje ove izmene patroliranom nije uspelo.",
        "patrol-log-page": "Dnevnik patroliranja",
        "patrol-log-header": "Ovo je dnevnik patroliranih izmena.",
        "fileduplicatesearch-noresults": "Datoteka pod nazivom „$1“ nije pronađena.",
        "specialpages": "Posebne stranice",
        "specialpages-note-top": "Legenda",
+       "specialpages-note-restricted": "* Obične posebne stranice.\n* <span class=\"mw-specialpagerestricted\">Posebne stranice sa ograničenjem.</span>",
        "specialpages-group-maintenance": "Izveštaji održavanja",
        "specialpages-group-other": "Ostale posebne stranice",
        "specialpages-group-login": "Prijava / registracija",
        "compare-title-not-exists": "Navedeni naslov ne postoji.",
        "compare-revision-not-exists": "Navedena izmena ne postoji.",
        "diff-form": "'''forma'''",
+       "permanentlink": "Stalna veza",
        "dberr-problems": "Došlo je do tehničkih problema.",
        "dberr-again": "Sačekajte nekoliko minuta i ponovo učitajte stranicu.",
        "dberr-info": "(Ne mogu pristupiti bazi podataka: $1)",
        "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",
+       "mw-widgets-usersmultiselect-placeholder": "Dodaj još...",
        "randomrootpage": "Slučajna korenska stranica",
        "log-action-filter-all": "Sve",
        "log-action-filter-move-move_redir": "Premeštanje sa prepisivanjem preusmerenja",
index 54e4498..f88ba4b 100644 (file)
        "internalerror": "Kasalahan internal",
        "internalerror_info": "Kasalahan internal: $1",
        "internalerror-fatal-exception": "Mahiwal dina ketikan \"$1\"",
-       "filecopyerror": "Teu bisa nyalin koropak \"$1\" ka \"$2\".",
-       "filerenameerror": "Teu bisa ngaganti ngaran koropak \"$1\" jadi \"$2\".",
-       "filedeleteerror": "Teu bisa ngahapus koropak \"$1\".",
+       "filecopyerror": "Teu bisa néplak berkas \"$1\" ka \"$2\".",
+       "filerenameerror": "Teu bisa ngarobah ngaran berkas \"$1\" jadi \"$2\".",
+       "filedeleteerror": "Teu bisa mupus berkas \"$1\".",
        "directorycreateerror": "Henteu bisa nyieun diréktori \"$1\".",
        "directoryreadonlyerror": "Diréktori \"$1\" ukur-baca.",
        "directorynotreadableerror": "Diréktori \"$1\" henteu bisa dibaca.",
-       "filenotfound": "Teu bisa manggihan koropak \"$1\".",
+       "filenotfound": "Teu bisa manggihan berkas \"$1\".",
        "unexpected": "Peunteun di luar hontalan: \"$1\"=\"$2\".",
        "formerror": "Kasalahan: teu bisa ngirim formulir",
        "badarticleerror": "Peta ieu teu bisa dipigawé na kaca ieu.",
        "prefs-user-pages": "Kaca pamaké",
        "prefs-personal": "Data pamaké",
        "prefs-rc": "Panémbong robahan anyar jeung tukung",
-       "prefs-watchlist": "Awaskeuneun",
-       "prefs-editwatchlist": "Ropéa awaskeuneun",
+       "prefs-watchlist": "Daptar awaseun",
+       "prefs-editwatchlist": "Édit daptar awaseun",
        "prefs-editwatchlist-label": "Ropéa éntri anu aya dina awaskeuneun:",
        "prefs-editwatchlist-edit": "Tempo jeung pupus judul di daptar awaskeuneun anjeun",
        "prefs-editwatchlist-raw": "Édit daptar awaskeuneun atah",
        "prefs-watchlist-days-max": "Panglilana $1 {{PLURAL:$1|poé|poé}}",
        "prefs-watchlist-edits": "Jumlah maksimum parobahan nu ditémbongkeun dina daptar awaskeuneun:",
        "prefs-watchlist-edits-max": "Panglobana: 1000",
-       "prefs-watchlist-token": "Token awaskeuneun:",
+       "prefs-watchlist-token": "Token daptar awaseun:",
        "prefs-misc": "Pangaturan rupa-rupa",
        "prefs-resetpass": "Ganti sandi",
        "prefs-changeemail": "Ganti atawa pupus alamat surélék",
        "timezoneregion-europe": "Éropah",
        "timezoneregion-indian": "Samudra Indonésia",
        "timezoneregion-pacific": "Samudra Pasifik",
-       "allowemail": "Buka koropak pikeun nampa surélék ti nu séjén",
+       "allowemail": "Buka berkas pikeun nampa surélék ti nu séjén",
+       "email-blacklist-label": "Larang ieu pamaké ngirim surélék ka kuring:",
        "prefs-searchoptions": "Paluruh",
        "prefs-namespaces": "Ngaranspasi",
        "default": "ti dituna",
-       "prefs-files": "Koropak",
+       "prefs-files": "Berkas",
        "prefs-custom-css": "CSS sakahayang",
        "prefs-custom-js": "JavaScript sakahayang",
        "prefs-common-css-js": "CSS/JavaScript dipaké pikeun sakabéh kulit:",
        "userrights-expiry": "Kadaluwarsa:",
        "userrights-expiry-existing": "Waktu kadaluwarsa kiwari: $3, $2",
        "userrights-expiry-othertime": "Séjén waktu:",
+       "userrights-invalid-expiry": "Waktu kadaluwarsa pikeun gorombolan \"$1\" teu sah.",
+       "userrights-expiry-in-past": "Waktu kadaluwarsa pikeun gorombolan \"$1\" geus kaliwat berlalu.",
        "group": "Gorombolan:",
        "group-user": "Pamaké",
        "group-autoconfirmed": "Pamaké anu otomatis dikonfirmasi",
        "right-createpage": "Nyieun kaca anyar (nu lain kaca obrolan)",
        "right-createtalk": "Nyieun kaca obrolan",
        "right-createaccount": "Nyieun akun anyar",
+       "right-autocreateaccount": "Otomatis asup log ku akun pamaké luar",
        "right-minoredit": "Nandaan éditan minor",
        "right-move": "Mindahkeun kaca",
        "right-move-subpages": "Pindahkeun kaca katut sakabéh subkacana",
        "right-movefile": "Mindahkeun berkas",
        "right-suppressredirect": "Henteu nyieun hiji alihan ti ngaran lila sabot mindahkeun kaca",
        "right-upload": "Unjal berkas",
-       "right-reupload": "Nimpah koropak nu geus aya",
+       "right-reupload": "Ngalandih berkas nu geus aya",
        "right-reupload-own": "Nimpah koropak nu geus aya nu dimuat ku sorangan",
        "right-reupload-shared": "Nampik gambar-gambar dina média lokal babarengan",
        "right-upload_by_url": "Unjal berkas tina alamat URL",
        "right-unblockself": "buka peungpeuk sorangan",
        "right-protect": "Ngarobah hambalan protéksi jeung édit kaca anu dikonci",
        "right-editprotected": "Edit kaca anu dikonci salaku \"{{int:protect-level-sysop}}\"",
+       "right-editsemiprotected": "Édit kaca nu ditantayungan minangka \"{{int:protect-level-autoconfirmed}}\"",
        "right-editcontentmodel": "Édit modél kontén kaca",
        "right-editinterface": "Édit antarbenget pamaké",
        "right-editusercss": "Édit berkas CSS pamaké séjén",
        "right-edituserjs": "Ngédit berkas JS pamaké séjén",
        "right-editmyusercss": "Édit berkas CSS pamaké anjeun",
        "right-editmyuserjs": "Édit berkas JavaScript pamaké anjeun",
-       "right-viewmywatchlist": "Tempo awaskeuneun anjeun",
+       "right-viewmywatchlist": "Tempo daptar awaseun anjeun",
+       "right-editmywatchlist": "Édit daptar awaskeuneun anjeung. Masih aya cara nambahkeun kaca tanpa kudu mibanda ieu hak.",
        "right-viewmyprivateinfo": "Tempo data pribadi anjeun (alamat surélék, ngaran asli)",
        "right-editmyprivateinfo": "Robah data pribadi anjeun (alamat surélék, ngaran asli)",
        "right-editmyoptions": "Robah préferénsi anjeun",
+       "right-rollback": "Geuwat malikkeun éditan-éditan pamaké panungtung nu ngédit kaca tinangtu",
        "right-markbotedits": "Nandaan pamalikan révisi minangka éditan bot",
        "right-noratelimit": "Teu dipangaruhan ku wawatesan jumlah éditan",
        "right-import": "Ngimpor kaca ti wiki séjén",
        "action-move-categorypages": "pindahkeun kaca kategori",
        "action-movefile": "mindahkeun ieu berkas",
        "action-upload": "ngamuat ieu berkas",
-       "action-reupload": "nimpah berkas nu geus aya ieu",
+       "action-reupload": "ngalandih berkas nu geus aya",
        "action-reupload-shared": "nimpah ier berkas dina gudang sadaya",
        "action-upload_by_url": "ngamuat ieu berkas ti URL",
        "action-writeapi": "maké API",
        "action-siteadmin": "ngonci atawa muka konci databés",
        "action-sendemail": "ngirim surélék",
        "action-editmyoptions": "édit préférénsi anjeun",
-       "action-editmywatchlist": "robah awaskeuneun anjeun",
+       "action-editmywatchlist": "édit daptar awaseun anjeun",
        "action-viewmywatchlist": "Tempo aawaseun anjeun",
        "action-viewmyprivateinfo": "tempo émbaran pribadi anjeun",
        "action-editmyprivateinfo": "robah émbaran pribadi anjeun",
        "action-editcontentmodel": "ngédit modél kontén hiji kaca",
        "action-managechangetags": "jieun sarta pareuman tag",
        "action-applychangetags": "larapkeun tag bareng jeung parobahan anjeun",
+       "action-changetags": "nambahan jeung mupus tag sakahanyar dina révisi individu jeung éntri log",
        "action-deletechangetags": "pupus tag tina basis data",
        "action-purge": "hapus sindangan ieu kaca",
        "nchanges": "$1 {{PLURAL:$1|parobahan|parobahan}}",
        "rcfilters-highlighted-filters-list": "Disorot: $1",
        "rcfilters-quickfilters": "Saringan kasimpen",
        "rcfilters-quickfilters-placeholder-title": "Can aya tutumbu kasimpen",
+       "rcfilters-quickfilters-placeholder-description": "Pikeun nyimpen pangaturan saringan jeung makéna deui, klik ikon ciciri kaca di aréa Panyaringan Aktif, di handap.",
        "rcfilters-savedqueries-defaultlabel": "Saringan kasimpen",
        "rcfilters-savedqueries-rename": "Robah ngaran",
        "rcfilters-savedqueries-setdefault": "Atur minangka baku",
        "rcfilters-empty-filter": "Euweuh filter aktif. Sakumna kontribusi ditémbongkeun.",
        "rcfilters-filterlist-title": "Saringan",
        "rcfilters-filterlist-whatsthis": "Kumaha bet bisa kieu?",
-       "rcfilters-filterlist-feedbacklink": "Béré eupan balik pikeun saringan uji coba anyar",
+       "rcfilters-filterlist-feedbacklink": "Béjaan kami kedalan anjeun ngeunaan ieu alat panyaringan (anyar)",
        "rcfilters-highlightbutton-title": "Hasil sorotan",
        "rcfilters-highlightmenu-title": "Pilih warna",
        "rcfilters-highlightmenu-help": "Pilih warna pikeun nyorot ieu properti",
        "rcfilters-filterlist-noresults": "Taya saringan nu kapanggih",
+       "rcfilters-noresults-conflict": "Hasil teu kapanggih lantaran kritéria pamaluruhanna pajiin-jiin",
        "rcfilters-filtergroup-authorship": "Kontribusi kapangarangan",
        "rcfilters-filter-editsbyself-label": "Éditan meunang anjeun",
        "rcfilters-filter-editsbyself-description": "Kontribusi anjeun.",
        "rcfilters-filter-newpages-label": "Panyieunan kaca",
        "rcfilters-filter-newpages-description": "Éditan nu nyieun kaca anyar.",
        "rcfilters-filter-categorization-label": "Parobahan kategori",
+       "rcfilters-filter-categorization-description": "Rékaman kaca nu geus ditambahkeun atawa dipupus tina kategori.",
        "rcfilters-filter-logactions-label": "Tarékah kacatet",
        "rcfilters-filtergroup-lastRevision": "Révisi panganyarna",
        "rcfilters-filter-lastrevision-label": "Révisi panganyarna",
        "rcfilters-liveupdates-button-title-off": "Témbongkeun parobahan anyar nalika éta parobahan prung",
        "rcfilters-watchlist-markseen-button": "Tandaan sakumna parobahan minangka katémbong",
        "rcfilters-watchlist-edit-watchlist-button": "Édit daptar kaca awaskeuneun anjeun",
+       "rcfilters-preference-label": "Samunikeun vérsi Anyar Robah nu geus diropéa",
        "rcnotefrom": "Di handap ieu {{PLURAL:$5|parobahan}} ti <strong>$3, $4</strong> (nepi ka <strong>$1</strong> ditémbongkeun).",
        "rclistfromreset": "Rését pilihan kaping",
        "rclistfrom": "Témbongkeun nu anyar robah nepi ka $3 $2",
        "upload-preferred": "Tipeu koropak nu dianjurkeun: $1.",
        "upload-prohibited": "{{PLURAL:$2|Jinis}} berkas nu dilarang: $1.",
        "uploadlogpage": "Log unggahan",
-       "uploadlogpagetext": "Di handap mangrupa daptar muatan koropak nu panganyarna. Titimangsa nu katémbong dumasar titimangsa server.",
-       "filename": "Ngaran koropak",
+       "uploadlogpagetext": "Di handap téh daptar unjalan berkas panganyarna. \nTémbong [[Special:NewFiles|galéri berkas anyar]] pikeun pidangan visual.",
+       "filename": "Ngaran berkas",
        "filedesc": "Ringkesna",
        "fileuploadsummary": "Ringkesan:",
        "filereuploadsummary": "Parobahan berkas:",
        "filesource": "Sumber:",
        "ignorewarning": "Ulah diwaro, simpen baé koropakna.",
        "ignorewarnings": "Tong diwaro panginget naon baé",
-       "minlength1": "Ngaran koropak sahanteuna kudu diwangun ku hiji aksara.",
-       "illegalfilename": "Ngaran koropak \"$1\" ngandung aksara nu teu diwenangkeun pikeun judul kaca. Mangga gentos ngaranna tur cobi muatkeun deui.",
+       "minlength1": "Ngaran koropak sahenteuna ngandung sahurup.",
+       "illegalfilename": "Ngaran berkas \"$1\" ngandung aksara nu teu diwenangkeun pikeun judul kaca. Mangga ganti ngaranna tur coba unjal deui.",
        "filename-toolong": "Ngaran berkas teu meunang leuwih ti 240 bit.",
        "badfilename": "Ngaran gambar geus dirobah jadi \"$1\".",
        "filetype-mime-mismatch": "Éksténsi berkas \".$1\" teu luyu jeung tipeu MIME anu kadetéksi ti berkas ($2).",
        "unknown-error": "Aya kasalahan anu teu dikanyahoankeun.",
        "tmp-create-error": "Teu bisa nyieun berkas sementara.",
        "tmp-write-error": "Éror nulis berkas sementara.",
-       "large-file": "Hadéna mah koropak nu dimuat téh teu leuwih ti $1 bit; ieu koropak gedéna $2 bit.",
-       "largefileserver": "Ieu koropak badag teuing, ngaleuwihan wates nu diwenangkeun ku server.",
-       "emptyfile": "Koropak nu dimuatkeun ku anjeun jigana kosong. Hal ieu bisa jadi alatan sarupaning ''typo'' na ngaran koropakna. Mangga parios deui yén anjeun leres-leres hoyong ngamuat koropak éta.",
+       "large-file": "Alusna mah ukuran berkas téh teu leuwih ti $1;\nari ieu berkas $2.",
+       "largefileserver": "Ieu berkas leuwih badag tina nu diwenangkeun ku sérver.",
+       "emptyfile": "Berkas nu diunjal ku anjeun jigana mah kosong. Ieu perkara meureun alatan salah ketik dina ngaran berkasna. Pék pastikeun yén anjeun téh bener-bener hayang ngunjal éta berkas.",
        "windows-nonascii-filename": "Ieu wiki teu ngarojong ngaran berkas anu maké aksara husus.",
        "fileexists": "Berkas nu ngaranna kieu geus aya, mangga parios <strong>[[:$1]]</strong> mun {{GENDER:|anjeun}} teu yakin rék ngaganti.\n[[$1|thumb]]",
        "fileexists-extension": "Geus aya berkas anu ngaranna sarupa: [[$2|thumb]]\n* Ngaran berkas nu dimuat: <strong>[[:$1]]</strong>\n* Ngaran berkas nu geus aya: <strong>[[:$2]]</strong>\nPilih ngaran séjén.",
        "file-deleted-duplicate": "Berkas anu sarua jeung [[:$1]] geus kungsi dihapus.\nPariksa heula jujutan hapusanana saméméh neruskeun ngamuat deui éta berkas.",
        "uploadwarning": "Pépéling ngamuat",
        "uploadwarning-text": "Ropéa pedaran berkas di handap terus cobaan deui.",
-       "savefile": "Simpen koropak",
+       "savefile": "Simpen berkas",
        "uploaddisabled": "Punten, ngamuat ayeuna ditumpurkeun.",
        "copyuploaddisabled": "Unggahan dumasar URL ditumpurkeun.",
-       "uploaddisabledtext": "Fungsi ngamuat koropak ditumpurkeun.",
-       "uploadscripted": "Koropak ieu ngandung kode HTML atawa skrip nu bisa dibaca ngaco ku panyungsi ramat (''web browser'').",
+       "uploaddisabledtext": "Fungsi ngunjal berkas ditumpurkeun.",
+       "uploadscripted": "Ieu berkas ngandung kodeu HTML atawa skrip nu bisa dibaca ngaco ku panyungsi ramat.",
        "uploaded-setting-href-svg": "Maké tag \"sét\" pikeun nambahkeun atribut \"href\" kana élemén utama dipeungpeuk.",
        "uploadinvalidxml": "XML na berkas nu diunjal teu bisa didadarkeun.",
        "uploadvirus": "Koropakna ngandung virus! Katrangan: $1",
-       "upload-source": "Koropak sumber",
-       "sourcefilename": "Ngaran koropak sumber:",
+       "upload-source": "Berkas sumber",
+       "sourcefilename": "Ngaran berkas sumber:",
        "sourceurl": "URL sumber:",
-       "destfilename": "Ngaran koropak tujuan:",
-       "upload-maxfilesize": "Ukuran koropak panggedéna: $1",
-       "upload-description": "Pedaran koropak",
+       "destfilename": "Ngaran berkas tujuan:",
+       "upload-maxfilesize": "Ukuran maksimum berkas: $1",
+       "upload-description": "Pedaran berkas",
        "upload-options": "Pilihan muat",
        "watchthisupload": "Awaskeun ieu kaca",
-       "filewasdeleted": "Ngaran koropak ieu geus di hapus. Anjeun kudu ningali ka $1 sa acan muatkeun koropak deui",
+       "filewasdeleted": "Berkas nu ngaranna kieu pernah diunjal sarta tuluy dipupus. Pék riksa heula $1 saméméh ngunjal éta berkas téh.",
        "upload-proto-error": "Salah protokol",
        "upload-file-error": "Kasalahan internal",
        "upload-misc-error": "Kasalahan muat anu teu kanyahoan",
        "upload-http-error": "Aya galat HTTP: $1",
        "upload-copy-upload-invalid-domain": "Unjalan téplakan teu sayaga ti ieu domain.",
        "upload-foreign-cant-upload": "Ieu wiki teu diatur pikeun ngunjal berkas ka gudang panyindangan asing.",
+       "upload-dialog-disabled": "Unjal berkas maké ieu dialog dipareuman di ieu wiki.",
        "upload-dialog-title": "Unjal berkas",
        "upload-dialog-button-cancel": "Bolay",
        "upload-dialog-button-back": "Balik deui",
        "upload-dialog-button-upload": "Unjal",
        "upload-form-label-infoform-title": "Wincikan",
        "upload-form-label-infoform-name": "Ngaran",
+       "upload-form-label-infoform-name-tooltip": "Judul déskriptif anu unik pikeun berkas, anu bakal miboga fungsi minangka ngaran berkas. Anjeun bisa maké basa basajan kalawan spasi. Ulah ngawuwuhkeun éksténsi berkas",
        "upload-form-label-infoform-description": "Pedaran",
        "upload-form-label-usage-title": "Pamakéan",
        "upload-form-label-usage-filename": "Ngaran berkas",
        "upload-form-label-own-work": "Ieu mah karya kuring sorangan",
        "upload-form-label-infoform-categories": "Kategori",
        "upload-form-label-infoform-date": "Ping",
+       "upload-form-label-not-own-work-local-generic-local": "Sugan anjeun hayang nyoba [[Special:Upload|kaca unjalan baku]].",
        "backend-fail-stream": "Teu bisa malidkeun berkas \"$1\"",
        "backend-fail-backup": "Teu bisa nyadangkeun berkas \"$1\".",
        "backend-fail-notexists": "Berkas $1 euweuh.",
        "backend-fail-read": "Teu bisa maca berkas $1.",
        "backend-fail-create": "Teu bisa nulis berkas \"$1\".",
        "backend-fail-maxsize": "Teu bisa nulis berkas \"$1\" kusabab leuwih ti {{PLURAL:$2|hiji bit|$2 bit}}.",
+       "backend-fail-synced": "Berkas \"$1\" mah aya dina kaayaan teu konsistén di panyimpenan internal",
        "backend-fail-connect": "Teu bisa nyambungkeun kana panyimpenan backend \"$1\".",
        "backend-fail-internal": "Aya kasalahan nu teu dipikawanoh di backend panyimpenan \"$1\".",
        "backend-fail-contenttype": "Teu bisa nangtukeun tipeu eusi berkas anu badé disimpen di \"$1\".",
+       "filejournal-fail-dbconnect": "Teu bisa nyambung ka basisdata jurnal pikeun panyimpenan ''backend'' \"$1\".",
+       "filejournal-fail-dbquery": "Teu bisa nganyarkeun basisdata jurnal pikeun panyimpenan ''backend'' \"$1\".",
        "lockmanager-notlocked": "Teu bisa muka konci \"$1\" kusabab teu dikonci.",
        "lockmanager-fail-closelock": "Teu bisa nutup berkas konci pikeun \"$1\".",
        "lockmanager-fail-deletelock": "Teu bisa ngahapus berkas konci pikeun \"$1\".",
        "lockmanager-fail-acquirelock": "Teu bisa meunang pangoncian pikeun \"$1\"",
        "lockmanager-fail-openlock": "Teu bisa muka berkas konci pikeun \"$1\".",
        "lockmanager-fail-releaselock": "Teu bisa ngaleupaskeun konci pikeun \"$1\".",
+       "lockmanager-fail-db-bucket": "Teu bisa ngagero konci basis data nu cukup dina karanjang $1.",
        "lockmanager-fail-db-release": "Teu bisa ngaleupaskeun konci dina databés $1.",
        "lockmanager-fail-svr-acquire": "Gagal nyokot konci di servér $1.",
        "lockmanager-fail-svr-release": "Teu bisa ngaleupaskeun konci dina server $1.",
        "uploadstash-errclear": "Mersihan berkas nu garagal.",
        "uploadstash-refresh": "Nyegerken deui daptar berkas",
        "uploadstash-thumbnail": "tempo miniatur",
+       "uploadstash-exception": "Teu bisa nyimpen unjalan di panyimpenan ($1): \"$2\".",
+       "invalid-chunk-offset": "Opsét potongan teu valid",
        "img-auth-accessdenied": "Aksés ditolak",
+       "img-auth-badtitle": "Teu bisa nyieun judul nu valid tina \"$1\".",
+       "img-auth-nologinnWL": "Anjeun teu asup log sarta \"$1\" teu dina daptar bodas.",
        "img-auth-nofile": "Berkas \"$1\" henteu aya.",
+       "img-auth-isdir": "Anjeun nyoba ngaksés diréktori \"$1\".\nNgan aksés berkas wungkul nu diwenangkeun.",
        "img-auth-streaming": "Palidan \"$1\".",
        "img-auth-noread": "Pamaké teu boga kawenangan maca \"$1\".",
        "http-invalid-url": "URL teu bener: $1",
        "http-invalid-scheme": "URL kalawan skéma \"$1\" teu dirojong.",
+       "http-request-error": "Pundutan HTTP gagal alatan kasalahan nu teu dipikanyaho.",
        "http-read-error": "Kasalahan maca HTTP.",
        "http-timed-out": "Pamundutan HTTP béakeun waktu.",
        "http-curl-error": "Kasalahan keur nyokot URL: $1",
        "filehist-nothumb": "Taya miniatur",
        "filehist-user": "Kontributor",
        "filehist-dimensions": "Ukuran",
-       "filehist-filesize": "Ukuran koropak",
+       "filehist-filesize": "Ukuran berkas",
        "filehist-comment": "Kamandang",
        "imagelinks": "Pamakéan berkas",
        "linkstoimage": "Kaca ieu  {{PLURAL:$1|numbu|$1 numbu}} ka gambar ieu :",
        "nolinkstoimage": "Teu aya kaca anu nutumbu ka ieu berkas.",
        "linkstoimage-redirect": "$1 (pangalihan berkas) $2",
-       "sharedupload": "Ieu koropak téh ti $1 nu bisa jadi dipaké ku proyék-proyék lianna.",
+       "sharedupload": "Ieu berkas téh ti $1 jeung meureun dipaké ku proyék-proyék séjén.",
        "sharedupload-desc-here": "Ieu berkas asalna ti $1 anu bisa jadi dipaké ku proyék séjén. \nPedaran ti [$2 kaca pedaranana] dipidangkeun di handap.",
        "filepage-nofile": "Taya berkas nu ngaranna kieu.",
+       "filepage-nofile-link": "Taya berkan nu ngaranna kieu, tapi anjeun bisa [$1 ngunjalkeunna].",
        "uploadnewversion-linktext": "ngamuatkeun vérsi anyar koropak ieu",
        "shared-repo-from": "ti $1",
        "shared-repo": "hiji répositori réréongan",
        "filerevert-submit": "Balikkeun",
        "filerevert-success": "'''[[Media:$1|$1]]''' geus dipulangkeun ka [vérsi $4, $3, $2].",
        "filerevert-badversion": "Euweuh vérsi lokal tiheula ti koropak ieu kalawan cap waktu anu dimaksud.",
+       "filerevert-identical": "Vérsi berkas ayeuna geus idéntik jeung berkas nu dipilih.",
        "filedelete": "Ngahapus $1",
        "filedelete-legend": "Ngahapus gambar",
        "filedelete-intro": "Anjeun rék ngahapus koropak '''[[Media:$1|$1]]''' katut sagala jujutanana.",
        "emailuserfooter": "Ieu surélék dikirim ku $1 ka $2 migunakeun fungsi \"Surélékan pamaké ieu\" di {{SITENAME}}.",
        "usermessage-summary": "Ninggalkeun talatah sistim.",
        "usermessage-editor": "Talatah sistim",
-       "watchlist": "Awaskeuneun",
-       "mywatchlist": "Awaskeuneun",
+       "watchlist": "Daptar awaseun",
+       "mywatchlist": "Daptar awaseun",
        "watchlistfor2": "Pikeun $1 $2",
-       "nowatchlist": "Anjeun teu boga awaskeuneun.",
+       "nowatchlist": "Anjeun teu boga kaca na daptar awaseun.",
        "watchlistanontext": "Mangga asup log pikeun nempo atawa ngarobah béréndélan awaskeuneun anjeun.",
        "watchnologin": "Can asup log",
        "addwatch": "Tambahkeun ka aawaseun",
        "addedwatchtext": "Kaca \"[[:$1]]\" geus ditambahkeun ka [[Special:Watchlist|awaskeuneun]] anjeun.\nJaga, parobahan na kaca ieu katut kaca obrolanana bakal dibéréndélkeun di dinya, sarta kacana bakal katémbong '''dikandelan''' dina kaca [[Special:RecentChanges|Nu anyar robah]] sangkan leuwih gampang ngawaskeunana.\n\n<p>Mun jaga anjeun moal deui ngawaskeun parobahan na kaca éta, klik tumbu \"Eureun ngawaskeun\" na lajursisi.",
        "addedwatchtext-short": "Kaca \"$1\" geus ditambahkeun kana daptar aawaseun anjeun.",
-       "removewatch": "Piceun tina béréndélan awaskeuneun",
+       "removewatch": "Piceun tina daptar awaseun",
        "removedwatchtext": "Kaca \"[[:$1]]\" geus dikaluarkeun tina [[Special:Watchlist|daptar awaskeuneun]] anjeun.",
        "removedwatchtext-short": "Kaca \"$1\" geus dipiceun tina béréndélan awaskeuneun.",
        "watch": "awaskeun",
        "wlshowhidepatr": "éditan karoris",
        "wlshowhidemine": "éditan kuring",
        "wlshowhidecategorization": "kategorisasi kaca",
-       "watchlist-options": "Pilihan awaskeuneun",
+       "watchlist-options": "Opsi daptar awaseun",
        "watching": "Ngawaskeun...",
        "unwatching": "Eureun ngawaskeun...",
+       "watcherrortext": "Aya kasalahan mangsa ngarobah préférénsi daptar awaskeuneun anjeun pikeun \" $1 \".",
        "enotif_reset": "Tandaan sadaya kaca nu geus dilongok",
        "enotif_impersonal_salutation": "Pamaké {{SITENAME}}",
        "enotif_subject_deleted": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dihapus}} ku $2",
+       "enotif_subject_created": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dijieun}} ku $2",
+       "enotif_subject_moved": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dialihkeun}} ku $2",
+       "enotif_subject_restored": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dibalikkeun}} ku $2",
+       "enotif_subject_changed": "Kaca {{SITENAME}} $1 geus {{GENDER:$2|dirobah}} ku $2",
        "enotif_lastvisited": "Pikeun sakumna parobahan ti saprak jebulan panungtung, tempo $1",
        "enotif_lastdiff": "Pikeun nempo parobahan, ilikan $1",
        "enotif_anon_editor": "pamaké anonim $1",
        "protectedarticle": "ngonci $1",
        "modifiedarticleprotection": "hambalan koncian \"[[$1]]\" geus dirobah",
        "unprotectedarticle": "muka konci tina \"[[$1]]\"",
+       "movedarticleprotection": "ngalihkeun pangaturan protéksi ti \"[[$2]]\" ka \"[[$1]]\"",
        "protectedarticle-comment": "{{GENDER:$2|Nangtayungan}} \"[[$1]]\"",
+       "modifiedarticleprotection-comment": "{{GENDER:$2|Ngarobah tingkat panangtayungan}} pikeun \"[[$1]]\"",
        "protect-title": "Ngonci \"$1\"",
        "protect-title-notallowed": "Tempo undak panangtayungan ti \"$1\"",
        "prot_1movedto2": "mindahkeun [[$1]] ka [[$2]]",
        "protect-badnamespace-title": "Ngaranspasi nu teu bisa ditangtayungan",
+       "protect-badnamespace-text": "Kaca dina ieu ngaranspasi teu bisa diprotéksi.",
        "protect-norestrictiontypes-title": "Kaca nu teu karaksa",
        "protect-legend": "Konfirmasi ngonci",
        "protectcomment": "Alesan:",
        "year": "Ti taun (jeung saméméhna):",
        "sp-contributions-newbies": "Témbongkeun kontribusi ti akun anyar wungkul",
        "sp-contributions-newbies-sub": "Pikeun akun anyar",
+       "sp-contributions-newbies-title": "Kontribusi pamaké pikeun akun anyar",
        "sp-contributions-blocklog": "log peungpeuk",
-       "sp-contributions-deleted": "kontribusi nu dihapus",
+       "sp-contributions-suppresslog": "kontribusi {{GENDER:$1|pamaké}} nu disamunikeun",
+       "sp-contributions-deleted": "kontribusi {{GENDER:$1|pamaké}} nu dipupus",
        "sp-contributions-uploads": "unggahan",
        "sp-contributions-logs": "log",
        "sp-contributions-talk": "obrolan",
-       "sp-contributions-userrights": "ngatur hak pamaké",
+       "sp-contributions-userrights": "Ménéjemén hak aksés {{GENDER:$1|pamaké}}",
        "sp-contributions-blocked-notice": "Ieu pamaké keur dipeungpeuk.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
        "sp-contributions-blocked-notice-anon": "Ieu alamat IP keur dipeungpeuk.\nPikeun rujukan, éntri log panungtung dipidangkeun di handap:",
        "sp-contributions-search": "Paluruh kontribusi",
        "ipboptions": "2 jam:2 hours,sapoé:1 day,3 poé:3 days,saminggu:1 week,2 minggu:2 weeks,sabulan:1 month,3 bulan:3 months,6 bulan:6 months,sataun:1 year,tanpa wates:infinite",
        "ipbhidename": "Sumputkeun ngaran pamaké tina éditan jeung daptar pamaké",
        "ipbwatchuser": "Awaskeun kaca pamaké jeung kaca obrolan pamaké ieu",
+       "ipb-disableusertalk": "Cegah ieu pamaké pikeun ngédit kaca obrolan manéhns sorangan nalika dipeunpeuk",
+       "ipb-change-block": "Peungpeuk deui pamaké kalawan sét konfigurasi ieu",
        "ipb-confirm": "Konfirmasi peungpeuk",
        "badipaddress": "Alamat IP teu sah",
        "blockipsuccesssub": "Meungpeuk geus hasil",
-       "blockipsuccesstext": "\"$1\" dipeungpeuk.\n<br />Tempo [[Special:BlockList|daptar peungpeuk IP]] pikeun nempoan deui peungpeuk.",
+       "blockipsuccesstext": "[[Special:Contributions/$1|$1]] geus dipeungpeuk.<br />\nTempo [[Special:BlockList|daptar peungpeukan]] pikeun niténan deui pameungpeukan.",
+       "ipb-blockingself": "Anjeun rék meungpeuk manéh! Yakin yeuh rék ngalakukeun kitu?",
        "ipb-edit-dropdown": "Édit alesan meungpeuk",
        "ipb-unblock-addr": "Buka peungpeuk $1",
        "ipb-unblock": "Nyabut peungpeuk pamaké atawa alamat IP",
        "blocklist-userblocks": "Sumputkeun peungpeukan akun",
        "blocklist-tempblocks": "Sumputkeun peungpeukan saheulaanan",
        "blocklist-addressblocks": "Sumputkeun pameungpeukan IP tunggal",
+       "blocklist-rangeblocks": "Nyumputkeun hontalan peungpeuk",
        "blocklist-timestamp": "Cap titimangsa",
        "blocklist-target": "Udagan",
        "blocklist-expiry": "Kadaluwarsa",
        "change-blocklink": "Robah status blokir",
        "contribslink": "kontribusi",
        "emaillink": "kirim surélék",
-       "autoblocker": "Otomatis dipeungpeuk kusabab alamat IP anjeun dipaké ku \"[[User:$1|$1]]\".\nAlesan: \"$2\"",
+       "autoblocker": "Otomatis dipeungpeuk kusabab alamat IP anjeun dipaké ku \"[[User:$1|$1]]\".\nAlesan nu dibikeun pikeun pameungpeukan nyaéta: \"$2\"",
        "blocklogpage": "Log_peungpeuk",
        "blocklog-showlog": "Ieu pamaké saméméhna geus kungsi dipeungpeuk.\nPikeun rujukan, logna dipidangkeun di handap ieu:",
        "blocklogentry": "meungpeuk [[$1]] nepi ka $2 $3",
-       "blocklogtext": "Ieu mangrupa log peta meungpeuk jeung muka peungpeuk pamaké, teu kaasup alamat IP nu dipeungpeukna otomatis. Tempo [[Special:BlockList|daptar peungpeuk IP]] pikeun daptar cegahan jeung peungpeuk.",
+       "reblock-logentry": "ngarobah peungpeukan [[$1]] kalawan waktu kadaluwarsa $2 $3",
+       "blocklogtext": "Ieu mangrupa log peta meungpeuk jeung muka peungpeuk pamaké, teu kaasup alamat IP nu dipeungpeukna otomatis. Tempo [[Special:BlockList|daptar peungpeuk]] pikeun daptar cegahan jeung peungpeuk.",
        "unblocklogentry": "peungpeuk dibuka \"$1\"",
        "block-log-flags-anononly": "pamaké anonim wungkul",
        "block-log-flags-nocreate": "teu bisa nyieun akun",
        "range_block_disabled": "Pangabisa kuncén pikeun nyieun sarupaning peungpeuk geus ditumpurkeun.",
        "ipb_expiry_invalid": "Wanci daluwarsa teu bener.",
        "ipb_expiry_old": "Waktu kadaluwarsana mah baheula.",
+       "ipb_expiry_temp": "Pameungpeukan sandiasma nu samunikeun kudu permanén.",
        "ipb_already_blocked": "\"$1\" geus dipeungpeuk",
        "ipb-needreblock": "$1 geus dipeungpeuk. Rék dirobah sétinganana?",
        "ipb-otherblocks-header": "{{PLURAL:$1|Peungpeuk|Peungpeuk}} lianna",
        "unlockdbsuccesstext": "pangkalan data geus teu dikonci.",
        "databaselocked": "Basis data geus kakonci.",
        "databasenotlocked": "Gudang data teu kakonci.",
+       "lockedbyandtime": "(ku $1 dina $2 $3)",
        "move-page": "Pindahkeun $1",
        "move-page-legend": "Pindahkeun kaca",
        "movepagetext": "Migunakeun formulir di handap bakal ngaganti ngaran hiji kaca, mindahkeun sadaya jujutanana ka ngaran anyar.\nJudul nu heubeul bakal jadi kaca alihan ka judul nu anyar.\nAnjeun bisa menerkeun alihan nu nujul ka judul asli sacara otomatis.\nMun henteu, pariksa bisi aya [[Special:DoubleRedirects|alihan ganda]] atawa [[Special:BrokenRedirects|buntu]]\nAnjeun tanggel waler pikeun mastikeun yén tumbu-tumbu tetep nujul ka tempat nu sakuduna dituju.\n\nCatet yén kacana '''moal''' pindah mun judul nu anyar geus aya eusian, kajaba mangrupa alihan sarta teu mibanda jujutan.\nIeu ngandung harti yén anjeun bisa ngaganti ngaran hiji kaca balik deui ka nu cikénéh diganti ngaranna mun anjeun nyieun kasalahan, sarta anjeun teu bisa nimpah kaca nu geus aya.\n\n'''AWAS!'''\nIeu parobahan bisa gedé pangaruhna mun dilarapkeun kana kaca anu payu;\nanjeun kudu bener-bener ngarti kana hal ieu.",
        "cant-move-subpages": "Anjeun teu miboga hak aksés pikeun ngalihkeun subkaca.",
        "namespace-nosubpages": "Ngaranspasi \"$1\" teu ngidinan subkaca.",
        "newtitle": "Judul anyar:",
-       "move-watch": "Awaskeuneun kaca ieu",
+       "move-watch": "Aawas kaca sumber jeung kaca targét",
        "movepagebtn": "Pindahkeun kaca",
        "pagemovedsub": "Mindahkeun geus hasil!",
        "movepage-moved": "'''\"$1\" geus dipindahkeun ka \"$2\"'''",
        "movenosubpage": "Ieu kaca teu boga subkaca.",
        "movereason": "Alesan:",
        "revertmove": "balikkeun",
-       "delete_and_move_text": "==Merlukeun hapusan==\n\nArtikel nu dituju \"[[:$1]]\" geus aya. Badé dihapus baé sangkan bisa mindahkeun?",
+       "delete_and_move_text": "Kaca nu ditojo \"[[:$1]]\", geus eusian.\nAnjeun rék mupusna pikeun méré lolongkran keur pangalihan?",
        "delete_and_move_confirm": "Enya, hapus kaca éta",
-       "delete_and_move_reason": "Hapus sangkan bisa mindahkeun",
+       "delete_and_move_reason": "Dipupus pikeun ngantisipasi pangalihan kaca ti \"[[$1]]\"",
        "selfmove": "Judul sumber jeung tujuanana sarua, lain gé mindahkeun atuh!",
+       "immobile-source-namespace": "Teu bisa ngalihkeun kaca dina ngaranspasi \"$1\".",
+       "immobile-target-namespace": "Teu bisa ngalihkeun kaca ka ngaranspasi \"$1\".",
        "immobile-target-namespace-iw": "Tutumbu interwiki teu bisa dipaké salaku tujul pamindahan.",
        "immobile-source-page": "Ieu kaca teu bisa dipindahkeun.",
        "immobile-target-page": "Teu bisa mindahkeun ka judul nu ditujul.",
        "djvu_page_error": "Kaca DjVu teu kawadahan",
        "djvu_no_xml": "Hanteu bisa nyokot XML pikeun berkas DjVu",
        "thumbnail-temp-create": "Teu bisa nyieun berkas leutik témporer",
+       "thumbnail-dest-create": "Teu bisa nyimpen berkas leutik ka tujuan",
        "thumbnail_invalid_params": "Kasalahan paraméter miniatur",
        "thumbnail_toobigimagearea": "Berkas kalawan diménsi leuwih badag batan $1",
        "thumbnail_dest_directory": "Diréktori nu dituju teu bisa dijieun",
        "import-interwiki-submit": "Impor",
        "import-mapping-default": "Impor ka lokasi standar",
        "import-mapping-namespace": "Impor ka ngaranspasi:",
+       "import-mapping-subpage": "Impor minangka subkaca ti kaca di handap:",
        "import-upload-filename": "Ngaran berkas:",
        "import-comment": "Ringkesan:",
-       "importtext": "Mangga ékspor koropakna ti sumber nu dipaké ku wiki migunakeun fungsi Special:Export, simpen na piringan anjeun, teras muatkeun di dieu.",
+       "importtext": "Mangga ékspor koropakna ti sumber nu dipaké ku wiki ngagunakeun [[Special:Export|fungsi ékspor]], simpen na piringan anjeun, teras muatkeun di dieu.",
        "importstart": "Ngimpor kaca...",
        "import-revision-count": "$1 {{PLURAL:$1|vérsi heubeul}}",
        "importnopages": "henteu aya kaca keur diimpor.",
+       "imported-log-entries": "Geus diimpor $1 {{PLURAL:$1|saéntri log|éntri log}}.",
        "importfailed": "Ngimpor gagal: $1",
        "importunknownsource": "Tipeu sumber impor teu dipikawanoh",
-       "importcantopen": "Teu bisa muka koropak impor",
+       "importcantopen": "Teu bisa muka berkas impor",
        "importbadinterwiki": "Tutumbu antarwiki awon",
        "importsuccess": "Ngimpor geus hasil!",
-       "importnosources": "Teu aya sumber impor transwiki nu geus dijieun tur ngamuat jujutan sacara langsung geus dinon-aktifkeun.",
-       "importnofile": "Euweuh koropak impor nu dimuat.",
-       "importuploaderrorsize": "Koropak impor gagal dimuat. Ukuranana ngaleuwihan wates nu diwenangkeun.",
-       "importuploaderrorpartial": "Koropak impor gagal dimuat sagemblengna.",
-       "importuploaderrortemp": "Koropak impor gagal dimuat. Folder samentarana leungit.",
+       "importnosources": "Taya wiki ti nu diimpor nu geus dijieun sarta pamuatan jujuta sacara langsung geus di non-aktifkeun.",
+       "importnofile": "Euweuh berkas impor nu diunjal.",
+       "importuploaderrorsize": "Unjalan berkas impor gagal. Ukuranna ngaleuwihan wates nu diwenangkeun.",
+       "importuploaderrorpartial": "Unjalan berkas impor gagal.\nNgan sawaréh berkas nu ngahasil diunjal.",
+       "importuploaderrortemp": "Unjalan berkas impor gagal. Folder témporérna leungit.",
        "import-parse-failure": "Prosés impor XML teu hasil",
        "import-noarticle": "Euweuh kaca imporeun!",
        "import-nonewrevisions": "Euweuh révisi nu diimpor (sakum révisi geus aya atawa diliwatan lantaran kasalahan).",
        "import-logentry-interwiki-detail": "$1 {{PLURAL:$1|sarévisi|révisi}} diimpor ti $2",
        "javascripttest": "Nguji JavaScript",
        "javascripttest-pagetext-unknownaction": "Tarékah \"$1\" teu dipikanyaho.",
+       "javascripttest-qunit-intro": "Tempo [$1 dokuméntasi pangujian] di mediawiki.org.",
        "tooltip-pt-userpage": "Kaca {{GENDER:|pamaké anjeun}}",
        "tooltip-pt-anonuserpage": "Kaca pamaké pikeun IP nu ku anjeun keur diédit",
        "tooltip-pt-mytalk": "Kaca obrolan {{GENDER:|anjeun}}",
        "spamprotectiontext": "Kaca anu rék disimpen dipeungpeuk ku saringan spam.\nSigana mah ieu téh alatan tutumbu ka loka luar anu dibléklis.",
        "spamprotectionmatch": "Teks di handap ieu mancing saringan spam kami: $1",
        "spambot_username": "Pamersihan spam MediaWiki",
+       "spam_reverting": "Ngabolaykeun ka vérsi panungtung nu teu mibanda tutumbu ka $1",
+       "spam_blanking": "Sakum révisi nu mibanda tutumbu ka $1, kosong",
+       "spam_deleting": "Sakum révisi nu mibanda tutumbu ka $1, pamupusan",
        "simpleantispam-label": "Pamariksaan anti-spam.\nAnu ieu <strong>ulah</strong> dieusian!",
        "pageinfo-title": "Émbaran pikeun \"$1\"",
+       "pageinfo-not-current": "Hampura, teu mumkin méré ieu informasi ka révisi heubeul.",
        "pageinfo-header-basic": "Émbaran dasar",
        "pageinfo-header-edits": "Jujutan édit",
        "pageinfo-header-restrictions": "Protéksi kaca",
        "pageinfo-edits": "Jumlah éditan",
        "pageinfo-authors": "Jumlah kontributor nu béda",
        "pageinfo-recent-edits": "Jumlah éditan kiwari (dina $1 panungtung)",
+       "pageinfo-recent-authors": "Jumlah panulis béda kiwari",
+       "pageinfo-magic-words": "{{PLURAL:$1|Sakecap|Kecap}} ajaib ($1)",
+       "pageinfo-hidden-categories": "{{PLURAL:$1|Sakategori|Kategori}} nyamuni ($1)",
+       "pageinfo-templates": "{{PLURAL:$1|Sacitakan|citakan}} nu ditransklusi ($1)",
        "pageinfo-toolboxlink": "Émbaran kaca",
        "pageinfo-redirectsto": "Alihkeun ka",
        "pageinfo-redirectsto-info": "info",
        "pageinfo-contentpage": "Diitung minangka kaca eusi",
        "pageinfo-contentpage-yes": "Enya",
+       "pageinfo-protect-cascading": "Panangtayungan ngaruntuy ti dieu",
        "pageinfo-protect-cascading-yes": "Enya",
+       "pageinfo-protect-cascading-from": "Panangtayungan mapay ti",
        "pageinfo-category-info": "Info kategori",
        "pageinfo-category-total": "Jumlah anggahota",
        "pageinfo-category-pages": "Jumlah kaca",
        "pageinfo-user-id": "ID pamaké",
        "markaspatrolleddiff": "Tandaan salaku geus diriksa",
        "markaspatrolledtext": "Tandaan artikel ieu salaku geus diriksa",
+       "markaspatrolledtext-file": "Tandaan vérsi berkas minangka kaawas",
        "markedaspatrolled": "Tandaan salaku geus diriksa",
        "markedaspatrolledtext": "Révisi [[:$1]] nu dipilih geus ditandaan salaku geus diroris.",
        "rcpatroldisabled": "Ronda Nu Anyar Robah ditumpurkeun",
        "markedaspatrollederror": "Teu bisa nandaan geus dipatroli",
        "markedaspatrollederrortext": "Anjeun kudu milih révisi anu rék ditandaan geus diroris.",
        "markedaspatrollederror-noautopatrol": "Anjeung teu diwenangkeun nandaan pangriksa ka éditan sorangan.",
+       "markedaspatrollednotify": "Ieu parobahan pikeun $1 geus ditandaan kaawas.",
+       "markedaspatrollederrornotify": "Nandaan minangka kaawas gagal.",
        "patrol-log-page": "Log patroli",
        "patrol-log-header": "Ieu minangka log pikeun révisi nu geus diroris.",
        "log-show-hide-patrol": "$1 log rorisan",
        "log-show-hide-tag": "log tag $1",
        "confirm-markpatrolled-button": "Heug",
+       "confirm-markpatrolled-top": "Tandaan révisi $3 ti $2 minangka kaawas?",
        "deletedrevision": "Révisi heubeul nu dihapus $1",
        "filedeleteerror-short": "Éror nalika ngahapus koropak $1",
        "filedeleteerror-long": "Aya kasalahan sawaktu ngahapus koropak:\n\n$1",
        "svg-long-error": "Berkas SVG teu sah: $1",
        "show-big-image": "Berkas asli",
        "show-big-image-preview": "Ukuran ieu pramidang: $1.",
+       "show-big-image-preview-differ": "Ukuran ieu pramidang $3 ti ieu berkas $2: $1",
        "show-big-image-other": "{{PLURAL:$2|Resolusi}} lianna: $1.",
        "show-big-image-size": "$1 × $2 pixel",
        "file-info-gif-looped": "nguriling",
        "yesterday-at": "Kamari jam $1",
        "bad_image_list": "Formatna kieu:\n\nNgan daptar butiran (baris anu dimimitian ku tanda *) anu diitung. \nTutumbu kahiji dina hiji baris dianggap numbu ka berkas anu goréng. \nTutumbu sanggeusna dina baris anu sarua dianggap bener, nyaéta artikel anu midangkeun éta berkas.",
        "metadata": "Métadata",
-       "metadata-help": "Ieu koropak ngandung émbaran tambahan, nu sigana asalna tina kaméra digital atawa paminday nu dipaké pikeun ngadigitalkeunana. Mun ieu koropak geus dirobah tina bentuk aslina, datana bisa jadi teu bener.",
+       "metadata-help": "Ieu berkas ngandung informasi panambah, mumkin ditambahkeun tina kaméra digital atawa pamindéy nu dipaké pikeun nyieun atawa ngadigitalkeun ieu berkas.\nMun ieu berkas geus diropéa tina wangun aslina, sawatara wincikan meureun baé teu sagemblengna ngarépléksikeun informasi ti ieu berkas nu diropéa téh.",
        "metadata-expand": "Témbongkeun wincikan panambah",
        "metadata-collapse": "Sumputkeun wincikan panambah",
        "metadata-fields": "Widang métadata gambar nu dibéréndélkeun di handap bakal dipidangkeun dina kaca gambar mun tabél métadata disumputkeun.\nNu séjénna bakal disumputkeun sakumaha asalna.\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-fixtureidentifier": "Ngaran fikstur",
        "exif-locationdest": "Lokasi nu digambarkeun",
        "exif-locationdestcode": "Kodeu lokasi nu digambarkeun",
+       "exif-objectcycle": "Sésa waktu éta média dimaksudkeun pikeun",
+       "exif-contact": "Informasi kontak",
        "exif-writer": "Nu nulis",
        "exif-languagecode": "Basa",
        "exif-iimversion": "Vérsi IIM",
        "exif-originalimageheight": "Jangkung gambar saméméh diteukteuk",
        "exif-originalimagewidth": "Lébar gambar saméméh diteukteuk",
        "exif-compression-1": "Teu kakompres",
+       "exif-compression-2": "CCITT Group 3 1-Dimensional Modified Huffman RLE",
+       "exif-compression-3": "CCITT Group 3 fax encoding",
+       "exif-compression-4": "CCITT Group 4 fax encoding",
        "exif-copyrighted-true": "Mihak cipta",
        "exif-copyrighted-false": "Status hak cipta can diatur",
+       "exif-photometricinterpretation-1": "Hideung jeung bodas (Hideung mah 0)",
        "exif-unknowndate": "Titimangsa teu kanyahoan",
        "exif-orientation-1": "Normal",
        "exif-orientation-2": "Dibalikkeun horizontal",
        "exif-subjectdistance-value": "$1 méter",
        "exif-meteringmode-0": "Duka",
        "exif-meteringmode-1": "Rata-rata",
+       "exif-meteringmode-2": "Rarata tengah bobot",
        "exif-meteringmode-3": "Spot",
        "exif-meteringmode-4": "MultiSpot",
        "exif-meteringmode-5": "Pola",
        "exif-lightsource-19": "Cahya baku C",
        "exif-lightsource-24": "Tungsten studio ISO",
        "exif-lightsource-255": "Sumber cahya séjén",
+       "exif-flash-fired-0": "Lampu kilat teu hurung",
        "exif-flash-fired-1": "Buricak hurung",
+       "exif-flash-return-0": "taya fungsi padétéksian strobo balik",
+       "exif-flash-return-2": "lampu strobo balik teu kadétéksi",
+       "exif-flash-return-3": "lampu strobo balik kadétéksi",
+       "exif-flash-mode-1": "lampu kilat diperlukeun",
+       "exif-flash-mode-2": "lampu kilat dipareuman",
        "exif-flash-mode-3": "modeu otomatis",
+       "exif-flash-function-1": "Taya fungsi lampu kilat",
+       "exif-flash-redeye-1": "mode réduksi pantulan panon-beureum",
        "exif-focalplaneresolutionunit-2": "inci",
        "exif-sensingmethod-1": "Teu kadéfinisi",
+       "exif-sensingmethod-2": "Sénsor aréa warna sasiki",
+       "exif-sensingmethod-3": "Sénsor aréa warna dua siki",
+       "exif-sensingmethod-4": "Sénsor aréa warna tilu siki",
+       "exif-sensingmethod-5": "Sénsor aréa warna mapay",
+       "exif-sensingmethod-7": "Sénsor trilinéar",
+       "exif-sensingmethod-8": "Sénsor linéar warna mapay",
+       "exif-filesource-3": "Kaméra digital cicing",
        "exif-scenetype-1": "Gambar poto langsung",
        "exif-customrendered-0": "Prosés normal",
        "exif-customrendered-1": "Prosés biasa",
        "exif-exposuremode-0": "Pajanan otomatis",
        "exif-exposuremode-1": "Pajanan manual",
+       "exif-exposuremode-2": "Brakét otomatis",
        "exif-whitebalance-0": "Kasaimbangan bodas otomatis",
        "exif-whitebalance-1": "Kasaimbangan bodas manual",
        "exif-scenecapturetype-0": "Baku",
        "exif-scenecapturetype-2": "Nangtung (portrait)",
        "exif-scenecapturetype-3": "Tetempoan peuting",
        "exif-gaincontrol-0": "Kosong",
+       "exif-gaincontrol-1": "Naikkeun fokus landeuh",
+       "exif-gaincontrol-2": "Naikkeun fokus luhur",
+       "exif-gaincontrol-3": "Turunkeun fokus landeuh",
+       "exif-gaincontrol-4": "Turunkeun fokus luhur",
        "exif-contrast-0": "Normal",
        "exif-contrast-1": "Leuleus",
        "exif-contrast-2": "Heuras",
        "exif-gpsaltitude-above-sealevel": "$1 {{PLURAL:$1|méter|méter}} luhureun beungeut laut",
        "exif-gpsaltitude-below-sealevel": "$1 {{PLURAL:$1|méter|méter}} handapeun beungeut laut",
        "exif-gpsstatus-a": "Keur ngukur",
+       "exif-gpsstatus-v": "Interoperabilitas pangukuran",
        "exif-gpsmeasuremode-2": "Ukuran 2-diménsi",
        "exif-gpsmeasuremode-3": "Ukuran 3-diménsi",
        "exif-gpsspeed-k": "Kilométer per jam",
        "exif-ycbcrpositioning-1": "Nengah",
        "exif-ycbcrpositioning-2": "Atas (co-sited)",
        "exif-dc-contributor": "Kontributor",
+       "exif-dc-coverage": "Lingkup témporal atawa spasial média",
        "exif-dc-date": "Titimangsa",
        "exif-dc-publisher": "Pamedal",
        "exif-dc-relation": "Média anu tumali",
        "exif-urgency-normal": "Normal ($1)",
        "exif-urgency-low": "Landeuh ($1)",
        "exif-urgency-high": "Luhur ($1)",
+       "exif-urgency-other": "Prioritas robahluyuan ($1)",
        "namespacesall": "kabéh",
        "monthsall": "kabéh",
        "confirmemail": "Konfirmasi alamat surélék",
        "confirmemail_body": "Aya, sigana mah anjeun, ti alamat IP $1,\ngeus ngadaptarkeun akun \"$2\" maké alamat surélék ieu di {{SITENAME}}.\n\nPikeun mastikeun yén ieu akun mémang kagungan, sarta ngaktipkeun fitur surélék di {{SITENAME}}, buka tutumbu di handap ieu dina panyungsi (''browser'') anjeun:\n\n$3\n\nLamun anjeun teu ngadaptarkeun ieu akun, turutkeun ieu tutumbu pikeun ngabolaykeun konfirmasi alamat surélék:\n\n$5\n\nSandi konfirmasi ieu bakal kadaluwarsa dina $4.",
        "confirmemail_invalidated": "Konfirmasi alamat surélék dibolaykeun",
        "invalidateemail": "Bolaykeun konfirmasi surélék",
+       "notificationemail_subject_changed": "Alamat surélék kadaptar {{SITENAME}} geus diganti",
+       "notificationemail_subject_removed": "Alamat surélék kadaptar {{SITENAME}} geus dipupus",
+       "notificationemail_body_changed": "Hiji jalma, meureun ajeun, ti alamat IP $1,\ngeus ngaganti alamat surélék akun \"$2\" jadi \"$3\" di {{SITENAME}}",
+       "notificationemail_body_removed": "Hiji jalma, meureun anjeun, ti alamat IP $1,\ngeus mupus alamat surélék akun \"$2\" di {{SITENAME}}.\n\nMun ieu lain anjeun, geuwat nepungan administrator situs.",
        "scarytranscludedisabled": "[Transklusi interwiki ditumpurkeun]",
        "scarytranscludefailed": "[Gagal nyokot citakan $1]",
+       "scarytranscludefailed-httpstatus": "[Nyokot citakan $1 gagal: HTTP $2]",
        "scarytranscludetoolong": "[URLna panjang teuing]",
        "deletedwhileediting": "'''Awas''': ieu kaca geus dihapus nalika anjeun mitembeyan ngédit!",
        "confirmrecreate": "Pamaké [[User:$1|$1]] ([[User talk:$1|ngobrol]]) geus ngahapus artikel ieu nalika anjeun ngédit kalawan alesan:\n: ''$2''\nmangga pastikeun yén anjeun rék nyieun deui artikel ieu.",
        "confirm-purge-title": "Hapus sindangan ieu",
        "confirm_purge_button": "Heug",
        "confirm-purge-top": "Hapus sindangan kaca ieu?",
+       "confirm-purge-bottom": "Mersihkeun kaca bakal sakaligus mupus sindangan jeung midangkeun vérsi kaca kiwari.",
        "confirm-watch-button": "Heug",
+       "confirm-watch-top": "Tambahkeun ieu kaca kana awaskeuneun anjeun?",
        "confirm-unwatch-button": "Heug",
        "confirm-unwatch-top": "Pupus ieu kaca tina aawaseun anjeun?",
        "confirm-rollback-button": "Heug",
+       "confirm-rollback-top": "Balikkeun éditan ka ieu kaca?",
        "quotation-marks": "\"$1\"",
        "imgmultipageprev": "← kaca saacana",
        "imgmultipagenext": "kaca salajengna →",
        "imgmultigo": "Téang!",
        "imgmultigoto": "Jung ka kaca $1",
        "img-lang-default": "(basa default)",
+       "img-lang-info": "Jadikeun ieu gambar dina $1. $2",
        "img-lang-go": "Jung",
        "ascending_abbrev": "naék",
        "descending_abbrev": "turun",
        "watchlistedit-raw-title": "Édit daptar atah awaskeuneun",
        "watchlistedit-raw-legend": "Édit daptar atah awaskeuneun",
        "watchlistedit-raw-titles": "Judul:",
-       "watchlistedit-raw-submit": "Ropéa Awaskeuneun",
+       "watchlistedit-raw-submit": "Anyarkeun daptar awaseun",
        "watchlistedit-raw-done": "Daptar awaskeuneun geus diropéa.",
        "watchlistedit-raw-added": "{{PLURAL:$1|1 judul geus|$1 judul geus}} ditambahkeun:",
        "watchlistedit-raw-removed": "{{PLURAL:$1|1 judul geus|$1 judul geus}} dikaluarkeun:",
        "watchlistedit-clear-title": "Bersihan aawaseun",
        "watchlistedit-clear-legend": "Bersihan aawaseun",
+       "watchlistedit-clear-explain": "Sakum judul bakal dipupus tina daptar awaskeuneun anjeun",
        "watchlistedit-clear-titles": "Judul:",
+       "watchlistedit-clear-submit": "Bersihkeun daptar awaskeuneun (Ieu mah permanén!)",
+       "watchlistedit-clear-done": "Daptar awaskeuneun geus bersihkeun.",
+       "watchlistedit-clear-removed": "{{PLURAL:$1|1 judul geus|$1 judul geus}} dipupus:",
+       "watchlistedit-too-many": "Loba teuing kaca nu dipidangkeun di dieu.",
+       "watchlisttools-clear": "Bersihan daptar awaskeuneun",
        "watchlisttools-view": "Témbongkeun parobahan nu patali",
        "watchlisttools-edit": "Témbongkeun sarta édit béréndélan awaskeuneun",
        "watchlisttools-raw": "Robah béréndélan awaskeuneun",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|obrolan]])",
        "timezone-local": "Lokal",
        "duplicate-defaultsort": "'''Awas''': Konci runtuyan asal \"$2\" ngalindih konci runtuyan asal \"$1\" anu saméméhna.",
+       "duplicate-displaytitle": "<strong>Mangkahadé:</strong> Midangkeun judul \"$2\" ngalandih judul pidangan \"$1\" saméméhna.",
        "version": "Vérsi",
        "version-extensions": "Éksténsi nu diinstal",
        "version-skins": "Kalakop nu diinstal",
        "version-ext-colheader-description": "Pedaran",
        "version-ext-colheader-credits": "Pangarang",
        "version-license-title": "Lisénsi pikeun $1",
+       "version-license-not-found": "Taya detil informasi lisénsi pikeun ieu éksténsi.",
        "version-credits-title": "Krédit pikeun $1",
+       "version-credits-not-found": "Taya detil informasi krédit pikeun ieu éksténsi.",
+       "version-poweredby-credits": "Ieu wiki dirojong ku '''[https://www.mediawiki.org/ MédiaWiki]''', hak cipta © 2001-$1 $2.",
        "version-poweredby-others": "séjénna",
        "version-poweredby-translators": "darmamurcaya translatewiki.net",
+       "version-credits-summary": "Kami baris ngangken jalma-jalma di handap kalawan kontribusina ka [[Special:Version|MédiaWiki]].",
        "version-software": "Sopwér nu geus diinstal",
        "version-software-product": "Produk",
        "version-software-version": "Vérsi",
        "version-libraries-license": "Lisénsi",
        "version-libraries-description": "Pedaran",
        "version-libraries-authors": "Pangarang",
+       "redirect": "Alihan dumasar ID berkas, pamaké, kaca, révisi, atawa log",
        "redirect-summary": "Ieu kaca husus mindahkeun ka berkas (kalawan ngaran berkasna), kaca (kalawan ID répisi atawa ID kaca), kaca pamaké (kalawan ID pamaké nomerik), atawa éntri log (kalawan ID logna). Pamakéan: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], atawa [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Jung",
        "redirect-lookup": "Ilikan:",
        "redirect-logid": "ID log",
        "redirect-not-exists": "Ajén teu kapanggih",
        "fileduplicatesearch": "Paluruh gambar duplikat",
-       "fileduplicatesearch-filename": "Ngaran koropak:",
+       "fileduplicatesearch-summary": "Pamaluruhan duplikat berkas dumasar niléy hash-na.",
+       "fileduplicatesearch-filename": "Ngaran berkas:",
        "fileduplicatesearch-submit": "Paluruh",
        "fileduplicatesearch-info": "$1 × $2 piksel<br />Ukuran koropak: $3<br />Tipeu MIME: $4",
        "fileduplicatesearch-result-1": "Koropak \"$1\" teu boga duplikat idéntik.",
        "fileduplicatesearch-noresults": "Teu manggihan berkas nu ngaranna \"$1\".",
        "specialpages": "Kaca husus",
        "specialpages-note-top": "Kamandang",
+       "specialpages-note-restricted": "* Kaca husus normal.\n* <span class=\"mw-specialpagerestricted\">Kaca husus diwates.</span>",
        "specialpages-group-maintenance": "Laporan pigawéeun",
        "specialpages-group-other": "Kaca husus lainna",
        "specialpages-group-login": "Asup log / jieun akun",
        "blankpage": "Kaca kosong",
        "intentionallyblankpage": "Ieu kaca ngahaja dikosongkeun.",
        "external_image_whitelist": " #Antepkeun ieu baris sakumaha ayana<pre>\n#Paké fragmén éxprési régulér (ukur bagian anu aya di antara //) di handap\n#Ieu fragmén bakal dicocogkeun jeung URL gambar-gambar éksternal\n#Fragmén anu cocog bakal dipidangkeun minangka gambar, lamun henteu nu katémbong ukur tutumbuna #Baris nu dimimitian ku # bakal dianggap koméntar\n#Ieu teu ngabédakeun gedé leutikna aksara\n#Teundeun sakabéh fragmén éxprési régulér luhureun ieu baris. Antepkeun ieu baris sakumaha ayana</pre>",
+       "tags": "Tag parobahan valid",
        "tag-filter": "Saringan [[Special:Tags|tag]]:",
        "tag-filter-submit": "Saring",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|Tag}}]]: $2)",
+       "tag-mw-contentmodelchange": "parobahan modél kontén",
        "tags-title": "Tag",
+       "tags-intro": "Ieu kaca ngandung daptar tag nu bisa ditandaan ku pakakas lemes kana hiji éditan di handap hartina.",
        "tags-tag": "Ngaran tag",
+       "tags-display-header": "Pidangan di daptar parobahan",
+       "tags-description-header": "Déskripsi lengkep atawa harti",
        "tags-source-header": "Sumber",
        "tags-active-header": "Hurung?",
        "tags-hitcount-header": "Parobahan kalawan tag",
        "tags-active-yes": "Enya",
        "tags-active-no": "Teu",
        "tags-source-extension": "Ditangtukeun ku pakakas lemes",
+       "tags-source-manual": "Dipaké sacara manual ku pamaké jeung bot",
        "tags-source-none": "Teu dipaké deui",
        "tags-edit": "édit",
        "tags-delete": "pupus",
        "tags-activate": "hurungkeun",
        "tags-deactivate": "pareuman",
        "tags-hitcount": "$1 {{PLURAL:$1|parobahan|parobahan}}",
+       "tags-manage-no-permission": "Anjeun teu mibanda kawenangan pikeun ngatur parobahan tag.",
        "tags-create-heading": "Nyieun tag anyar",
        "tags-create-tag-name": "Ngaran tag:",
        "tags-create-reason": "Alesan:",
        "tags-create-already-exists": "Tag \"$1\" geus aya.",
        "tags-create-warnings-below": "Anjeun rék nuluykeun panyieunan ieu tag?",
        "tags-delete-title": "Pupus tag",
+       "tags-delete-explanation-initial": "Anjeun bakal mupus tag \"$1\" ti basisdata.",
        "tags-delete-reason": "Alesan:",
+       "tags-delete-submit": "Pupus ieu tag ogé",
+       "tags-delete-not-allowed": "Tag nu dibikeun ku éksténsi teu bisa dipupus iwal éta éksténsi ngidinan.",
+       "tags-delete-not-found": "Tag \"$1\" euweuh.",
+       "tags-delete-too-many-uses": "Tag \"$1\" dilarapkeun ka $2 atawa leuwih {{PLURAL:$2|sarévisi|révisi}} nu hartina éta téh teu bisa dipupus.",
+       "tags-delete-warnings-after-delete": "Tag \"$1\" dipupus, ngan bijil {{PLURAL:$2|saparingetan|paringetan}} di handap:",
+       "tags-delete-no-permission": "Anjeun teu mibanda kawenangan pikeun mupus parobahan tag.",
        "tags-activate-title": "Hurungkeun tag",
+       "tags-activate-question": "Anjeun bakal ngaktifkeun tag \"$1\".",
        "tags-activate-reason": "Alesan:",
+       "tags-activate-not-allowed": "Ieu tag \"$1\" teu mumkin bisa diaktifkeun.",
+       "tags-activate-not-found": "Tag \"$1\" euweuh.",
        "tags-activate-submit": "Hurungkeun",
        "tags-deactivate-title": "Pareuman tag",
+       "tags-deactivate-question": "Anjeun bakal nganonktifkeun tag \"$1\".",
        "tags-deactivate-reason": "Alesan:",
+       "tags-deactivate-not-allowed": "Ieu tag \"$1\" tidak mumkin bisa dinonaktifkeun.",
        "tags-deactivate-submit": "Pareuman",
+       "tags-apply-no-permission": "Anjeun teu boga idin pikeun ngalarapkeun parobahan tag babarengan jeung parobahan anjeun.",
+       "tags-apply-blocked": "Anjeun teu bisa ngalarapkeun tag jeung parobahan anjeun nalika {{GENDER:$1|anjeun}} keur dipeungpeuk.",
        "tags-edit-title": "Édit tag",
+       "tags-edit-manage-link": "Kokola tag",
        "tags-edit-existing-tags": "Tag nu aya:",
        "tags-edit-existing-tags-none": "<em>Taya</em>",
        "tags-edit-new-tags": "Tag anyar:",
        "tags-edit-chosen-no-results": "Euweuh tag nu luyu",
        "tags-edit-reason": "Alesan:",
        "tags-edit-revision-submit": "Larapkeun parobahan kana {{PLURAL:$1|ieu révisi|$1 révisi}}",
+       "tags-edit-success": "Parobahan dilarapkeun.",
+       "tags-edit-failure": "Perobahan di handap  bisa dilarapkeun:\n$1",
+       "tags-edit-nooldid-title": "Udagan révisi teu sah",
        "comparepages": "Bandinkeun kaca",
        "compare-page1": "Kaca 1",
        "compare-page2": "Kaca 2",
        "htmlform-float-invalid": "Niléy anu diasupkeun lain angka.",
        "htmlform-int-toolow": "Niléy anu diasupkeun kurang ti $1 anu pangleutikna",
        "htmlform-int-toohigh": "Niléy anu diasupkeun leuwih ti $1 anu panggedéna",
+       "htmlform-required": "Ieu niléy diperlukeun",
        "htmlform-submit": "Kirim",
        "htmlform-reset": "Bolaykeun parobahan",
        "htmlform-selectorother-other": "Lianna",
        "htmlform-date-placeholder": "TTTT-BB-HH",
        "htmlform-time-placeholder": "JJ:MM:DD",
        "htmlform-datetime-placeholder": "TTTT-BB-HH JJ:MM:DD",
+       "htmlform-title-not-creatable": "\"$1\" lain mangrupa judul kaca nu bisa dijieun",
        "htmlform-title-not-exists": "$1 euweuh.",
        "htmlform-user-not-exists": "<strong>$1</strong> taya.",
        "logentry-delete-delete": "$1 {{GENDER:$2|ngahapus}} kaca $3",
        "logentry-upload-upload": "$1 {{GENDER:$2|ngamuat}} $3",
        "log-name-tag": "Log tag",
        "rightsnone": "(euweuh)",
+       "rightslogentry-temporary-group": "$1 (samentara, nika $2)",
        "feedback-adding": "Nambahkeun eupan balik kana kaca...",
        "feedback-back": "Balik deui",
+       "feedback-bugcheck": "Hadé! Ngan ngariksa yén éta téh lain hiji di antara [$1 bug nu geus dipiwanoh].",
+       "feedback-bugnew": "Kuring geus mariksa. Laporkeun bug anyar",
        "feedback-cancel": "Bolay",
        "feedback-close": "Anggeus",
+       "feedback-external-bug-report-button": "Kirim pancén téhnis",
+       "feedback-dialog-title": "Kirim saran jeung tanggepan",
        "feedback-error2": "Kasalahan: Édit gagal",
        "feedback-message": "Surat:",
        "feedback-subject": "Ngeunaan:",
        "feedback-useragent": "Agén pamaké:",
        "searchsuggest-search": "Paluruh {{SITENAME}}",
        "searchsuggest-containing": "ngandung...",
+       "api-error-badtoken": "Kasalahan internal: Token goréng.",
+       "api-error-emptypage": "Panyieunan kaca anyar nu kosong teu diidinan.",
+       "api-error-publishfailed": "Kasalahan internal: sérver gagal medal berkas saheulaanan.",
+       "api-error-stashfailed": "Kasalahan internal: sérver gagal nyimpen berkas saheulaanan.",
+       "api-error-unknown-warning": "Paringetan teu dipiwawuh: $1",
+       "api-error-unknownerror": "Kasalahan teu dipiwawuh: \"$1\"",
        "duration-seconds": "$1 {{PLURAL:$1|detik|detik}}",
        "duration-minutes": "$1 {{PLURAL:$1|menit|menit}}",
        "duration-hours": "$1 {{PLURAL:$1|jam|jam}}",
        "duration-decades": "$1 {{PLURAL:$1|dékadeu|dékadeu}}",
        "duration-centuries": "$1 {{PLURAL:$1|abad|abad}}",
        "duration-millennia": "$1 {{PLURAL:$1|milénium|milénium}}",
+       "rotate-comment": "Gambar diputerkeun $1 {{PLURAL:$1|darajat}} saarah jarum jam",
+       "limitreport-title": "Parser profil data:",
+       "limitreport-cputime": "Waktu pamakéan CPU",
+       "limitreport-cputime-value": "$1 {{PLURAL:$1|sadetik|detik}}",
        "limitreport-walltime": "Pamakéan waktu nyaan",
+       "limitreport-walltime-value": "$1 {{PLURAL:$1|sadetik|detik}}",
+       "limitreport-ppvisitednodes": "Préprosésor nyorang itungan node",
+       "limitreport-ppgeneratednodes": "Préprosésor ngasilkeun itungan node",
+       "limitreport-postexpandincludesize": "Pasca ngalegakeun kaasup ukuran",
+       "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|sabita|bita}}",
+       "limitreport-templateargumentsize": "Ukuran argumén citakan",
+       "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|sabita|bita}}",
        "expandtemplates": "Mekarkeun citakan",
        "expand_templates_input": "Téks input:",
        "expand_templates_output": "Hasil:",
        "authmanager-realname-label": "Ngaran asli",
        "authmanager-realname-help": "Ngaran asli pamaké",
        "authmanager-provider-password": "Oténtikasi dumasar kecap sandi",
+       "authmanager-provider-temporarypassword": "Kecap sandi samentara",
+       "authprovider-confirmlink-success-line": "$1: Numbukeun ngahasil.",
        "authprovider-resetpass-skip-label": "Liwatan",
        "authprovider-resetpass-skip-help": "Liwatan pamulangan kecap sandi",
        "authform-newtoken": "Token leungit. $1",
        "cannotauth-not-allowed": "Anjeun teu diidinan pikeun maké ieu kaca",
        "changecredentials": "Robah krédensial",
        "changecredentials-submit": "Robah krédensial",
+       "changecredentials-invalidsubpage": "$1 téh jinis krédensial nu teu sah.",
        "removecredentials": "Pupus krédensial",
        "removecredentials-submit": "Pupus krédensial",
        "removecredentials-success": "Krédensial Anda geus dipupus.",
        "restrictionsfield-help": "Hiji alamat IP atawa pantengan CIDR per baris. Pikeun ngahurungkeun sakumna, paké:\n<pre>0.0.0.0/0\n::/0</pre>",
        "revid": "révisi $1",
        "pageid": "ID kaca $1",
+       "rawhtml-notallowed": "Tag &lt;html&gt; teu bisa dipaké di luar kaca normal.",
        "gotointerwiki": "Ninggalkeun{{SITENAME}}",
        "gotointerwiki-invalid": "Judul nu ditangtukeun teu sah.",
        "undelete-cantedit": "Anjeun teu bisa ngabolaykeun pamupusan ieu kaca lantaran anjeun teu bisa ngédit ieu kaca.",
index 909b2a6..386fe54 100644 (file)
        "parser-template-loop-warning": "Mall-loop upptäckt: [[$1]]",
        "template-loop-category": "Sidor med loopade mallar",
        "template-loop-category-desc": "Sidan innehåller en loopad mall, d.v.s. en mall som anropar sig själv rekursivt.",
+       "template-loop-warning": "<strong>Varning:</strong> Denna sida anropar [[:$1]] som orsakar en malloop (ett oändlig rekursivt anrop).",
        "parser-template-recursion-depth-warning": "Gräns för mallrekursionsdjup överskriden ($1)",
        "language-converter-depth-warning": "Gräns för språkkonverteringsdjup överskriden ($1)",
        "node-count-exceeded-category": "Sidor där antalet noder har överskridits",
        "timezoneregion-indian": "Indiska oceanen",
        "timezoneregion-pacific": "Stilla havet",
        "allowemail": "Tillåt e-post från andra användare",
+       "email-blacklist-label": "Förhindra dessa användarna från att skicka e-post till mig:",
        "prefs-searchoptions": "Sök",
        "prefs-namespaces": "Namnrymder",
        "default": "ursprungsinställning",
        "rcfilters-watchlist-markseen-button": "Markera alla ändringar som sedda",
        "rcfilters-watchlist-edit-watchlist-button": "Redigera din lista över bevakade sidor",
        "rcfilters-watchlist-showupdated": "Sidor som har ändrats sedan ditt senaste besök visas i <strong>fetstil</strong> med färgmarkering.",
+       "rcfilters-preference-label": "Dölj den förbättrade versionen av Senaste ändrinar",
+       "rcfilters-preference-help": "Stänger det nydesignade gränssnittet från 2017 och alla verktyg som lades till från och med då.",
        "rcnotefrom": "Nedan visas {{PLURAL:$5|ändringen|ändringar}} sedan <strong>$3, $4</strong> (upp till <strong>$1</strong> ändringar visas).",
        "rclistfromreset": "Återställ datumval",
        "rclistfrom": "Visa nya ändringar från och med $2 $3",
        "uploadbtn": "Ladda upp fil",
        "reuploaddesc": "Avbryt uppladdningen och gå tillbaka till uppladdningsformuläret.",
        "upload-tryagain": "Skicka modifierad filbeskrivning",
+       "upload-tryagain-nostash": "Skicka in återuppladdad fil och ändrad beskrivning",
        "uploadnologin": "Inte inloggad",
        "uploadnologintext": "Du måste $1 för att ladda upp filer.",
        "upload_directory_missing": "Uppladdningskatalogen ($1) saknas och kunde inte skapas av webbservern.",
        "file-deleted-duplicate-notitle": "En identisk fil till den här filen har tidigare raderats och titeln har undanhållits.\nDu borde be någon som kan se undanhållen fildata att granska situationen innan du försöker ladda upp den på nytt.",
        "uploadwarning": "Uppladdningsvarning",
        "uploadwarning-text": "Var god och ändra filbeskrivningen nedanför och försök igen.",
+       "uploadwarning-text-nostash": "Återuppladda filen, ändra beskrivningen nedan och försök igen.",
        "savefile": "Spara fil",
        "uploaddisabled": "Uppladdningsfunktionen är avstängd",
        "copyuploaddisabled": "Uppladdning med URL avstängt.",
        "listfiles_size": "Storlek (byte)",
        "listfiles_description": "Beskrivning",
        "listfiles_count": "Versioner",
-       "listfiles-show-all": "Visa även äldre versioner av bilder",
+       "listfiles-show-all": "Inkludera äldre versioner av filer",
        "listfiles-latestversion": "Nuvarande version",
        "listfiles-latestversion-yes": "Ja",
        "listfiles-latestversion-no": "Nej",
        "sp-contributions-newonly": "Visa endast redigeringar där sidor skapas",
        "sp-contributions-hideminor": "Dölj mindre redigeringar",
        "sp-contributions-submit": "Sök",
+       "sp-contributions-outofrange": "Kunde inte visa några resultat. Det begärda IP-intervallet är större än CIDR-gränsen på /$1.",
        "whatlinkshere": "Vad som länkar hit",
        "whatlinkshere-title": "Sidor som länkar till \"$1\"",
        "whatlinkshere-page": "Sida:",
index b882534..e3f338c 100644 (file)
@@ -8,6 +8,11 @@
                        "Translatealcd"
                ]
        },
+       "tog-numberheadings": "Smi’ nanak sa banggo’ na spzyang kkayal",
+       "underline-never": "Iyat pptzyuwaw krayryax",
+       "editfont-monospace": "Mtnaq kwara’ kintwahiq zyuwaw na inrkyasan na biru’",
+       "editfont-sansserif": "Ungat pintrang sa inrkyasan na biru’",
+       "editfont-serif": "Pintrang sa inrkyasan na biru’",
        "sunday": "Hngawan ryax",
        "monday": "’Ringan qutux hngawan",
        "tuesday": "Tay sazing ryax qutux hngawan",
        "subcategories": "Uzyuk na pintbcyan",
        "category-media-header": "Cyux niya’ ptbcyun na \"$1\" Meti’",
        "hidden-categories": "{{PLURAL:$1| Lnqing na pintbcyan }}",
+       "hidden-category-category": "Lnqing na pintbuci’",
        "category-subcat-count": "{{PLURAL:$2|pintbcyan qaniy ga nanak yaquw qutux uzyuk na pintbcyan quw spgluw niya’.| pintbcyan qaniy ga kwara’ kin na $1 uzyuk na pintbcyan sawn niya uziy, $2 kwara’.}}",
        "category-article-count": "{{PLURAL:$2| pintbcyan qaniy ga ginkwara’ zngazyan tay suruw. | pintbcyan qaniy ga kwara’ kin $1 pintbcyan tay suruw, $2 kwara’.}}",
        "category-file-count": "{{PLURAL:$2|Pintbcyan niya’ qaniy ga nanak yaquw nyux niya’ sbiru’ sa hugal qaniy|Pintbcyan niya’ qaniy ga kwara’ kin na biru’ ka $1, psqunun kwara\nga $2 .}}",
        "listingcontinuesabbrev": "luhing",
        "about": "Nanu’ quw",
+       "article": "Kya kay’ qsahuy na zngazyan",
        "newwindow": "(gyahiy na giqas na kktan)",
        "cancel": "laxan",
        "moredotdotdot": "Pzyux na’...",
        "navigation": "Pglaing pzyangay",
        "and": "&#32; squw &#32",
        "faq": "FAQ",
+       "actions": "Mtzyuwaw",
        "namespaces": "Kungcyen na sslalu’",
        "variants": "Qbuci’ pinsbahan",
        "navigation-heading": "Biru’ na bzyagan pglaing pzyangay",
+       "errorpagetitle": "Min’uqu’",
        "returnto": " ’bzinah $1",
        "tagline": "Minkahul squw {{SITENAME}}",
        "help": "Minblaq kmal",
        "view": "Psbaybzih minblaq mita’",
        "view-foreign": "Psbzih mita’ squ$1",
        "edit": "Smr’zyut miru’smr’zyut miru’",
+       "edit-local": "Sr’zyut miru’ sa sinbbaq kmayal sa rhzyal sqaniy",
        "create": "Ps’rux",
        "create-local": "Tnwang sa kay’ na rhzyal qasa",
        "delete": "’muyut",
        "protect": "mlahang",
        "protect_change": "smbah",
+       "unprotect": "Sbah kinlahang",
        "newpage": "Giqas na zngayan",
        "talkpagelinktext": "mpkal",
        "specialpage": "Mnanak na bbrwan",
        "jumpto": "Musa’",
        "jumptonavigation": "Pglaing pzyangay",
        "jumptosearch": "Hhkangi’",
+       "pool-errorunknown": "Ini’ bqbaqiy ginlaylwan pin’qwan",
        "aboutsite": "Nanu’ quw {{SITENAME}}",
        "aboutpage": "Project: Nanu’ quw",
        "copyrightpage": "{{ns:project}}:pancyuen",
        "portal-url": "Project:kkzyup secyun",
        "privacy": "Gaga’ na zyuwaw nanak",
        "privacypage": "Project: Gaga’ na zyuwaw nanak",
+       "badaccess": "Min’uqu’ pcingan sinpngan na kiri’",
        "ok": "Wal balay",
        "retrievedfrom": "’Nagal sa \"$1\"",
        "editsection": "smr’zyut miru’",
        "editold": "Smr’zyut miru’",
+       "viewsourceold": "Kta quw llpgan aring sa cin’ringan",
        "editlink": "smr’zyut miru’",
        "viewsourcelink": "Kta quw llpgan aring sa cin’ringan",
        "editsectionhint": "Smr’zyut miru’ gnaygay binrwan:$1",
        "showtoc": "Pkaykita’",
        "hidetoc": "lqing",
        "collapsible-collapse": "Psqunun",
+       "collapsible-expand": "cankay",
        "confirmable-yes": "Aw’",
        "confirmable-no": "Iyat",
        "feedlinks": "Pcyumung kktan:",
        "site-atom-feed": "$1 na tkhulan Atom",
        "page-atom-feed": "inkhulan na Atom tay $1",
        "red-link-title": "$1 (ungat zzngayan)",
+       "sort-descending": "Pkkrawn mkuw tay bbawiq",
        "nstab-main": "Zzngayan",
        "nstab-user": "Pkt’aniy",
+       "nstab-media": "Zngazyan na meti’",
        "nstab-special": "Mnanak na bbrwan",
        "nstab-project": "Zngyan na Cwan’an",
        "nstab-image": "biru’ na zayzyuwaw",
        "nstab-mediawiki": "pintkaykay’",
        "nstab-template": "Mopan",
+       "nstab-help": "Minblaq pinqzyu’ sa zngazyan",
        "nstab-category": "Ps’anak sa mkgluw",
        "mainpage-nstab": "T’ringan na zzngayan",
+       "error": "Min’uqu’",
+       "databaseerror": "Min’uqu’ quw cryawku’",
+       "databaseerror-query": "Hmkangi’: $1",
        "databaseerror-function": "Pptzyuwaw:$1",
+       "readonly": "Nyux niya’ sngusun quw sslyan biru’ qaniy",
        "missingarticle-diff": "(Kin’ini’ ptnaq:$1, $2)",
        "internalerror": "pin’qwan tay qsahuy",
+       "internalerror_info": "Pin’qwan tay qsahuy: $1",
        "badtitle": "Ungat zyuwaw na lalu’ na spzyang kkayal",
        "badtitletext": "Sni’ su’ lalu’ na spzyang kkayal su’ qasa ga ungat zyuwaw niya’, ungat ana nanu’ qsahuy niya’, ini’ ga ini’ su’ ’nblayqiy p’ubuy quw pin’ubuy su’ squw bzinah na kay’, ini’ ga ’mubuy sa sni’ naha’ lalu’ sa Wiki’. \nKuna kya wal su’ syun ka biru’ qasa ga kya’a cyux ’magan sa biru’ na ini’ baqiy mita’ hazi’.",
        "viewsource": "Kta quw llpgan aring sa cin’ringan",
+       "actionthrottled": "Wal shtuy quw ppzyuwi’an",
        "exception-nologin": "Ini’ su’ kzyup na’",
+       "cannotlogoutnow-title": "Ini’ baqiy mshriq misuw qaniy",
        "yourname": "Lalu’ na pptzyuwaw:",
        "userlogin-yourname": "Lalu’ na pptzyuwaw",
        "userlogin-yourname-ph": "Brwaniy lalu’ na pptzyuwaw su’",
        "yourpassword": "Mima’:",
        "userlogin-yourpassword": "Nanak kung baq sa llpgan qaniy",
        "userlogin-yourpassword-ph": "Brwaniy Mima’ su’",
+       "createacct-yourpassword-ph": "Brwaniy quw isu’ nanak musa’ baq na banggo’",
+       "createacct-yourpasswordagain": "Wal srhgun smhuzyay quw Mima’",
+       "createacct-yourpasswordagain-ph": "Brwaniy lawziy quw mima’",
        "userlogin-remembermypassword": "Laxiy zngiy kinzyup maku’",
+       "userlogin-signwithsecure": "Ptzyawganiy quw iyat qqzyaqih na ’ubuy",
+       "cannotlogin-title": "Ini’ baqiy mzyup",
+       "cannotlogin-text": "Ini’ baqiy mzyup.",
+       "cannotloginnow-title": "Ini’ baqiy mzyup misuw qaniy",
+       "cannotcreateaccount-title": "Ini’ baqiy ps’rux Canghaw",
+       "yourdomainname": "Wangyu’ su’:",
        "login": "mzyup",
+       "nav-login-createaccount": "Mzyup / ps’rux canghaw",
        "logout": "mshriq",
        "userlogout": "mshriq",
        "notloggedin": "Ini’ su’ kzyup na’",
        "createacct-email-ph": "Brwaniy zyusyo na e-meyo’ su’",
        "createacct-another-email-ph": "Brwaniy zyusyo na e-meyo’ su’",
        "createacct-reason": "’ringan",
+       "createacct-submit": "Ps’rux lalu’ na Canghaw su’",
        "createacct-another-submit": "Ps’rux canghaw",
        "createacct-benefit-heading": "{{SITENAME}} hya’ ga ’nagal squw yan isu’ psr’zyut miru’ na squliq pins’rux.",
        "createacct-benefit-body1": "{{PLURAL:$1|smr’zyut miru’ }}",
        "createacct-benefit-body2": "{{PLURAL:$1|zzngayan}}",
        "createacct-benefit-body3": "misuw qaniy na{{PLURAL:$1| smnr’zyut miru’}}",
+       "loginerror": "Mtkari’ kinzyup",
+       "createacct-error": "Min’uqu’ quw pins’rux su’ Canghaw",
+       "createaccounterror": "Ini’ baqiy ps’rux Canghaw:$1",
+       "loginsuccesstitle": "Wal mzyup",
+       "mailmypassword": "T’aring lawziy smi’ mima’",
+       "accountcreated": "Wal ps’rux canghaw",
        "loginlanguagelabel": "Kay’:$1",
        "pt-login": "Mzyup",
        "pt-login-button": "mzyup",
+       "pt-login-continue-button": "Siy luhing mzyup",
        "pt-createaccount": "Ps’rux  canghaw",
        "pt-userlogout": "mshriq",
+       "changepassword": "Sbah mima’",
+       "oldpassword": "Mima’ sraral:",
+       "newpassword": "Giqas na saxa’ nanak musa’ baq na banggo’:",
+       "botpasswords": "Mima’ na squliq na kikay",
        "botpasswords-label-create": "Ps’rux",
        "botpasswords-label-update": "Sbahun giqas",
        "botpasswords-label-cancel": "laxan",
        "botpasswords-label-delete": "’muyut",
        "botpasswords-label-resetpassword": "T’aring lawziy smi’ mima’",
+       "botpasswords-label-grants-column": "Wal sbiq hiya’ kinri’ la",
+       "resetpass_forbidden": "Ini’ baqiy snbah mima’",
+       "resetpass_forbidden-reason": "Ini’ baqiy snbah mima’: $1",
+       "resetpass-submit-loggedin": "Sbah mima’",
        "resetpass-submit-cancel": "laxan",
+       "resetpass-temp-password": "Pinbaybah smi’ na mima’:",
        "passwordreset": "T’aring lawziy smi’ mima’",
        "passwordreset-username": "Lalu’ na pptzyuwaw:",
+       "passwordreset-domain": "Lalu’ na wangyu’:",
        "passwordreset-email": "Zyusyo na e-meyo’:",
        "changeemail-none": "(ungat)",
+       "resettokens": "T’ringun kbalay lawziy niwan sawsu’",
        "resettokens-tokens": "Niwan sawsu’:",
+       "resettokens-done": "Wal t’aring kbalay lawziy niwan sawsu’ na mima’.",
        "bold_sample": "Qthuy na biru’",
        "bold_tip": "Qthuy na biru’",
        "italic_sample": "Mtkkiy na biru’",
        "minoredit": "Iyat spzyang balay ssr’tun miru’ balay qaniy hya’",
        "watchthis": "Kmyagal mita’ sa zngayan qaniy",
        "savearticle": "Cucun qu zngazyan",
+       "savechanges": "Cucun squw sinbah",
+       "publishpage": "Aniy gmazyang quw zngazyan",
+       "publishchanges": "Aniy gmazyang quw sinbah",
        "preview": "Pnaynama’ mita’",
        "showpreview": "Pnaynama’ pkita’ sa misa spkita’ na zayzyuwaw",
        "showdiff": "Pkaykita’ sinbah",
        "anoneditwarning": "<strong>Smrhuw kmal:</strong> Ini’ su’ kzyup na’. Maha iy wal su’ sbahun ana inu’ ga, nanu’ quw cyux ki’an na  IP su’ ga musa’ ktan kwara’ squliq. Maha iy <strong>[$1 wal mzyup]</strong> ini’ ga <strong>[$2 ps’rux Canghaw]</strong>,sinr’zyut su’ miru’ qaniy ga musa’ niya’ s’agal sa lalu’ su’ ka nyux mmiru’ qaniy smbbaq, ru musa’ magal sa kwara’ ka qqblayqan na hway naha’.",
+       "subject-preview": "Pnaynama’ mita’ sa spzyang na ptzyuwaw:",
+       "blockednoreason": "ini’ niya’ kaylaniy quw nanu’ quw ‘ringan",
+       "nosuchsectiontitle": "Ini’ ‘luwiy quw binkgan gnaygay na binrwan",
+       "loginreqtitle": "Siy ga mzyup",
        "loginreqlink": "mzyup",
+       "accmailtitle": "Wayal ssatu’ mima",
+       "newarticle": "(Giqas)",
        "noarticletext-nopermission": "Ungat ana cikuy knayal sa zyuwaw na qsahuy na lalu’ na kay’ squw nyux ktan sa zngayan qaniy.\nAna su’ s’usa’ sa zngayan tay bzinah \n[[Special:Search/{{PAGENAME}}|hmkangi’ sa puqing lalu’ na zngayan qaniy]], ini’ ga <span class=\"plainlinks\">[{{fullurl:{{#Special:Log}}|page={{FULLPAGENAMEE}}}} hmkangi’ sa m’ubuy sa zyuwaw na bbrwan qutux qutux ryax]</span>,ga ungat kinri’ su’ ms’rux sa zngayan qaniy.",
        "updated": "(Sinbahan)",
        "note": "<strong> pinkita’ niya’ sa pinzga’ :</strong>",
+       "continue-editing": "Usa’ squw hhalan smr’zyut miru’",
        "editing": "Nyuw smr’zyut miru’ $1",
        "editingsection": "smr’zyut miru’ $1 (gnaygay binrwan)",
+       "yourtext": "Bniru’ su’",
+       "storedversion": "Wal cucun quw sinbah",
+       "yourdiff": "Kin’ini’ ptnaq",
        "templatesused": "Zngayan qaniy ga cyux niya’ sptzyuwaw qu nyux sbiru’ hugal qaniy{{PLURAL:$1|mopan}}:",
        "template-protected": "(klhangan)",
        "template-semiprotected": "(ana walskun ga baqun smbah)",
        "hiddencategories": "zngayan qaniy hya’ ga gluw na {{PLURAL:$1|1 lnqing na pintbcyan|$1 lnqing pintbcyan}}na qutux bluw na squliq naha’:",
+       "permissionserrors": "Min’uqu’ pcingan sinpngan na kiri’",
        "moveddeleted-notice": "Wal pzyutan quw zngayan qaniy.\nNyux sbiru’ hugal quw wal pzyutan na zngazyan squw sinhzyuwan bniru’ sa qutux qutux ryax aki’ baqun sa ggalan pspngan mita’.",
+       "edit-conflict": "Ini’ ptnaq imi’ qsahuy na sinr’zyut miru’.",
+       "postedit-confirmation-created": "Wal ps’rux zngazyan.",
+       "postedit-confirmation-restored": "Wal pbaynahun sazngayan sraral",
+       "defaultmessagetext": "Pinnama’ smi’ pintkaykay’ na biru’",
+       "invalid-content-data": "Ungat zyuwaw nquw sinbbaq kay’ na qsahuy niya’",
        "content-model-wikitext": "Wikitext",
        "content-model-text": "biru’ mlmlux",
        "content-json-empty-object": "Ungat ana nanu’ quw nnanu’ niya’",
        "content-json-empty-array": "Ungat ana nanu’ sni’ binrwan naha’",
        "viewpagelogs": "Inblaq mita’ quw bniru’ sa zngazyan qaniy",
+       "currentrev": "Spzyang giqas na sinnbah",
        "currentrev-asof": "Spzyang balay giqas sinbahan squw  $1",
        "revisionasof": "Gaga’ na pptzyuwaw sa qutux qutux binkgan gaga’",
        "revision-info": "Nanu’ squ $1 kahul sa {{GENDER:$6|$2}} smnbah squ $7",
        "last": "tay glaing",
        "page_first": "t’ringan balay na llpgan",
        "page_last": "pucing balay llpgan",
+       "history-fieldset-title": "Hkangi’ sinbah",
+       "histfirst": "spzyang smural",
        "histlast": "giqas balay",
        "historysize": "({{PLURAL:$1|$1 bzyaqan kkayal na llpgan}})",
+       "historyempty": "(ungat ana nanu’)",
+       "history-feed-title": "Sbah pincyagan sraral",
        "rev-delundel": "Smbah sa musa’ slwan mita’",
        "rev-showdeleted": "Pkaykita’",
        "revdelete-show-file-submit": "Aw’",
+       "revdelete-legend": "Syaniy qutux sa snqays sa spkaykita’",
+       "revdelete-hide-text": "Sinbah biru’",
+       "revdelete-hide-comment": "Sr’zyut miru’ gnaygay lalu’",
+       "revdelete-radio-same": "(laxiy sbahiy)",
        "revdelete-radio-set": "Lqing",
        "revdelete-radio-unset": "Pkaykita’",
        "revdelete-log": "’ringan:",
+       "revdel-restore": "sbah quw musa’ baqun mita’",
+       "pagehist": "Pinhknyan sraral na zngazyan",
+       "deletedhist": "Wal pzyutan lquw pincyuwagan sraral",
+       "revdelete-reasonotherlist": "Ringan na bzinah",
+       "revdelete-edit-reasonlist": "Sr’zyut miru’ sa ’ringan na pinzyutan",
+       "revdelete-offender": "Smnbah sa binrwan na squliq:",
+       "mergehistory-from": "Inkhulan na zngazyan:",
+       "mergehistory-into": "Sngusan zngazyan:",
+       "mergehistory-fail-bad-timestamp": "Min’uqu’ bniru’ su’ zikang",
        "mergehistory-reason": "’ringan:",
+       "mergelog": "Psqun miru’",
+       "revertmerge": "Laxan pinsqunan",
        "history-title": "Tay \"$1\" na sinbah bniru’ sraral",
        "difference-title": "Kin ini’ ptnaq sinbahan squw \"$1\"",
        "lineno": "Tuqiy binkgan binrwan$1:",
        "editundo": "Psbzinah",
+       "diff-empty": "(ungat ini’ ptnaq)",
        "diff-multi-sameuser": "({{PLURAL:ini’ kta quw sinbahan tay kska’ nquw sinbahan  tay $1}})",
        "searchresults": "Babaw na hinkangi",
        "searchresults-title": "$1 na babaw hinkangi",
+       "titlematches": "Mtnaq quw lalu’ kkayal sa zngazyan",
+       "textmatches": "Mtnaq balay binrwan qsahuy na zngazyan",
        "prevn": "tay glaing {{PLURAL:$1|$1}}",
        "nextn": "tay suruw {{PLURAL:$1|$1}}",
        "prev-page": "llpgan tay glaing",
        "search-category": "(ps’anak sa mkgluw $1)",
        "search-suggest": "Imi’ na kay’ su’ ga yasa qasa: $1",
        "search-interwiki-more": "(pzyux na’)",
+       "search-interwiki-more-results": "pzyux na’ pcingan na hinkangi’",
        "search-relatedarticle": "Ubuy na",
+       "searchrelated": "ubuy na",
        "searchall": "kwara’",
        "search-showingresults": "{{PLURAL:$4|tay <strong>$1</strong>pucing niya’, psqunun lga <strong>$3</strong> |tay <strong>$1 - $2</strong> pucing nya’, psqunun lga <strong>$3</strong> pucing nya’}}",
        "search-nonefound": "Ktan qu bniru’ niya’ ga ungat quw musa’ mtnaq sa tthuzyay sa awsa’ hmkangi’.",
+       "powersearch-legend": "Mkkura’ kinqbaqan na hhkangi’",
+       "powersearch-togglelabel": "Wazyaw:",
        "powersearch-toggleall": "Kwara’",
        "powersearch-togglenone": "Ungat",
+       "search-external": "Hhkangi’ taylnglingay",
+       "preferences": "Smi’ sa musa’ nryaxun mita’",
        "mypreferences": "Sni’ maku’",
+       "prefs-edits": "Kinpira’ na sinr’zyut:",
        "prefs-skin": "Ktan na rawziq",
        "skin-preview": "Pnaynama’ mita’",
+       "datedefault": "Pinnama’ smi’ na biru’",
+       "prefs-labs": "Tthuzyay na tmrang psiking",
+       "prefs-user-pages": "Zngazyan na pptzyuwaw",
        "prefs-rc": "Sbahun misuw qaniy",
+       "prefs-watchlist": "Binkgan sa kktan na kkita’",
+       "prefs-editwatchlist": "Sr’zyut miru’ sa kkita’ binkgan sa kktan",
        "prefs-misc": "Mzinah",
        "prefs-email": "bbzagan sa e-meyo’",
        "prefs-rendering": "Ktan na rawziq",
        "saveprefs": "Cucun",
        "prefs-editing": "Smr’zyut miru’",
        "searchresultshead": "Hhkangi’",
+       "stub-threshold-sample-link": "galan ppslungan",
+       "stub-threshold-disabled": "Ini’ ptzawganiy",
        "timezonelegend": "Zikang na ini’ ptanaq rhzyal",
+       "localtime": "Zikang na rhzyal sqasa:",
+       "servertime": "Zikang na pklahang sa Wangcan:",
        "timezoneregion-africa": "Xweco",
        "timezoneregion-america": "Meco",
        "timezoneregion-antarctica": "Nancicow",
        "prefs-custom-css": "Sinpung nanak CSS",
        "youremail": "e-meyo’:",
        "username": "{{GENDER:$1|Lalu’ na pptzyuwaw}}:",
+       "prefs-registration": "Pbiru’ zikang:",
+       "yourrealname": "Spzyang balay lalu’:",
        "yourlanguage": "Kay’:",
+       "yournick": "Giqas na bniru’ lalu’:",
        "email": "e-meyo’",
+       "prefs-info": "Puqing balay na ggalan kinbbaq",
        "prefs-i18n": "Koksayka",
+       "prefs-signature": "Miru’ lalu’",
        "prefs-dateformat": "Ksu’ na ryax",
        "prefs-timeoffset": "Kinini’ ptnaq na zikang",
        "prefs-advancedediting": "Kwara’ hya’ g a syensyang",
+       "prefs-editor": "Qayqaya’ na ssr’zyut miru’",
        "prefs-preview": "Pnaynama’ mita’",
+       "prefs-advancedrc": "Mkkura’ kinqbaqan na bbzyagan",
+       "prefs-advancedsearchoptions": "Mkkura’ kinqbaqan na bbzyagan",
+       "prefs-displayrc": "Pkt’aniy bbzyagan",
        "prefs-tokenwatchlist": "Niwan sawsu’",
        "prefs-diffs": "Kin’ini’ ptnaq",
+       "userrights": "Pcingan sinpngan na pptzyuwaw",
+       "userrights-lookup-user": "Wazyaw quw pptzyuwaw",
+       "userrights-groupsmember": "Ubuy gluw na chyuncu:",
        "userrights-reason": "’ringan:",
        "userrights-expiry-current": "Sinpngan ryax $1",
+       "userrights-expiry-none": "Ungat sinpngan ryax",
        "userrights-expiry": "Sinpngan ryax:",
+       "userrights-expiry-othertime": "Zikang tay bzinah:",
+       "group": "Pinglgan:",
        "group-user": "kwara’ ka cyux mbing ka qutux qutux ngasal",
        "group-bot": "Squliq na kikay",
        "group-sysop": "Pklahang",
        "group-all": "(kwara’)",
        "group-user-member": "{{GENDER:$1|kwara’ ka cyux mbing ka qutux qutux ngasal}}",
        "group-bot-member": "{{GENDER:$1|squliq na kikay}}",
+       "group-bureaucrat-member": "{{GENDER:$1|gyose’ning}}",
        "grouppage-user": "{{ns:project}}: kwara’ ka cyux mbing ka qutux qutux ngasal",
        "grouppage-bot": "{{ns:project}}:Squliq na kikay",
        "grouppage-sysop": "{{ns:project}}:Pklahang",
        "grouppage-bureaucrat": "{{ns:project}}:Gyose’ning",
+       "right-read": "Lpgun zngazyan",
+       "right-edit": "Smr’zyut miru’ sa zngazyan",
+       "right-createtalk": "Ps’rux na zngazyan na ppkyalan",
+       "right-move": "Hzyaniy quw zngazyan",
+       "right-move-categorypages": "Shzyaniy quw pintbuci’ na zngazyan",
+       "right-movefile": "Hzyaniy quw Tang’an",
+       "right-upload": "Pawsa’ quw Ta’an",
        "right-writeapi": "Sptzyuwaw squw API",
+       "right-delete": "Pzyuciy zngazyan",
+       "right-undelete": "Laxiy quw aki’ llaxan na zngazyan",
+       "right-unblockself": "Laxiy quw qnhut isu’ nanak",
+       "right-mergehistory": "Psqunun zngazyan pincyuwagan sraral",
+       "grant-group-page-interaction": "Usa’ mpkayal squw zngazyan",
+       "grant-group-file-interaction": "Usa’ mpkayal squw meti’",
+       "grant-group-email": "Stwaniy e-meyo’",
+       "grant-group-high-volume": "Pzyux iytal wayal sptzyuwaw",
+       "grant-group-administration": "Ptzyuwaw squw pptzyuwaw sa kklahang",
+       "grant-group-other": "Hotung na bzinah",
        "grant-createaccount": "Ps’rux canghaw",
+       "grant-highvolume": "Pzyux iyal quw sinr’zyut miru’",
+       "grant-privateinfo": "Agal ruw ssi’ sa lnqing na sinbbaq na cryaw",
+       "grant-uploadfile": "Pawsa’ sa kktan quw giqas Tang’an qaniy",
+       "grant-basic": "Puqing balay na pcingan na kinri’",
        "newuserlogpage": "Ps’rux sa bbiru’ krayryax na pbing nasquliq",
+       "action-read": "lpuw zngazyan qaniy",
        "action-edit": "sr’zyut squw zzngayan tay sqaniy",
+       "action-createpage": "Ps’rux quw zngazyan qaniy",
+       "action-move": "hz’aniy quw zngazyan qaniy",
+       "action-move-categorypages": "shzyaniy quw pintbuci’ na zngazyan",
+       "action-movefile": "hz’aniy quw Tang’an qaniy",
+       "action-delete": "’zyuciy quw zngazyan qaniy",
+       "action-deleterevision": "pzyuciy sinbah",
+       "action-deletelogentry": "pzyuciy quw bniru’ sa binkgan lmlamu’",
+       "action-sendemail": "Stwaniy e-meyo’",
+       "action-purge": "kwagiy quw zngazyan qaniy",
+       "nchanges": "min$1 {{PLURAL:$1|smbah}}",
        "enhancedrc-history": "kwara’ binrwan sraral",
        "recentchanges": "Sinbahan misuw qaniy",
        "recentchanges-legend": "Misan sinbahan wwazyaw misuw",
        "recentchanges-legend-heading": "<strong> pinkita’ niya’ sa pinzga’ :</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} (aniy mita’ sa[[Special:NewPages|giqas na zzngayan]])",
        "recentchanges-submit": "Pkaykita’",
+       "rcfilters-tag-remove": "Laxan '$1'",
+       "rcfilters-days-show-days": "tay $1{{PLURAL:$1|ryax}}",
+       "rcfilters-quickfilters": "Cucun squw kkay na pt’iruw",
+       "rcfilters-savedqueries-defaultlabel": "Cucun squw kkay na pt’iruw",
+       "rcfilters-savedqueries-rename": "T’aring lawziy smlalu’",
+       "rcfilters-savedqueries-setdefault": "Syun maha pinnama’ smi’",
+       "rcfilters-savedqueries-new-name-label": "Lalu’ qinlah lalu’",
+       "rcfilters-savedqueries-cancel-label": "Laxan",
        "rcfilters-filterlist-title": "Hhkangi’",
+       "rcfilters-highlightbutton-title": "Baqun balay pcingan balay smbbaq nquw bniru’ niya’",
+       "rcfilters-highlightmenu-title": "Wazyaw biru’ knita’ rawziq",
+       "rcfilters-filterlist-noresults": "Ktan ga ungat ana qutux cin’rgan na sinpngan sa musa’ tthuzyay",
+       "rcfilters-filtergroup-authorship": "Mintzyuwaw sa wal miq sa pincyuwagan",
+       "rcfilters-filter-editsbyself-label": "Sinr’zyut su’ miru’",
+       "rcfilters-filter-editsbyself-description": "Pincyuwagan su’.",
+       "rcfilters-filter-editsbyother-label": "Sinbah na squliq tay bzinah",
        "rcfilters-filter-user-experience-level-registered-label": "Pinbiru’",
        "rcfilters-filter-user-experience-level-unregistered-label": "Iyat pinbiru’ na’",
+       "rcfilters-filter-user-experience-level-newcomer-label": "Misan mqbaq",
        "rcfilters-filter-user-experience-level-learner-label": "Misan mqbaq",
+       "rcfilters-filtergroup-automated": "Mutuw niya’ sr’tun miru’ nanak",
        "rcfilters-filter-bots-label": "squliq na kikay",
+       "rcfilters-filtergroup-reviewstatus": "’nblaq mita’ inrkyasan niya’ sa misuw qaniy",
+       "rcfilters-filter-patrolled-label": "Wayal gawzyagan mita’",
        "rcfilters-filter-unpatrolled-label": "Iyat gnawzyagan mita’ na’",
        "rcfilters-filtergroup-significance": "Spzyang krhun na zyuwaw",
+       "rcfilters-filter-minor-label": "Msnzik sa spzyang balay sinr’zyut miru’",
+       "rcfilters-filter-major-label": "Iyat mszik sa spzyang sr’tun miru’",
+       "rcfilters-filter-watchlist-watched-label": "Kta quw babaw na p’insat",
+       "rcfilters-filtergroup-changetype": "Sbah gluw na mmntnaq",
+       "rcfilters-filter-pageedits-label": "Ssr’zyut miru’ zngazyan",
+       "rcfilters-filter-newpages-label": "Ps’rux zngazyan",
        "rcfilters-filter-categorization-label": "Pintbcyan na sinbahan",
+       "rcfilters-filter-logactions-label": "Miru’ sa bbiru’",
+       "rcfilters-filtergroup-lastRevision": "Spzyang giqas na sinnbah",
        "rclistfrom": "Inkahul misan sinbahan sa $2, $3",
        "rcshowhideminor": "$1 mszik sa ssr’tun",
        "rcshowhideminor-show": "Pkaykita’",
        "rcshowhidemine": "$1 sinr’zyut maku’ miru’",
        "rcshowhidemine-show": "Pkaykita’",
        "rcshowhidemine-hide": "Lqing",
+       "rcshowhidecategorization": "$1 pintbcyan na zngazyan",
        "rcshowhidecategorization-show": "Pkaykita’",
        "rcshowhidecategorization-hide": "Lqing",
        "rclinks": "Pinkaykita’ sinbah sa $1 smbah squw $2  misuw qaniy",
        "minoreditletter": "cipuq",
        "newpageletter": "Giqas",
        "boteditletter": "squliq na kikay",
+       "rc_categories_any": "Ana nanu’ binzyagan na",
        "rc-change-size-new": "sin-nbah$1 {{PLURAL:bzyaqan kkayal na llpgan}}",
        "recentchangeslinked": "M’ubuy quw zyuwaw na sinbahan",
        "recentchangeslinked-feed": "M’ubuy quw zyuwaw na sinbahan",
        "recentchangeslinked-to": "Sbah squw m’ay’ubuy zngayan sqaniy ka sinbahan na pinkaykita’ niya’ squw m’ay’ubuy sa sngayan sqaniy",
        "upload": "Pawsa’ sa kktan zayzyuwaw na biru’",
        "uploadnologin": "Ini’ su’ kzyup na’",
+       "uploaderror": "Wal min’uqu’ quw pinpawsa’",
+       "uploadlogpage": "Bniru’ sa kwara’ wal pawsun sa kktan",
        "filename": "Lalu’ na tang’an",
        "filedesc": "Lalu’ na spzyang bbiru’ su’",
        "fileuploadsummary": "Lalu’ na spzyang bbiru’ su’:",
+       "filereuploadsummary": "Sbah quw Tang’an",
+       "filestatus": "Pancyuen cwangtay:",
        "filesource": "Tkhulan:",
+       "ignorewarnings": "Siy laxiy kya kwara’ quw sinngungu’ niya’",
+       "uploadwarning": "Pinsbaq niya’ sa misa’ ta’ pinbaqun",
+       "savefile": "Cucun Tang’an",
+       "uploaddisabled": "Wal phngagun quw pptzyuwaw na ppawsa.",
+       "upload-source": "Inkhulan Ta’an",
+       "upload-description": "Pinqzyuwan Tang’an",
+       "upload-options": "Bbzyagan sa ppawsan",
+       "watchthisupload": "Kta quw Tang’an qaniy",
        "upload-file-error": "pin’qwan tay qsahuy",
+       "upload-dialog-button-cancel": "Laxan",
        "upload-dialog-button-back": "’bzinah",
        "upload-dialog-button-done": "Tmasuq",
        "upload-dialog-button-save": "Cucun",
+       "upload-dialog-button-upload": "Pawsa’ sa kktan",
+       "upload-form-label-infoform-name": "Lalu’ qinlah lalu’",
        "upload-form-label-infoform-description": "Miblaq pnqzyu’ sa zyuwaw",
        "upload-form-label-usage-title": "Pptzyuwaw",
+       "upload-form-label-usage-filename": "Lalu’ na Tang’an",
+       "upload-form-label-own-work": "Qaniy ga kinbalay maku’",
+       "upload-form-label-infoform-categories": "Ps’anak sa mkgluw",
        "upload-form-label-infoform-date": "Ryax",
+       "uploadstash": "Pawsa’ sa kktan quw llqingan",
+       "uploadstash-refresh": "Psqgiqas smbah quw binzyagan sa kktan na Tang’an",
+       "uploadstash-thumbnail": "inblaq mita’ swotu’",
+       "invalid-chunk-offset": "Ungat zyuwaw na Chyak offset",
+       "img-auth-accessdenied": "Ini’ swal magal ru skung",
+       "upload-curl-error28": "Wal hmzinas zikang na pinpawsa’ la",
        "license": "Biru’ na gaga’ nqu snwayal hmriq sa kinri’:",
        "license-header": "Biru’ na gaga’ nqu snwayal hmriq sa kinri’",
+       "nolicense": "Ini’ wazyaw na’",
+       "license-nopreview": "(Ini’ aniy pnaynama’ pkita’)",
        "listfiles-delete": "’muyut",
        "imgfile": "biru’ na zayzyuwaw",
+       "listfiles": "Binkgan sa kktan na Tang’an",
+       "listfiles_thumb": "Pinkcikuy zuga’ zngayan",
        "listfiles_date": "Ryax",
+       "listfiles_name": "Lalu’ qinlah lalu’",
        "listfiles_user": "kwara’ ka cyux mbing ka qutux qutux ngasal",
        "listfiles_size": "Sspngan kinkrahu’",
        "listfiles_description": "Miblaq pnqzyu’ sa zyuwaw",
        "listfiles_count": "Ubuy gluw bbiru’ ni",
+       "listfiles-latestversion": "Ubuy gluw na misuw qaniy",
        "listfiles-latestversion-yes": "Aw’",
        "listfiles-latestversion-no": "iyat",
        "file-anchor-link": "biru’ na zayzyuwaw",
        "filehist": "Bniru’ naha’ sa sinr’zyutan na biru’",
        "filehist-help": "Pphtan ryax/zikang sa kkita’ squw kinblayan biru’ na zayzyuwaw.",
+       "filehist-deleteall": "muyut kwara’",
+       "filehist-deleteone": "’muyut",
        "filehist-revert": "psbzih",
        "filehist-current": "misuw qaniy",
        "filehist-datetime": "ryax/zikang",
        "filehist-thumb": "Swotu’",
        "filehist-thumbtext": "Pinkcikuy kbalay na syasing squ kinblayan $1",
+       "filehist-nothumb": "Ungat pinkcikuy na zga’",
        "filehist-user": "kwara’ ka cyux mbing ka qutux qutux ngasal.",
        "filehist-dimensions": "Sspngan kinkrahu’",
+       "filehist-filesize": "Kinkrahu’ na Tang’an",
        "filehist-comment": "Tnwang smbbaq miru’",
        "imagelinks": "Pptzyuwaw na sinr’zyut biru’",
        "linkstoimage": "Nyux sbiru’ tay hugal ka {{PLURAL:$1| qutux zngazyan |$1 qutux zngazyan}}sp’ubuy sa biru’ qaniy.",
        "nolinkstoimage": "Ungat ana qutux wal ’mubuy sa biru’ na ana nanu’ zyuwaw qaniy.",
        "sharedupload-desc-here": "Tang’an qaniy hya’ ga  kahul squw$1 ruw hazi’ ana wal sptzyuwaw na cwan’an bbzinah. \nTay kyahu’ cyux spkita’ sa Tang’an qaniy hya’ ga cyux squw [$2 Tang’an pinqzyu’ zngayan ] na qsahuy pinqzyuwan.",
+       "shared-repo-from": "minkahul sa $1",
+       "shared-repo": "pglgan mita’ ruw pglgan mtzyuwaw na ssliyan Tang’an",
        "upload-disallowed-here": "Iyat su’ bauqn ’mumuk quw biru’ na zayzyuwaw qaniy.",
        "filerevert": "Psbzih $1",
+       "filerevert-legend": "Psbzinah qu Tang’an",
        "filerevert-comment": "’ringan:",
+       "filerevert-submit": "Psbzih",
+       "filedelete": "’zyuciy $1",
+       "filedelete-legend": "Pzyuciy Ta’an",
        "filedelete-comment": "’ringan:",
        "filedelete-submit": "’muyut",
+       "filedelete-reason-otherlist": "Ringan na bzinah",
+       "filedelete-edit-reasonlist": "Sr’zyut miru’ sa ’ringan na pinzyutan",
+       "filedelete-maintenance-title": "Ini’ baqiy ’muzyut Taang’an",
+       "mimesearch": "MIME hhkangi’",
        "download": "syacay",
+       "unwatchedpages": "Ini’ klhangiy mita’ na zngazyan",
+       "listredirects": "T’ringun pglaing lawziy binzyagan sa kktan",
+       "listduplicatedfiles": "T’ringiy lawziy Tang’an na ktan binkgan",
+       "unusedtemplates": "Iyat pintzyuwaw na’ na mopan",
        "randompage": "Random page",
        "randomincategory-submit": "Musa’",
        "statistics": "Sinqunan plpuw",
+       "statistics-header-pages": "Sinqunan plpuw sa zngazyan",
+       "statistics-header-edits": "Sr’zyut miru’ sinqunan plpuw",
+       "statistics-header-hooks": "Sinqunan plpuw na bzinah",
+       "statistics-articles": "Zngayan na biru’ qaniy",
+       "statistics-pages": "Zzngayan",
+       "statistics-files": "Wal pawsun sa kktan quw Tang’an",
+       "statistics-users-active": "Ini’ hngaw mtzyuwaw na pptyuwaw",
+       "pageswithprop-prop": "Lalu’ na ubuy mkgluw:",
        "pageswithprop-submit": "Musa’",
        "brokenredirects-edit": "Smr’zyut miru’",
        "brokenredirects-delete": "’muyut",
        "withoutinterwiki-legend": "T’ringan na biru’",
        "withoutinterwiki-submit": "Pkaykita’",
        "nbytes": "$1 {{PLURAL:$1|qutux llpgan na bzyaqan kkayal}}",
+       "ncategories": "$1 {{PLURAL:$1|pintbcyan}}",
+       "nlinks": "$1{{PLURAL:$1|’ubuy}}",
        "nmembers": "$1 {{PLURAL:$1|pinglgan}}",
+       "nrevisions": "min$1 {{PLURAL:$1|smbah}}",
+       "nimagelinks": "Tay $1{{PLURAL:$1|llpgan}}",
+       "lonelypages": "Mtbuci’ na zngayan",
+       "uncategorizedpages": "Zngazyan na iyat pintbuci’",
+       "uncategorizedcategories": "Iyat pintbuci’ na pptbcyun",
+       "uncategorizedimages": "Tang’an na iyat pintbuci’",
+       "uncategorizedtemplates": "Musa’ ptbcyun sa kkbalay nn nanu’",
+       "unusedcategories": "Ini’ ptzyawganiy na’na pintbuci’",
+       "unusedimages": "Ini’ aniy mtzyuwaw na’ na Tang’an",
+       "wantedcategories": "Musa’ sawyan magal ka ptbuci’",
+       "wantedpages": "Musa’ sawyan magal ka zngazyan",
+       "wantedfiles": "Musa’ sawyan magal ka Tang’an",
+       "wantedtemplates": "Musa’ sawyan magal ka mopan",
        "prefixindex-submit": "Pkaykita’",
+       "shortpages": "R’tung iyal na zngazyan",
+       "longpages": "Hmzinas iyal na zngazyan",
+       "protectedpages": "Klhangan na zngazyan",
        "protectedpages-timestamp": "Ryax zikang",
        "protectedpages-page": "Zzngayan",
        "protectedpages-expiry": "Sinpngan ryax",
+       "protectedpages-performer": "Klhangiy quw pptzyuwaw",
+       "protectedpages-params": "Kklahang sa biru’ na chasu’",
        "protectedpages-reason": "’ringan",
+       "protectedpages-submit": "Pkt’aniy",
        "protectedpages-unknown-timestamp": "Ini’ bqbaqiy ginlaylwan",
+       "protectedpages-unknown-performer": "Ini’ bqbaqiy ginlaylwan na pptzyuwaw",
+       "protectedtitles": "Klhangan na lalu’ na kkayal",
+       "protectedtitles-submit": "Pkt’aniy lalu’ na kkayal",
+       "listusers": "Binkgan sa zzngazyan na pptzyuwaw",
+       "listusers-desc": "Aring tay krahu’ mkuw ruw mucing cikuy",
        "usereditcount": "$1 {{PLURAL:$1|smr’zyut miru’}}",
        "newpages": "Giqas na zzngzyan",
        "newpages-submit": "Pkaykita’",
        "newpages-username": "Lalu’ na pptzyuwaw:",
+       "ancientpages": "Spzyang smural na zngazyan",
        "move": "Smhzi’",
+       "movethispage": "Hz’aniy quw zngazyan qaniy",
        "notargettitle": "Ungat sinngusan niya’",
        "pager-older-n": "{{PLURAL:$1|smural hazi’ quw $1}}",
        "suppress": "Shtuy",
+       "apihelp": "minblaq kmal na API",
+       "apisandbox": "saho API",
+       "apisandbox-fullscreen": "Ptgyah sa kinglabang na ppcyuwagan",
+       "apisandbox-unfullscreen": "Pkt’aniy",
+       "apisandbox-submit": "Taygalu’ pawsa’",
+       "apisandbox-reset": "Pzyutan",
        "apisandbox-retry": "Talam lawziy",
+       "apisandbox-helpurls": "Minblaq kmayal sa ’ubuy",
+       "apisandbox-examples": "Pinkaykita’ naha’ sa ppslungan",
+       "apisandbox-dynamic-parameters": "Chansu’na bzinah",
+       "apisandbox-dynamic-parameters-add-label": "Twangiy sa chansu’:",
+       "apisandbox-dynamic-parameters-add-placeholder": "Lalu’ na chansu’",
+       "apisandbox-deprecated-parameters": "Wal phngagun na chansu’",
+       "apisandbox-fetch-token": "Mutuw siy biru’ nanak banggo’ na mima’",
+       "apisandbox-submit-invalid-fields-title": "Ungat zyuwaw bbrwan sa kruma’",
        "apisandbox-results": "Pcingan balay",
        "apisandbox-continue": "Siy lhingiy",
+       "apisandbox-continue-clear": "Pzyutan",
        "booksources": "Brbiru’ na inkhulan na pila’",
        "booksources-search-legend": "Hkangi’ tkhulan pila’ na brbiru’",
        "booksources-search": "Hkangi’",
+       "specialloguserlabel": "Pptzyuwaw:",
        "log": "Pinhknyan sraral",
        "logeventslist-submit": "Pkaykita’",
+       "all-logs-page": "Kwara’ ka wal niya’ skayal kwara’ squliq ka bnrwan",
        "checkbox-all": "Kwara’",
        "checkbox-none": "Ungat",
        "checkbox-invert": "Pssyuk mwazyaw",
        "allpagessubmit": "Mtzyuwaw",
        "categories": "Pintbcyan",
        "categories-submit": "Pkaykita’",
+       "sp-deletedcontributions-contribs": "wal miq sa pincyuwagan",
+       "linksearch": "Hhkangi’’ubuy taylnglingay",
+       "linksearch-pat": "Hhkangi’:",
        "linksearch-ns": "Kungcyen na sslalu’:",
        "linksearch-ok": "Hhkangi’",
        "listusers-submit": "Pkaykita’",
+       "listusers-noresult": "Ktan ga ungat qutux pptzyuwaw.",
+       "listusers-blocked": "(wal sqhut)",
+       "activeusers-noresult": "Ktan ga ungat qutux pptzyuwaw",
+       "listgrouprights-group": "Pinglgan",
        "listgrouprights-rights": "Pcingan na sinpngan",
+       "listgrouprights-members": "(binzyagan sa kktan gluw na qutux pinglgan)",
+       "listgrouprights-addgroup-all": "Tawnganiy kwara’ quw cyucu’",
+       "listgrouprights-removegroup-all": "Laxan kwara’ cyuncu’",
+       "listgrouprights-removegroup-self-all": "Laxan kwara’ cyuncu’",
+       "listgrouprights-namespaceprotection-header": "Klhangan sa iyat niya’ kkhmut na sslalu’ sa kung cyen:",
+       "listgrants": "Binkgan biru’ na snwayal miq sa kinri’",
        "listgrants-rights": "Pcingan na sinpngan",
+       "trackingcategories": "Sksa’ sa pintbcyan",
+       "trackingcategories-msg": "Sksa’ sa pintbcyan",
+       "trackingcategories-name": "Lalu’ na sinbbaq",
+       "trackingcategories-desc": "Galan pspngan na snli’ sa snli’ niya’kwara’ ka pintbuci’",
+       "trackingcategories-disabled": "Wal phngagun quw pintbcyan",
+       "mailnologin": "Ungat sstwan lalu’ na rhzyal",
        "emailusername": "Lalu’ na pptzyuwaw:",
        "emailusernamesubmit": "Pawsun",
+       "emailfrom": "Squliq smnatu’:",
        "emailto": "Sginbang a:",
        "emailsubject": "Spzyang na ptzyuwaw:",
        "emailmessage": "Pintkaykay’:",
+       "usermessage-editor": "Sni’ nanak sinbbaq zyuwaw na situng",
        "watchlist": "Cyes’ cingtan",
        "mywatchlist": "Kta quw binkgan biru’",
        "watchnologin": "Ini’ su’ kzyup na’",
        "watch": "Kita’",
+       "watchthispage": "Kta quw zngazyan qaniy",
+       "unwatch": "Laxiy kaygaliy",
+       "unwatchthispage": "Hngaw kmyagal",
+       "notanarticle": "Zngazyan na iyat kay’ balay na binrwan",
        "watchlist-hide": "Lqing",
        "watchlist-submit": "Pkaykita’",
+       "wlshowhideminor": "msnzik sa spzyang balay sinr’zyut miru’",
        "wlshowhidebots": "squliq na kikay",
+       "wlshowhideliu": "wal pbiru’quwpptzyuwaw",
        "wlshowhideanons": "inqing lalu’ nqu squliq cyux mbing",
+       "wlshowhidepatr": "wal ktan bniru’ na sinr’zyut",
+       "wlshowhidemine": "smr’zyut maku’ miru’",
+       "wlshowhidecategorization": "Pintbcyan na zngazyan",
+       "watchlist-options": "Wwazyaw sa’ kkita’ sa binkgan sa kktan",
        "enotif_impersonal_salutation": "{{SITENAME}} kwara’ ka cyux mbing ka qutux qutux ngasal",
        "enotif_anon_editor": "inqing lalu’ nqu squliq cyux mbing $1",
+       "enotif_minoredit": "Qaniy hya’ ga mszik na musa’ sr’tun miru’",
+       "deletepage": "Pzyuciy zngazyan",
+       "confirm": "Wal balay srhgun",
        "delete-confirm": "’muyut \"$1\"",
+       "delete-legend": "’muyut",
        "historyaction-submit": "Pkaykita’",
+       "actioncomplete": "Tmasuq mtzyuwaw",
+       "actionfailed": "Wal yaqih pintzyuwaw",
        "dellogpage": "Wayal pzyutan ka bniru’ qasa",
+       "deletionlog": "pzyuciy quw binrwan",
        "deletecomment": "’ringan:",
+       "deletereasonotherlist": "Ringan na bzinah",
+       "delete-edit-reasonlist": "Sr’zyut miru’ sa ’ringan na pinzyutan",
+       "rollback": "Psbzinah quw sinr’zyut miru’",
        "rollbacklink": "psbnahun",
        "rollbacklinkcount": "psbzinah squw  {{PLURAL:sinr’zyut miru’ sa|$1}}",
+       "rollbackfailed": "Psbzinah sa wal yaqih",
+       "sessionfailure-title": "Wayal yaqih squw p’ubuy",
+       "changecontentmodel-title-label": "Lalu’ na zngazyan",
+       "changecontentmodel-model-label": "Giqas na pinsulung sa inrkyasan na bnrwan tay qsahuy",
        "changecontentmodel-reason-label": "’ringan:",
        "changecontentmodel-submit": "Smbah",
        "logentry-contentmodel-change-revertlink": "psbzih",
+       "logentry-contentmodel-change-revert": "psbzih",
        "protectlogpage": "Kklahang sa bniru’",
+       "protect-legend": "Wal srhgun smhuzyay mlahang",
        "protectcomment": "’ringan:",
        "protectexpiry": "Sinpngan ryax:",
+       "protect_expiry_invalid": "Ini’ baqiy snbah mima’.",
+       "protect_expiry_old": "Wal tmasuq quw sinpngan na ryax",
+       "protect-level-sysop": "Nanak yaquw pklahang swalan",
+       "protect-summary-cascade": "casketing",
        "protect-expiring": "Sinpngan ryax $1 (UTC)",
+       "protect-expiring-local": "sinpngan ryax squw $1",
+       "protect-expiry-indefinite": "ungat tmsuqan na ryax",
+       "protect-othertime": "Zikang tay bzinah:",
+       "protect-othertime-op": "zikang na bzinah",
+       "protect-otherreason-op": "Ringan na bzinah",
+       "protect-edit-reasonlist": "Sr’zyut miru’ quw ’ringan na kklahang",
        "restriction-type": "Pcingan na sinpngan:",
+       "restriction-level": "Pssyukun aring sa wagiq paybkuw ruw mucing sa cikuy",
+       "minimum-size": "Pzyang cikuy balay na Says’",
+       "maximum-size": "Sspngan kinkrahu na sinpngan:",
        "pagesize": "(bzyaqan kkayal na llpgan)",
        "restriction-edit": "Smr’zyut miru’",
        "restriction-move": "Smhzi’",
        "restriction-create": "Ps’rux",
+       "restriction-upload": "Pawsa’ sa kktan",
+       "restriction-level-sysop": "klhangan kwara’",
+       "restriction-level-autoconfirmed": "smka’ quw klhangan",
+       "restriction-level-all": "ana nanu’ pintbcyan kinblayqan",
+       "undelete-fieldset-title": "Psbzinah sa wal sbahun",
        "undeletebtn": "Psbzih",
+       "undeletelink": "psbaybzih minblaq mita’ / psbzih",
        "undeleteinvert": "Pssyuk mwazyaw",
        "undeletecomment": "’ringan:",
        "undelete-search-submit": "Hhkangi’",
        "contributions": "{{GENDER:$1| squliq mniru’}}bniru’ na qmnlah biru’",
        "mycontris": "Snli’ sa binrwan",
        "anoncontribs": "Snli’ sa binrwan",
+       "uctop": "(misuw qaniy ga)",
        "month": "Pcingan na sniyan naha’ ryax na byacing:",
        "year": "Pcingan na sniyan naha’ ryax na kawas",
+       "sp-contributions-newbies-sub": "Pptzyuwaw sa kkbalay sa giqas na Canghaw",
+       "sp-contributions-blocklog": "qmhut smu’ut sa bniru’",
+       "sp-contributions-uploads": "pawsa’ sa kktan",
        "sp-contributions-logs": "pinhknyan sraral",
        "sp-contributions-talk": "mpkal",
+       "sp-contributions-search": "Hkangi’ wal miq sa pincyuwagan",
        "sp-contributions-submit": "Hhkangi’",
        "whatlinkshere": "Aniy p’ubuy tay lpgan sqaniy",
        "whatlinkshere-title": "Aniy ’mubuy sa zngayan tay \"$1\"",
        "whatlinkshere-hidelinks": "$1 p’ubuy",
        "whatlinkshere-filters": "Hmkangi’",
        "whatlinkshere-submit": "Musa’",
+       "block": "Htzyaniy quw pptzyuwaw",
+       "blockip-legend": "Htzyaniy quw pptzyuwaw",
+       "ipbexpiry": "Sinpngan ryax:",
        "ipbreason": "’ringan:",
+       "ipbsubmit": "Qhtaniy quw pptzyuwaw qaniy",
+       "ipbother": "Zikang tay bzinah:",
+       "ipb-confirm": "Sqhut quw wal srhgun smhuzyay",
+       "blockipsuccesssub": "Wal thuzyay qmhut smu’ut",
+       "ipb-edit-dropdown": "Sr’zyut miru’ quw ’ringan na qnhut",
+       "ipb-blocklist-duration-left": "msthay $1",
+       "ipusubmit": "Laxiy quw qnihut qaniy",
        "autoblocklist-submit": "Hhkangi’",
        "blocklist-timestamp": "Ryax zikang",
        "blocklist-target": "Sinpngan na sinngusan",
        "blocklist-expiry": "Sinpngan ryax",
+       "blocklist-by": "Qnhtan na pklahang",
+       "blocklist-params": "Qmhut sa chansu’",
        "blocklist-reason": "’ringan",
        "ipblocklist-submit": "Hhkangi’",
+       "ipblocklist-localblock": "Sqhut tay rhzyal sqaniy",
+       "infiniteblock": "ungat tmsuqan na ryax",
+       "noautoblockblock": "phngaw quw pinzroo na qnhut",
+       "emailblock": "phngaw quw e-meyo’",
        "blocklink": "qmhut",
+       "unblocklink": "tmasuq qnhut",
+       "change-blocklink": "Snbah qnhut",
        "contribslink": "wal miq sa pincyuwagan",
+       "emaillink": "Stwaniy e-meyo’",
+       "blocklogpage": "Qmhut smu’ut sa bniru’",
+       "block-log-flags-noautoblock": "phngaw quw pinzroo na qnhut",
+       "block-log-flags-noemail": "phngaw quw e-meyo’",
+       "lockdb": "Sngusiy cryawku’",
+       "lockbtn": "Sngusiy cryawku’",
        "move-page": "Smhzi’ $1",
+       "move-page-legend": "Hzyaniy quw zngazyan",
+       "newtitle": "Giqas na lalu’ na kkayal:",
+       "movepagebtn": "Hzyaniy quw zngazyan",
+       "pagemovedsub": "Wal thuzyay smhzi’",
        "movelogpage": "Sinhzyan sa bniru’",
        "movereason": "’ringan:",
        "revertmove": "psbzih",
        "export": "Pawsa’ sa bzinah quwzngayan",
+       "exportall": "Stwaniy kwara’ quw zngazyan",
        "export-submit": "Pawsa’",
+       "export-download": "Cucun ruw aki’ mgTang’an",
+       "export-templates": "Kwara’ kin na yaya’ na kkbalay nnanu’",
+       "allmessages": "Sni’ nanak sinbbaq zyuwaw na situng",
+       "allmessagesname": "Lalu’ qinlah lalu’",
+       "allmessagesdefault": "Pinnama’ smi’ pintkaykay’ na biru’",
        "allmessages-filter-legend": "Hhkangi’",
        "allmessages-filter-unmodified": "Iyat sinbah",
        "allmessages-filter-all": "Kwara’ biru’ na zngyan",
+       "allmessages-filter-modified": "Wal sibahun",
+       "allmessages-prefix": "Khlaniy sa puqing biru’ hmkangi’:",
        "allmessages-language": "Kay’:",
        "allmessages-filter-submit": "Mtzyuwaw",
        "allmessages-filter-translate": "Gmbang miru’",
        "thumbnail-more": "Pkrahu’",
+       "filemissing": "Wal mgzyuwaw Tang’an",
+       "import": "Pgwah tay qsahuy sa zngazyan",
+       "import-interwiki-sourcewiki": "Tkhulan wiki:",
+       "import-interwiki-sourcepage": "Inkhulan na zngazyan:",
+       "import-interwiki-templates": "Kwara’ kin na kwara’ yaya’ na kkbalay nnanu’",
+       "import-interwiki-submit": "Pawsa’ sa qsahuy na",
        "import-upload-filename": "Lalu’ na tang’an:",
        "import-comment": "Tnwang smbbaq miru’",
+       "import-revision-count": "min$1 {{PLURAL:$1|smbah}}",
+       "importsuccess": "Wal tmasuq pawsa’ sa qsahuy na...la!",
+       "importlogpage": "Pgwah tay qsahuy sa bniru’",
        "tooltip-pt-userpage": "{{GENDER:|Lalu’ su’ sa pptzyuwaw}}sinr’zyut miru’",
        "tooltip-pt-mytalk": "{{GENDER:|Rwa su’}} zngayan sa spkayal",
        "tooltip-pt-preferences": "{{GENDER:|Rwa su’}}sni’ maku’ ktan krayryax",
        "tooltip-ca-edit": "Sr’zyut squw zzngayan tay sqaniy",
        "tooltip-ca-viewsource": "Ana wayal skun quw zngazyan qaniy ga, musa’ su’ baqun musa’ msbaybzih mita’ na’ quw puqing balay lalu’ na binkgan niya’.",
        "tooltip-ca-history": "Zzngayan qaniy hya’ ga sinbahan sa wayal qasa",
+       "tooltip-ca-protect": "Klhangiy quw zngazyan qaniy",
+       "tooltip-ca-delete": "’zyuciy quw zngazyan qaniy",
+       "tooltip-ca-move": "Hz’aniy quw zngazyan qaniy",
        "tooltip-ca-watch": "Aniy tmwang sa baqun du’ mita’ na biru’ binkgan ka ggyahan llpgan qaniy",
        "tooltip-search": "Hmkangi’ sa {{SITENAME}}",
        "tooltip-search-go": "Maha maki’ balay mtnaq lalu’ sa zzngayan qaniy ga, hala ta’ sa zzngayan qasa.",
        "tooltip-ca-nstab-template": "Kta quw mopan",
        "tooltip-ca-nstab-category": "psbzih mita’ sa pintbcyan na zngazyan",
        "tooltip-save": "Sku’ qu wayal su’ sbahun",
+       "tooltip-publish": "Kaylaniy kwara’ squliq quw sinbah su’",
        "tooltip-preview": "Zik na sskun su’ quw sinbahan su’ ga, sbnahiy mita’ quw sinbah su’.",
        "tooltip-diff": "Aniy pkita’ quw wayal su’ sbahun tay qsahuy niya’",
+       "tooltip-watchlistedit-normal-submit": "Laxiy quw lalu’ na kkayal",
+       "tooltip-watchlistedit-raw-submit": "Psqgiqas smbah kkita’ sa bnkuw na kktan",
+       "tooltip-upload": "T’aring pawsa’ sa kktan",
        "tooltip-rollback": "ssbu’ sa ’ubuy squ “Psbznahan” lga musa’ baq mbzinah squw sinr’ztan binrwan na misan mniru’ sa wayal qasa",
        "tooltip-undo": "\"Psbzinah\"hya’ ga mutuw niya’ baqun psbzinah quw sinr’zyut miru’, ruw kahul sa yuran mosu’ gmyah sa pcyuawag na smr’zyut miru’, ana su’ twangan miru’ sa nanu’ quw stwang squw sslalu’ na kkayal qaniy.",
        "tooltip-summary": "Brwaniy quw lalu’ na spzyang bbiru’ su’",
        "others": "bzinah",
+       "creditspage": "Kinbalay sa zngazyan na qutux gluw qasa",
        "simpleantispam-label": "Kmyagal sa kana ptayqihiy na niwan saysyup na kay’ na nnanu.\n<strong>Laxiy</strong> brwaniy sa bbrwan qaniy!",
+       "pageinfo-header-basic": "Puqing balay na ggalan kinbbaq",
+       "pageinfo-header-edits": "Sr’zyut miru’ pincyuwagan sraral",
+       "pageinfo-header-restrictions": "Kklahang sa zngazyan",
+       "pageinfo-header-properties": "Gluw na zngazyan",
+       "pageinfo-display-title": "Pkt’aniy lalu’ na kkayal",
+       "pageinfo-article-id": "Zngazyan na ID",
+       "pageinfo-language": "Kay’ qsahuy na zngazyan",
        "pageinfo-language-change": "smbah",
+       "pageinfo-content-model": "Inrkyasan pinsulung sa qsahuy na zngazyan",
        "pageinfo-content-model-change": "smbah",
        "pageinfo-robot-index": "Snwalan",
+       "pageinfo-robot-noindex": "Laxiy swaliy",
        "pageinfo-watchers": "Number of page watchers",
+       "pageinfo-firstuser": "Kinbalay sa zngazyang",
+       "pageinfo-firsttime": "Zikang na pins’rux sa zngazyan",
+       "pageinfo-lastuser": "Senmung psr’zyut miru’ sa misuw qaniy",
+       "pageinfo-lasttime": "Ryax sinr’zyut miru’ misuw qaniy",
+       "pageinfo-edits": "Sinqunan plpuw na pinsr’zyut miru’",
+       "pageinfo-authors": "Kinkhmay kwara’ na mniru’",
+       "pageinfo-recent-authors": "Senmung pbiru’ sa misuw qaniy",
        "pageinfo-toolboxlink": "Zzngayan na ggalan qqbaqan",
+       "pageinfo-redirectsto": "T’ringun pglaing maras sa:",
+       "pageinfo-redirectsto-info": "ggalan kinbaq zayzyuwaw",
        "pageinfo-contentpage-yes": "Aw’",
+       "pageinfo-protect-cascading": "Kklahang tkhulan sakwara’ ka m’ubuy na ana nanu’",
        "pageinfo-protect-cascading-yes": "Aw’",
+       "pageinfo-protect-cascading-from": "Kklahang tkhulan sakwara’ ka m’ubuy na ana nanu’",
+       "pageinfo-category-info": "Pintbcyan ggalan kinbaq zayzyuwaw",
+       "pageinfo-category-total": "Kinkhmayan na qutux pinglgan",
+       "pageinfo-category-pages": "Kinpzxan na zngazyan",
+       "pageinfo-category-subcats": "Kinpzyux llpgan na uzyuk na pintbcyan",
+       "pageinfo-category-files": "Kinpzyux na Tang’an",
        "pageinfo-user-id": "Mning ID",
+       "markaspatrolleddiff": "Sinbbaq sa wayal gawzyagan mita’",
+       "markedaspatrolled": "Sinbbaq sa wayal gawzyagan mita’",
+       "patrol-log-page": "Inblaq gmawzyaw mita’ binrwan",
+       "log-show-hide-patrol": "$1 inblaq gmawzyaw mita’ binrwan",
+       "log-show-hide-tag": "$1 bniru’ sa lalu’ na qinlah",
        "confirm-markpatrolled-button": "Wal balay",
+       "previousdiff": "← Smural sinr’zyut miru’",
        "nextdiff": "Giqas hazi’ sinr’zyut→",
+       "thumbsize": "Sspngan kinkrahu’ na swotu’:",
        "file-info-size": "$1 × $2 qqblayqan zzyangay, zayzyuwaw biru’ na sspngan kinkrahu’: $3, gluw na mmntnaq MIME: $4",
        "file-nohires": "Ungat qbaqan miq qutux sa musa’ tthuzyay iyal pkaykita’ sa kinslwan iyal na qayqaya’.",
        "svg-long-desc": "SVG biru’ na cyux slyan ana nanu’ zayzyuwaw,kinkrahu’ ktan tay babaw\n$1 × $2 tay babaw na Syangsu’,\nsspngan kinkrahu’ kkita’ syasing:$3",
        "show-big-image-other": "Kwara’ tay bbzinah na {{PLURAL:$2|kinbaqun iyal mita’ na}}:$1",
        "show-big-image-size": "$1 × $2 qqblayqan zzyangay",
        "file-info-gif-looped": "syunxwan",
+       "file-info-gif-frames": "tay$1 {{PLURAL:$1|gnaygay pinzyuwi’an}}",
        "file-info-png-looped": "syunxwan",
+       "file-info-png-frames": "tay$1 {{PLURAL:$1|gnaygay pinzyuwi’an}}",
+       "newimages": "Giqas na lalu’ na sslyan sa biru’ pinzga’",
        "newimages-legend": "Hhkangi’",
+       "noimages": "Ungat ana nanu’ pinzga’",
        "gallery-slideshow-toggle": "Sbah mita' sa syasing bzinah",
        "ilsubmit": "Hhkangi’",
        "bydate": "skahul sa ryax",
+       "ago": "tay glaing na $1",
+       "just-now": "misan",
+       "monday-at": "Ryax tay qutux sa qutux rihay squw $1",
+       "tuesday-at": "Ryax tay sazing sa qutux rihay squw $1",
+       "wednesday-at": "Rryax tay cyugalx sa qutux rihay squw $1",
+       "thursday-at": "Ryax tay spayat sa qutux rihay squw $1",
+       "friday-at": "Ryax tay zmagal sa qutux rihay squw $1",
+       "saturday-at": "Ryax tay mtzyu’ sa qutux rihay squw $1",
+       "sunday-at": "Ryax hngawan sa qutux rihay squw $1",
+       "yesterday-at": "$1 tay shira’",
        "metadata": "Cyuens’cryaw",
        "metadata-help": "Taki’ sa biru’ na kwara’ zayzyuwaw qaniy ga kwara’ kin na zayzyuwaw bbzinah, kwara’ quw zyuwaw sqaniy ga hazi’ na kahul sa pins’rux na Suwe syangciy ini’ ga tmrang squw cyux ps’rux squw Sken ini’ ga cyux tmrang smr’zyut sa Suwe . \nMaha iy wal sbahun squw puqing balay na biru’ cyux syan squw ana nanu’ zyuwaw lga, iyat hazi’ baqun minblaq ppwah kruma’ quw wal minblayqun miru’ na wayal sbahun na zyuwaw hya’ la.",
        "metadata-fields": "maki’ squw bnaykgan na pintkaykay’ ka qsahuy na Cyens’cryaw EXIF ga, syun niya’ sa zzngazyan kwara’ kin na Syasing, nanu’ iy mhiriq quw binrwan niya’ Cyens’cryaw lga nanak yaquw nyux sbiru’ hugal ka pintkaykay’ qaniy msthay.\ncyuens’ cryaw bzinah hya’ lga skun niya’ sa llqingun qasa hya’. \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-imagewidth": "Kinglabang",
+       "exif-imagelength": "Kinwagiq",
+       "exif-bitspersample": "Weyuen na qutux qutux syangsu’",
+       "exif-compression": "Ppkcikuy",
+       "exif-photometricinterpretation": "Sinqtuxan na Syangsu’",
        "exif-orientation": "Ppiray sa iyat ptkkiy ktan quw syasing",
+       "exif-samplesperpixel": "Kinnhmay na Syangsu’",
+       "exif-planarconfiguration": "Paybkuw sa kwara’ biru’ na ana nanu’",
        "exif-xresolution": "Sweping Cyesitu’",
        "exif-yresolution": "Cwec’ Cyesitu’",
+       "exif-stripoffsets": "Cyux ki’an na ggalan sinbbaq ana nanu’",
+       "exif-rowsperstrip": "Qutux qutux binkgan na binrwan",
+       "exif-whitepoint": "Kinplquwi’ na iro’",
        "exif-primarychromaticities": "Spzyang balay na iro’",
        "exif-datetime": "Ryax na sinbah Tang’an squw zikang na sinbahan Tang’an",
+       "exif-imagedescription": "Sni’ lalu’ na syasing",
        "exif-make": "Squliq ka pkbalay squw Syasinki’",
        "exif-model": "Lalu’ na kinblayan Syasingki’",
        "exif-software": "Ggalan pptzyuwaw sa zyuwaw na Tennaw",
+       "exif-artist": "Mniru’",
+       "exif-copyright": "Cinpancyuen",
        "exif-exifversion": "ktan sa kinblayan na Exif",
        "exif-colorspace": "Hhalan mwazyaw sa qqlah sa ini’ ptnaq  kktan na bbiru’",
+       "exif-componentsconfiguration": "Qutux qutux imi’ na syngsu’",
+       "exif-compressedbitsperpixel": "Pptzyuwaw sa ppkcikuy sa syasing",
+       "exif-pixelxdimension": "Kinglabang na pinzga’",
+       "exif-pixelydimension": "Kinwagiq na pinzga’",
+       "exif-usercomment": "Knayal kay’ na pptzyuwaw",
        "exif-datetimeoriginal": "Ryax na sni’ sa Craw squw zikang na sni’ sa Craw",
        "exif-datetimedigitized": "Ryax na minsuwexwa’ squw zikang na minsuwexwa’",
+       "exif-exposuretime": "Zikang na pinsyaxan",
        "exif-fnumber": "Kinsmyaxan na syasingki’",
+       "exif-exposureprogram": "Kkbalay niya’ sa pisyaxan na syasingki’",
+       "exif-isospeedratings": "pspngan kinhaylaw na ISO",
+       "exif-maxaperturevalue": "Pzyang krahu’ sspngan kinsmyax na syasingki’",
        "exif-subjectdistance": "Kintwahiq zyuwaw na sinngusan ppsingan",
+       "exif-meteringmode": "Yaya’ pspngan na sspung sa syax",
        "exif-lightsource": "Puqing na syax",
        "exif-flash": "Pnilaw na pyax pyax",
+       "exif-focallength": "Kintwahiq na kamera’ squw sinngusan niya’",
        "exif-subjectarea": "Rhzyal cyux ki'an na spzyang kkayal",
+       "exif-flashenergy": "Rngu’ kinlawkahan na pnilaw na pyax pyax",
        "exif-subjectlocation": "Cyux ki'an na spzyang kkayal",
+       "exif-exposureindex": "Miru’ kinsnyaxan pinspngan na pspngan pinsyax na syasingki’",
+       "exif-sensingmethod": "Yaya’ pspngan na sspung sa qnbaq sa syax",
+       "exif-filesource": "Tkhulan na Tang’an",
+       "exif-scenetype": "Pintbcyan sa ubuy gluw na mmntnaq sa ppcyuwagan",
+       "exif-customrendered": "Sinpung niya’ nanak kkbalay niya’ sa syasing",
+       "exif-exposuremode": "Kin’ini’ ptnaq pinsyaxan na syax sa syasinki’",
        "exif-whitebalance": "Wayt belns",
+       "exif-scenecapturetype": "Kinini’ ptnaq ppsyasing na rhzyal",
+       "exif-gaincontrol": "Ppklahang sa ppcyuwagan",
+       "exif-contrast": "Kinmtnaq pinspngan na psyasing",
+       "exif-saturation": "Kinms’un",
        "exif-sharpness": "Srp nes",
+       "exif-devicesettingdescription": "Pinqzyuwan sa sni’ niya’ sa kinblayan",
+       "exif-subjectdistancerange": "Lnglingay na kintwahiq zyuwaw na spzyang ppsingan squw ppsyasing",
+       "exif-gpslatituderef": "Pewe’ ini’ ga zanwe’",
+       "exif-gpslatitude": "Wetu’",
+       "exif-gpslongituderef": "Tngcin ini’ ga sicin",
+       "exif-gpslongitude": "Cingtu’",
+       "exif-gpsaltituderef": "Kkita’ sapspngan sa kinwagiq na kaybat",
+       "exif-gpsaltitude": "Kaybat",
+       "exif-gpssatellites": "Pptzyuwaw sa spsukuryuw na wesing",
+       "exif-gpsstatus": "Zyuwaw na GPS su’",
+       "exif-gpsmeasuremode": "Yaya’ pspngan sa sspung",
+       "exif-gpsdop": "Pspngan sa ini’ balay ptkari’",
+       "exif-gpsspeedref": "Sspngan niya’ sa kinhaylagan",
+       "exif-gpsimgdirectionref": "’kran na pinzga’",
+       "exif-gpsdestlatitude": "Wetu’ na sinngusan",
+       "exif-gpsdatestamp": "ryax na GPS",
        "exif-keywords": "Biru’ na Galan sa hhkangi qsahuy na tenaw",
+       "exif-worldregioncreated": "Rhzyal na pinsyasing",
+       "exif-countrycreated": "Syasing pinsyasing na kokka’",
+       "exif-provinceorstatecreated": "Syasing pinsyasing qalang na syo krahu’",
+       "exif-citycreated": "Syasing pinsyasing qalang hugal",
+       "exif-countrydest": "Pkt’aniy quw kokka’",
+       "exif-provinceorstatedest": "Pkt’aniy quw Syo ini’ ga Syuw",
+       "exif-citydest": "Pinkaykita’ ka qalang hugal",
+       "exif-objectname": "Siy say",
+       "exif-specialinstructions": "Kinini’ ptnaq na kinblayqan knayal",
        "exif-headline": "Lalu’",
+       "exif-credit": "Ppkbalay/Pbiq sa pincyuwagan",
        "exif-source": "Tkhulan",
+       "exif-urgency": "Kinptqawhan",
+       "exif-locationdest": "Pzga’ mru’ sa rhzyal",
+       "exif-locationdestcode": "Aniy pinqzyu’ quw ’niwan  na banggo’ nquw cyux niya’ ki’an",
+       "exif-objectcycle": "Hintgan zikang na meti’",
+       "exif-contact": "Prinrak sa ggalan kinbaq zayzyuwaw",
        "exif-writer": "Sinmung miru’",
        "exif-languagecode": "Kay’:",
+       "exif-iimversion": "ubuy gluw bniru’ na IIM",
        "exif-iimcategory": "Ps’anak sa mkgluw",
+       "exif-iimsupplementalcategory": "Pinzbung sa ini’ pintayhuk na pintbuci",
+       "exif-datetimereleased": "Skayal kwara’ squliq squw",
        "exif-identifier": "Biru’ na sinbbaq sa cyux naha’ ptcyuwagun",
+       "exif-lens": "Rawziq na syasingki’ quw pcyawganiy",
+       "exif-serialnumber": "Syuhaw na syasinki’",
+       "exif-cameraownername": "Cinsyasingki’",
        "exif-label": "Qinlah lalu’",
+       "exif-rightscertificate": "Cinkhulan sinhuzyay sa pklahang sa kinri’ na pinhtuw biru’",
+       "exif-copyrighted": "Pancyuen cwangtay",
+       "exif-copyrightowner": "Cinpancyuen",
+       "exif-usageterms": "Gaga’ na binkgan quw pcyawganiy",
+       "exif-webstatement": "Sinbbaq sa kiri’ na pincyuwagan sa wangcalu’",
+       "exif-licenseurl": "’ubuy sa sswayal miq sa kinri’ na pinhtuw biru’",
+       "exif-morepermissionsurl": "’niwan sa bbiq kinri’ na ggalan qinbaq",
+       "exif-disclaimer": "Gaga’ na iyat ppanga’ sikining",
+       "exif-contentwarning": "Pinsbaq niya’ musa’ pinbaqun sa qsahuy nya’",
+       "exif-intellectualgenre": "Gluw na mmntnaq binkgan lmlamu’",
+       "exif-subjectnewscode": "Bango’ na ’niwan sa lalu’ na spzyang lalu’ na kkayal",
+       "exif-event": "Pzga’ miru’ sa zyuwaw",
+       "exif-organisationinimage": "Pzga’ miru’ sa pins’rux gaga’",
+       "exif-personinimage": "Psulung pzga’ squliq",
+       "exif-originalimageheight": "Kinwagiq na ini’ qtabiy na’",
+       "exif-originalimagewidth": "Kinglabang na ini’ qtabiy na’",
        "exif-compression-1": "Ini’ aniy pkcikuy na’",
+       "exif-copyrighted-true": "Klhangan na Panchyen",
+       "exif-copyrighted-false": "Ini’ bqbaqiy ginllwan zyuwaw na cinkinri’ sa pinhtuw biru’",
        "exif-unknowndate": "Ini’ bqbaqiy ginlaylwan na ryax",
        "exif-orientation-1": "Mutuw galan sa puqing pspngan kwara’ na squliq",
        "exif-orientation-2": "Ptbangun pssyuk",
+       "exif-orientation-4": "Pssyuk na ms’rux",
+       "exif-planarconfiguration-1": "ksu’ na pinkrrawq sa pinqthuy",
+       "exif-colorspace-65535": "Ini’’nblayqiy mita’ quw biru’ knita’ rawziq",
+       "exif-componentsconfiguration-0": "ungat",
        "exif-exposureprogram-0": "Ini’ syaniy kay’ na’",
        "exif-exposureprogram-1": "Szyuwi’ na qba’",
+       "exif-exposureprogram-2": "Galan pspngan gluw na pptzyuwaw",
+       "exif-exposureprogram-3": "Sspngan kinsmyax na syasingki’ quw tqs’un",
+       "exif-exposureprogram-4": "Kinhaylagan na pphtan psyasing",
+       "exif-subjectdistance-value": "$1 meta",
        "exif-meteringmode-0": "Ini’ bqbaqiy ginlaylwan",
        "exif-meteringmode-1": "Pinqsugan",
+       "exif-meteringmode-2": "Syun tay kska na ppsingan quw sqtuxan spzyang ssyan iro’ na syasing ’ musa’ cyose",
+       "exif-meteringmode-3": "Spot",
        "exif-meteringmode-4": "Multi-Spot",
+       "exif-meteringmode-5": "Yaya’ na kkbalay",
+       "exif-meteringmode-6": "Iyat kwara’",
        "exif-meteringmode-255": "Bzinah",
        "exif-lightsource-0": "Ini’ bqbaqiy ginlaylwan",
        "exif-lightsource-1": "Snyaxan wagi’",
        "exif-lightsource-2": "Pnilaw na inkwang",
        "exif-lightsource-4": "Pnilaw na pyax pyax",
+       "exif-lightsource-9": "Blaq kayal",
        "exif-lightsource-10": "Mzyulung",
        "exif-lightsource-11": "Tay minkum",
+       "exif-lightsource-17": "Galan pspngan pnilaw A",
+       "exif-lightsource-18": "Galan pspngan pnilaw B",
+       "exif-lightsource-19": "Galan pspngan pnilaw C",
+       "exif-lightsource-255": "Puqing syax na bzinah",
+       "exif-flash-fired-0": "Ini’ gyahiy na’ quw pnilaw na pyax pyax",
+       "exif-flash-fired-1": "Wal gyahan quw pnilaw na pyax pyax",
+       "exif-flash-mode-3": "ziro na mos’ nanak",
+       "exif-flash-function-1": "Ungat btthuzyay na ppilaw na pyax pyax",
+       "exif-flash-redeye-1": "iyat kktalah rawziq na syasing",
        "exif-focalplaneresolutionunit-2": "incun",
        "exif-sensingmethod-1": "Ini’ syaniy kay’ na’",
+       "exif-sensingmethod-7": "Kikay na kkinsa’ sa san sengse",
+       "exif-filesource-3": "Syasing ki’ na suwe",
+       "exif-scenetype-1": "Zga’ na pinsyasing",
        "exif-customrendered-0": "Kwara’ hya’ ga  cngsyu’",
+       "exif-customrendered-1": "Cngsyu’ na sinpung nanak",
+       "exif-exposuremode-0": "Siy psyax nanak",
        "exif-exposuremode-1": "Pinspsyax na squliq",
+       "exif-whitebalance-0": "Mutuw niya’ white balance nanak",
+       "exif-whitebalance-1": "Szyuwi’ na qba’ quw white balance",
        "exif-scenecapturetype-0": "Galan pspngan",
+       "exif-scenecapturetype-1": "Ktan na qlqalang",
        "exif-scenecapturetype-2": "Syasing na squliq",
        "exif-scenecapturetype-3": "Knita’ sa mlhngan na qlqalang",
        "exif-gaincontrol-0": "Ungat",
        "exif-gaincontrol-3": "Kcikuy cikay hmhuwi’",
        "exif-gaincontrol-4": "Kpzyux cikay hmhuwi’",
        "exif-contrast-0": "Galan pspngan",
+       "exif-contrast-1": "Mhnuk",
        "exif-contrast-2": "lawkah/mhitu’",
        "exif-saturation-0": "Galan pspngan",
+       "exif-saturation-1": "Kincikuy na kinms’un",
+       "exif-saturation-2": "Msyaw iyal kinms’un",
        "exif-sharpness-0": "Galan pspngan",
        "exif-sharpness-2": "lawkah/mhitu’",
        "exif-subjectdistancerange-0": "Ini’ bqbaqiy ginlaylwan",
        "exif-subjectdistancerange-1": "Mekro",
+       "exif-subjectdistancerange-2": "Sawbihan mita’",
+       "exif-subjectdistancerange-3": "Pktawhiqun mita’",
        "exif-gpslatitude-n": "Pewe’",
        "exif-gpslatitude-s": "Nanwe’",
        "exif-gpslongitude-e": "Ist longzicyut",
        "exif-gpslongitude-w": "Sicing",
+       "exif-gpsstatus-a": "Cyuw tmrang sukuryuw na’",
+       "exif-gpsstatus-v": "Sukuryuw squw musa’ m’ubuy",
+       "exif-gpsmeasuremode-2": "Sspung na 2-dimensional",
+       "exif-gpsmeasuremode-3": "Sspung na 3-dimensional",
+       "exif-gpsspeed-k": "Qutux spung ga pira’ kirometa’",
+       "exif-gpsspeed-m": "Qutux spung ga pira’ Mayru’",
        "exif-gpsdestdistance-k": "Kirometa’",
        "exif-gpsdestdistance-m": "Inri’",
        "exif-gpsdestdistance-n": "Hayri’",
+       "exif-gpsdop-fair": "Maykura’ tay kska’ ($1)",
+       "exif-objectcycle-a": "Nanak sasan",
+       "exif-objectcycle-p": "Nanak babaw kinryax",
+       "exif-objectcycle-b": "Sasan ruw babaw kryaxan",
+       "exif-gpsdirection-t": "Spzyang balay na ’kran",
+       "exif-gpsdirection-m": "’kran na tiycu’",
        "exif-ycbcrpositioning-1": "Kska’",
+       "exif-ycbcrpositioning-2": "Trnganiy magal quw ppsngan",
        "exif-dc-contributor": "Minniq",
        "exif-dc-date": "Ryax",
+       "exif-dc-publisher": "Syubay na pkbalay biru’",
+       "exif-dc-relation": "Ubuy na meti’",
        "exif-dc-rights": "Pcingan na sinpngan",
+       "exif-dc-source": "Inkhulan meti’",
+       "exif-dc-type": "Pintbcyan sa ubuy gluw na mmntnaq sa meti’",
+       "exif-rating-rejected": "Wal ini’ swaliy",
+       "exif-iimcategory-clj": "Magal qinzqihan squw Horit",
+       "exif-iimcategory-fin": "Kezay squw psyubay",
+       "exif-iimcategory-edu": "Psbaq",
+       "exif-iimcategory-evn": "Qnxan",
        "exif-iimcategory-hth": "Blaq hi’",
+       "exif-iimcategory-hum": "Zyuwna ppglgan squliq babaw cinbwananaw",
+       "exif-iimcategory-lab": "Mtzyuwaw na rngu’",
+       "exif-iimcategory-lif": "Qaynxan squw ’rngawan lmawsay",
+       "exif-iimcategory-pol": "Sezi’",
+       "exif-iimcategory-rel": "Sinhyan gaga’ squw sinhyan",
+       "exif-iimcategory-sci": "Kagak squw gizit na kagak",
+       "exif-iimcategory-soi": "Zyuwaw na Syakay",
        "exif-iimcategory-spo": "Tayyok",
        "exif-iimcategory-wea": "Kayal",
        "exif-urgency-normal": "Galan pspngan ($1)",
+       "exif-urgency-low": "Rrawq ($1)",
+       "exif-urgency-high": "Kinwagiq ($1)",
        "namespacesall": "kwara’",
        "monthsall": "kwara’",
+       "recreate": "T’aring lawziy ps’rux",
+       "confirm-purge-title": "Kwagiy quw zngazyan qaniy",
        "confirm_purge_button": "Wal balay",
        "confirm-watch-button": "Wal balay",
        "confirm-unwatch-button": "Wal balay",
        "imgmultipageprev": "←llpgan tay glaing",
        "imgmultipagenext": "llpgan tay suruw →",
        "imgmultigo": "Aw’!",
+       "img-lang-default": "(pinnama’ smi’ na kay’)",
        "img-lang-go": "Musa’",
        "ascending_abbrev": "pskkrawn paybkuw",
+       "descending_abbrev": "pshhyu’un paybkuw",
        "table_pager_next": "Llpgan tay suruw",
        "table_pager_prev": "Llpgan tay glaing",
        "table_pager_first": "T’ringan balay na llpgan",
        "table_pager_last": "Pucing balay llpgan",
+       "table_pager_limit_label": "Llpgan na kinpzyux na pezi’:",
        "table_pager_limit_submit": "Pawsun",
+       "table_pager_empty": "Ini’ ’luwiy",
+       "autosumm-blank": "Pskawngaciy quw biru’ qsahuy na zngazyan",
+       "autosumm-newblank": "Ps’rux  ungat ana nanu’ na zngazyan",
+       "watchlistedit-normal-title": "Sr’zyut miru’ sa kkita’ binkgan sa kktan",
+       "watchlistedit-normal-submit": "Laxiy quw lalu’ na kkayal",
        "watchlistedit-raw-titles": "Lalu’:",
+       "watchlistedit-raw-submit": "Psqgiqas smbah kkita’ sa bnkuw na kktan",
        "watchlistedit-clear-titles": "Lalu’:",
+       "watchlisttools-clear": "Laxiy kwara’ quw kkita’ squw kktan binkgan",
        "signature": "[[{{ns:user}}:$1|$2]] ([[{{ns:user_talk}}:$1|mpkal]])",
+       "timezone-local": "Rhzyal tay hasa",
        "version": "Ubuy gluw bbiru’ ni",
+       "version-skins": "Ktan tay babaw ka wayal syun qsahuy na pptzyuwaw",
+       "version-specialpages": "Kin ini’ ptnaq na zngazyan",
+       "version-variables": "Pinsbahan",
+       "version-antispam": "Hntuy sa kana wahiy na giway ungat zyuwaw na saysyup",
        "version-other": "Bzinah",
+       "version-mediahandlers": "Hantora na meti’",
+       "version-hooks": "Hooks",
+       "version-hook-name": "Lalu’ napinkikil",
+       "version-hook-subscribedby": "Miru’ sa lalu’",
+       "version-no-ext-name": "[ini’ slluy ]",
        "version-skin-colheader-name": "Ktan na rawziq",
        "version-ext-colheader-version": "Ubuy gluw bbiru’ ni",
        "version-ext-colheader-license": "Biru’ na gaga’ nqu snwayal hmriq sa kinri’",
        "version-ext-colheader-description": "Miblaq pnqzyu’ sa zyuwaw",
+       "version-ext-colheader-credits": "Mniru’",
        "version-poweredby-others": "bzinah",
+       "version-software": "Wayal syun qsahuy na pptzyuwaw",
+       "version-software-product": "Kinbalay",
        "version-software-version": "Ubuy gluw bbiru’ ni",
        "version-entrypoints": "Kkzyup URL",
+       "version-entrypoints-header-entrypoint": "Kkzyup",
        "version-entrypoints-header-url": "URL",
        "version-libraries-library": "Layblari’",
        "version-libraries-version": "Ubuy gluw bbiru’ ni",
        "version-libraries-license": "biru’ na gaga’ nqu snwayal hmriq sa kinri’",
        "version-libraries-description": "Miblaq pnqzyu’ sa zyuwaw",
+       "version-libraries-authors": "Mniru’",
        "redirect-submit": "Mtzyuwaw",
        "redirect-lookup": "Hmkangi’:",
+       "redirect-value": "Kin...:",
        "redirect-user": "Mning ID",
+       "redirect-page": "Zngazyan na ID",
        "redirect-file": "Lalu’ na tang’an",
+       "redirect-logid": "Bbiru’ krayryax ID",
        "redirect-not-exists": "Ini' ’luwiy biru’ na llpgan",
+       "fileduplicatesearch": "Hkangi’ mtpanga’ na Tang’an",
        "fileduplicatesearch-filename": "Lalu’ na tang’an:",
        "fileduplicatesearch-submit": "Hhkangi’",
        "specialpages": "Mnanak na zzngayan",
+       "specialpages-note-top": "Minblaq kmal",
+       "specialpages-group-maintenance": "Kklahang sa biru’ na spkita’ sa thawki’",
+       "specialpages-group-other": "Bzinah ka ini’ ptnaq na zngazyan",
+       "specialpages-group-login": "Mzyup / ps’rux canghaw",
+       "specialpages-group-users": "Pptzyuwawsquwkinri’ na ptzyuwagun",
+       "specialpages-group-highuse": "Zngazyan krayryax",
+       "specialpages-group-pages": "Binzyagan sa kktan na zngazyan",
+       "specialpages-group-pagetools": "Qayqaya’ na zngazyan",
+       "specialpages-group-wiki": "Snli’ kwara’ biru’ zyuwaw na ana nanu’ squw qayqaya’",
+       "blankpage": "Ungat ana nanu’ zngazyan",
+       "tags": "Kya rngu’ na sinbah sa qnlah lalu’",
        "tag-filter": "[[Special:Tags|qinlah lalu’]]hhkangi’:",
+       "tag-filter-submit": "Hhkangi’",
        "tag-list-wrapper": "([[Special:Tags|{{PLURAL:$1|qinlah lalu’}}]]: $2)",
+       "tag-mw-contentmodelchange": "sbah quw pinsulung sa inrkyasan bniru’ niya’ sa qsahuy",
        "tags-title": "Qinlah lalu’",
+       "tags-tag": "Lalu’ na qinlah biru’",
        "tags-source-header": "Tkhulan",
        "tags-active-header": "Gyahiy?",
+       "tags-hitcount-header": "Wal spyawci’na sinbah",
+       "tags-actions-header": "Mmtzyuwaw",
        "tags-active-yes": "Aw’",
        "tags-active-no": "Iyat",
+       "tags-source-extension": "Zwati’ quw smi’ kay’",
+       "tags-source-none": "Iyat sptzyuwaw",
        "tags-edit": "Smr’zyut miru’",
        "tags-delete": "’muyut",
+       "tags-activate": "gyahan",
        "tags-deactivate": "phngagun",
+       "tags-hitcount": "min$1 {{PLURAL:$1|smbah}}",
+       "tags-create-heading": "Ps’rux quw giqas na lalu’ na qinlah",
+       "tags-create-tag-name": "Alu’ na qinlah biru’:",
        "tags-create-reason": "’ringan:",
        "tags-create-submit": "Ps’rux",
+       "tags-delete-title": "Pzyuciy qinlah biru’",
        "tags-delete-reason": "’ringan:",
+       "tags-activate-title": "Sgyah quw qinlah na biru’",
        "tags-activate-reason": "’ringan:",
+       "tags-activate-submit": "Gyahan",
+       "tags-deactivate-title": "Phngagun qinlah lalu’",
        "tags-deactivate-reason": "’ringan:",
+       "tags-deactivate-submit": "Phngagun",
+       "tags-edit-title": "Sr’zyut miru’ qinlah lalu’",
+       "tags-edit-manage-link": "Kklahang sa lalu’ na qnlah",
        "tags-edit-existing-tags-none": "<em>Ungat<em>",
+       "tags-edit-new-tags": "Giqas na qinlah lalu’:",
        "tags-edit-reason": "’ringan:",
+       "tags-edit-success": "Wal siy glaniy kya quw sinbah.",
        "comparepages": "Pspung sa zzngazyan",
+       "compare-page1": "Tay 1 gnyahan llpgan",
        "compare-page2": "Zzngayan 2",
+       "compare-rev1": "Sinbah 1",
+       "compare-rev2": "Sinbah 2",
        "compare-submit": "Pspngun",
        "diff-form": "Kin’ini’ ptnaq",
        "permanentlink": "Mrayrhuw na pin’ubuy",
+       "htmlform-required": "Llpgan qaniy hya’ ga siy kiy brwan.",
        "htmlform-submit": "Pawsun",
+       "htmlform-reset": "Psbzinah quw walmsbah",
        "htmlform-selectorother-other": "Bzinah",
        "htmlform-no": "iyat",
        "htmlform-yes": "Aw’",
+       "htmlform-cloner-create": "Pzyux na’ quw misan tnwang",
        "logentry-delete-delete": "$1 {{GENDER:$2|wal laxan}}zngayan $3",
+       "revdelete-content-hid": "wal lqingun quw binrwan tay qsahuy",
+       "revdelete-content-unhid": "lzxiy quw lnqing qsahuy na bnrwan",
        "logentry-move-move": "$1 {{GENDER:$2|wal shzyun}}zngyan $3 squw $4",
        "logentry-newusers-create": "Wayal tmasuq {{GENDER:$2|ps’rux sq }} quw cin canghaw $1",
        "logentry-upload-upload": "$1 {{GENDER:$2|wal pawsun }} $3",
+       "log-name-managetags": "Qmlah sa lalu’ na bniru’ kklahang",
+       "log-name-tag": "Bniru’ sa lalu’ na qinlah",
        "rightsnone": "(ungat)",
        "feedback-back": "’bzinah",
+       "feedback-cancel": "Laxan",
        "feedback-close": "Tmasuq",
+       "feedback-external-bug-report-button": "Kaylaniy quw kya ’zzyuwaw na gizit",
+       "feedback-dialog-title": "Stwaniy quw bniq su’ kay’",
        "feedback-message": "Pintkaykay’:",
        "feedback-subject": "Spzyang na ptzyuwaw:",
        "feedback-submit": "Pawsun",
+       "feedback-thanks-title": "Mhyway su’!",
+       "feedback-useragent": "’myunaw sa pptzyuwaw:",
        "searchsuggest-search": "Hhkangi’ {{SITENAME}}",
        "searchsuggest-containing": "kwara’ kin na...",
+       "api-error-unknownerror": "Ini’ bqbaqiy ginlaylwan pin’qwan: \"$1\".",
+       "limitreport-walltime": "Spzyang balay pincyuwagan na zikang",
        "limitreport-postexpandincludesize-value": "$1/$2 {{PLURAL:$2|bzyaqan kkayal na llpgan}}",
+       "limitreport-templateargumentsize": "Pspngan kinkrahu’ na chansu’ na Mopan",
        "limitreport-templateargumentsize-value": "$1/$2 {{PLURAL:$2|bzyaqan kkayal na llpgan}}",
+       "limitreport-expansiondepth": "Spzyang balay krahu’ kinzzik na gnyahan",
+       "expandtemplates": "Ptgyah sa yaya’ na kkbalay nn nanu’",
+       "expand_templates_input": "Brwaniy quw biru’:",
        "expand_templates_output": "Pcingan balay",
+       "expand_templates_xml_output": "pawsa’ quw XML",
        "expand_templates_ok": "Wal balay",
+       "expand_templates_remove_comments": "Laxiy quw kmayal",
        "expand_templates_preview": "Pnaynama’ mita’",
        "pagelang-language": "Kay’:",
+       "pagelang-use-default": "Ptzyawganiy sa mnaynama’ sni’ na kay’",
+       "pagelang-select-lang": "Wazyaw kay’",
        "pagelang-reason": "’ringan",
        "pagelang-submit": "Pawsun",
+       "log-name-pagelang": "Bniru’ sa sinbah na kay’",
+       "mediastatistics": "Pinsqun plpuw sa ggalang sinbbaq na meti’",
        "mediastatistics-nbytes": "{{PLURAL:$1|$1 bzyaqan kkayal na llpgan}} ($2; $3%)",
+       "mediastatistics-table-extensions": "Musa’ baqun sptzyuwaw na estensyong",
+       "mediastatistics-table-count": "Kinpzyux na Tang’an",
        "mediastatistics-header-unknown": "Ini’ bqbaqiy ginlaylwan",
+       "mediastatistics-header-bitmap": "Syasing na pitmap",
+       "mediastatistics-header-audio": "Hngzyangan/ Hngya’an",
+       "mediastatistics-header-video": "Iga’",
+       "mediastatistics-header-multimedia": "Smppzyux squw zyuwaw na twometi’",
+       "mediastatistics-header-office": "Pankung",
        "mediastatistics-header-text": "Biru’ mlmlux",
+       "mediastatistics-header-executable": "Blaq sptzyuwaw",
+       "mediastatistics-header-archive": "Wal pkcikuyun ksu’",
+       "mediastatistics-header-total": "Kwara’ tang’an",
+       "json-error-syntax": "Min’uqu’ na kkayal",
+       "headline-anchor-title": "’ubuy sa biru’ gnaygay sqaniy",
        "special-characters-group-latin": "Biru’ na lating",
+       "special-characters-group-latinextended": "Pinslabang na biru’ na Latin",
+       "special-characters-group-ipa": "Biru’ na sinbbaq sa pinsbahan hngzyang na koksay",
        "special-characters-group-symbols": "Sni’ naha’ sa gaga’ na bbiru’",
        "special-characters-group-greek": "Biru’ na Grisya’",
+       "special-characters-group-greekextended": "Pinsglabang biru’ na Girisya’",
+       "special-characters-group-cyrillic": "Biru’ na Kirilis",
+       "special-characters-group-arabic": "Biru’ na Arabiya’",
+       "special-characters-group-arabicextended": "Pinsglabang biru’ na Arabiya’",
        "special-characters-group-persian": "Przn",
+       "special-characters-group-hebrew": "Biru’ na Heburay",
        "special-characters-group-bangla": "Biru’ na Bengr",
+       "special-characters-group-tamil": "Biru’ na tamil",
+       "special-characters-group-telugu": "Biru’ na Telugu’",
+       "special-characters-group-sinhala": "Biru’ na Sinhala",
+       "special-characters-group-gujarati": "Biru’ na kucyarati",
+       "special-characters-group-devanagari": "Tebanagari",
        "special-characters-group-thai": "Biru’ na Taykok",
+       "special-characters-group-lao": "Biru’ na Law",
        "special-characters-group-khmer": "Biru' na Khmer",
+       "special-characters-title-endash": "r’tung na pocehaw",
+       "special-characters-title-emdash": "qruzyux na phocehaw",
+       "special-characters-title-minus": "biru’ na sinbbaq sa hhyu’",
+       "mw-widgets-dateinput-no-date": "Ini’ wazyaw ryax",
+       "mw-widgets-mediasearch-input-placeholder": "Hkangi’ meti’",
+       "mw-widgets-mediasearch-noresults": "Ktan ga ungat quw pcingan balay na zyuwaw.",
        "mw-widgets-titleinput-description-new-page": "ungat zzngayan",
        "mw-widgets-categoryselector-add-category-placeholder": "Twangiy sa pintbcyan...",
+       "mw-widgets-usersmultiselect-placeholder": "Twangiy pzyux na’...",
+       "randomrootpage": "Tay puqing balay zngazyan nquw mutuw siy pspung sa inlungan nanak phtuw angazyan",
+       "log-action-filter-block": "Htzyaniy quw gluw na mmntnaq:",
+       "log-action-filter-delete": "’zyutan quw gluw na mmntnaq:",
+       "log-action-filter-import": "Pawsa’ qsahuy quw gluw na mmntnaq:",
+       "log-action-filter-move": "Hz’aniy quw ubuy na mtntnaq:",
+       "log-action-filter-patrol": "Musa’ gmawzyaw sa gluw na mmntnaq:",
+       "log-action-filter-protect": "Kklhangiy sa ubuy na mtntnaq na...:",
+       "log-action-filter-upload": "Pawsa’ sa kktan quw gluw na mmntnaq:",
        "log-action-filter-all": "Kwara’ biru’ na zngyan",
        "log-action-filter-block-block": "Qmhut",
+       "log-action-filter-block-reblock": "Smbah sa qnhut",
+       "log-action-filter-block-unblock": "Tmasuq qnhut",
+       "log-action-filter-delete-delete": "Pzyuciy quw zngazyan",
+       "log-action-filter-delete-delete_redir": "T’aring pawsa’ sa ’mumuk sa binrwan",
+       "log-action-filter-delete-restore": "Laxiy quw aki’ llaxan na zngazyan",
        "log-action-filter-delete-event": "Pzyutan binrwan",
+       "log-action-filter-delete-revision": "Uzyut sinbah",
+       "log-action-filter-managetags-create": "Ps’rux lalu’ qqlah",
+       "log-action-filter-managetags-delete": "Pzyuciy qinlah na lalu’",
+       "log-action-filter-managetags-activate": "Gyahiy quw qinlah lalu’",
+       "log-action-filter-managetags-deactivate": "Laxiy gyahiy quw ’uzyut na qnlah biru’",
+       "log-action-filter-newusers-autocreate": "Siy ps’rux nanak",
        "log-action-filter-patrol-patrol": "hkangyun na qba’",
+       "log-action-filter-patrol-autopatrol": "Siy usa’ gmawzyaw",
+       "log-action-filter-protect-protect": "Mlahang",
+       "log-action-filter-protect-modify": "Kklahang sa biru’ na sinbah",
+       "log-action-filter-protect-unprotect": "Tmasuq kinlahang",
+       "log-action-filter-protect-move_prot": "Wal shzyun quw kklahang",
        "log-action-filter-rights-rights": "Sbah na qba’",
+       "log-action-filter-rights-autopromote": "Msbah nanak",
+       "log-action-filter-suppress-event": "Laxiy aniy pkita’ quw bniru’",
+       "log-action-filter-suppress-revision": "Sbah quw qnihut sa pkaykita’",
+       "log-action-filter-suppress-delete": "Laxiy pkt’aniy quw zngazyan",
+       "log-action-filter-upload-upload": "Misan sni’",
+       "log-action-filter-upload-overwrite": "T’aring lawziy pawsa’ sa kktan",
+       "authmanager-authplugin-setpass-failed-title": "Wal yaqih quw sinbah sa mima’",
+       "authmanager-authplugin-setpass-bad-domain": "Ungat zyuwaw na wangyu’.",
        "authmanager-email-label": "e-meyo’",
-       "authmanager-email-help": "Zyusyo na e-meyo’"
+       "authmanager-email-help": "Zyusyo na e-meyo’",
+       "authmanager-realname-label": "Spzyang balay lalu’",
+       "authprovider-resetpass-skip-label": "Siy laxiy kya",
+       "authform-newtoken": "Ini’ pintayhuk sawsu’ na ggyah sa lnqing. $1",
+       "authform-wrongtoken": "Mtkari’ quw sawsu’ na ggyah sa lnqing",
+       "specialpage-securitylevel-not-allowed-title": "Laxiy swaliy",
+       "cannotauth-not-allowed-title": "Ini’ pintayhuk pcingan sinpngan na kiri’",
+       "changecredentials": "Sbah quw sinrhuw sinhuzyay",
+       "removecredentials": "Laxiy quw biru’ na sinhuyay",
+       "credentialsform-provider": "Minsinrhuw sinhuzyay gluw na mtntnaq:",
+       "credentialsform-account": "Lalu’ na canghaw",
+       "linkaccounts": "P’ubuy sa lalu’na canghaw",
+       "linkaccounts-success-text": "Wal p’ubuyquw canghaw.",
+       "unlinkaccounts": "Laxiy quw ’ubuy Canghaw",
+       "revid": "sinbah sa $1",
+       "pageid": "Zngazyan na ID $1"
 }
index 547c09c..359ce58 100644 (file)
        "createacct-realname": "అసలు పేరు (ఐచ్చికం)",
        "createacct-reason": "కారణం",
        "createacct-reason-ph": "మీరు మరో ఖాతాను ఎందుకు సృష్టించుకుంటున్నారు",
+       "createacct-reason-help": "సృష్టించిన ఖాతాల చిట్టాలో చూపించే సందేశం",
        "createacct-submit": "మీ ఖాతాను సృష్టించుకోండి",
        "createacct-another-submit": "ఖాతాను సృష్టించు",
        "createacct-continue-submit": "ఖాతా సృష్టిని కొనసాగించండి",
        "changepassword-success": "మీ సంకేతపదం మార్చబడింది!",
        "changepassword-throttled": "కొద్దిసేపటిగా మీరు చాలా లాగిన్ ప్రయత్నాలు చేసారు.\nమళ్ళీ ప్రయత్నించే ముందు $1 ఆగండి.",
        "botpasswords": "బాట్ సంకేతపదాలు",
+       "botpasswords-disabled": "బాట్ సంకేతపదాలను అచేతనం చేసాం.",
+       "botpasswords-no-central-id": "బాఅత్ సంకేతపదాలను వాడాలంటే, మీరు ఒక కేంద్రీకృత ఖాతాలోకి లాగినవ్వాలి.",
+       "botpasswords-createnew": "ఓ కొత్త బాట్ సంకేతపదాన్ని సృష్టించండి",
+       "botpasswords-editexisting": "ఉనికిలో ఉన్న బాట్ సంకేతపదాన్ని మార్చండి",
        "botpasswords-label-appid": "బాట్ పేరు:",
        "botpasswords-label-create": "సృష్టించు",
        "botpasswords-label-update": "తాజాకరించు",
        "passwordreset-emailelement": "వాడుకరిపేరు: \n$1\n\nతాత్కాలిక సంకేతపదం: \n$2",
        "passwordreset-emailsentemail": "ఈ ఈమెయిలు చిరునామా మీ ఖాతాకు అనుసంధించి ఉంటే, సంకేతపదం మార్పు ఈమెయిలు పంపించబడుతుంది.",
        "passwordreset-emailsentusername": "ఈ వాడుకరిపేరుకు ఏదైనా ఈమెయిలు చిరునామా అనుసంధించి ఉంటే, సంకేతపదం మార్పు ఈమెయిలు పంపించబడుతుంది.",
+       "passwordreset-nosuchcaller": "కాలర్ ఉనికిలో లేరు: $1",
        "passwordreset-invalidemail": "తప్పు ఈ-మెయిలు చిరునామా",
        "passwordreset-nodata": "వాడుకరిపేరుగానీ, ఈ-మెయిలు చిరునామా గానీ ఇవ్వలేదు",
        "changeemail": "ఈ-మెయిలు చిరునామా మార్పు లేదా తొలగింపు",
        "missingcommentheader": "<strong>గుర్తు చేస్తున్నాం:</strong> ఈ వ్యాఖ్యకు మీరు విషయం పెట్టలేదు.\n\"$1\"ని మళ్ళీ నొక్కితే, అది లేకుండానే మీ మార్పును భద్రపరుస్తాం.",
        "summary-preview": "దిద్దుబాటు సారాంశం మునుజూపు:",
        "subject-preview": "విషయపు మునుజూపు:",
-       "previewerrortext": "à°®à±\80 à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 à°®à±\81à°¨à±\81à°\9cà±\82à°ªà±\81 à°\9aà±\82à°¡à°\9fà°\82à°²à±\8b à°¤à°ªà±\8dపిదమయింది.",
+       "previewerrortext": "à°®à±\80 à°®à°¾à°°à±\8dà°ªà±\81à°²à±\81 à°®à±\81à°¨à±\81à°\9cà±\82à°ªà±\81 à°\9aà±\82పడà°\82à°²à±\8b à°²à±\8bà°ªà°\82 à°¦à±\8aà°°à±\8dà°²ింది.",
        "blockedtitle": "వాడుకరి నిరోధించబడ్డారు",
        "blockedtext": "<strong>మీ వాడుకరి పేరు లేదా ఐ.పీ. చిరునామా నిరోధించబడింది.</strong>\n\nనిరోధించినది $1.\nఅందుకు ఇచ్చిన కారణం: <em>$2</em>.\n\n* నిరోధం మొదలైన సమయం: $8\n* నిరోధించిన కాలం: $6\n* నిరోధానికి గురైనవారు: $7\n\nఈ నిరోధంపై చర్చించేందుకు మీరు $1 ను గాని, మరెవరైనా [[{{MediaWiki:Grouppage-sysop}}|నిర్వాహకులను]] గాని సంప్రదించవచ్చు.\nమీ [[Special:Preferences|ఖాతా అభిరుచులలో]] సరైన ఈ-మెయిలు చిరునామా ఇచ్చివుండకపోయినా లేదా మిమ్మల్ని  'ఈ వాడుకరికి ఈ-మెయిలు పంపు' సౌలభ్యాన్ని వాడుకోవడం నుండి నిరోధించివున్నా మీరు ఈమెయిలు ద్వారా సంప్రదించలేరు.\nమీ ప్రస్తుత ఐ.పీ. చిరునామా $3, మరియు నిరోధపు ID #$5.\nమీ సంప్రదింపులన్నిటిలోనూ వీటిని పేర్కొనండి.",
        "autoblockedtext": "మీ ఐపీ చిరునామా ఆటోమాటిగ్గా నిరోధించబడింది. ఎందుకంటే ఇదే ఐపీ చిరునామాని ఓ నిరోధిత వాడుకరి ఉపయోగించారు. ఆ వాడుకరిని $1 నిరోధించారు.\nఅందుకు ఇచ్చిన కారణం ఇదీ:\n\n:<em>$2</em>\n\n* నిరోధం మొదలైన సమయం: $8\n* నిరోధించిన కాలం: $6\n* ఉద్దేశించిన నిరోధిత వాడుకరి: $7\n\nఈ నిరోధం గురించి చర్చించేందుకు మీరు $1 ను గానీ, లేదా ఇతర [[{{MediaWiki:Grouppage-sysop}}|నిర్వాహకులను]] గానీ సంప్రదించండి.\n\nమీ [[Special:Preferences|అభిరుచులలో]] సరైన ఈమెయిలు ఐడీని ఇచ్చి ఉంటే తప్ప, మీరు \"ఈ సభ్యునికి మెయిలు పంపు\" అనే అంశాన్ని వాడజాలరని గమనించండి. ఆ సౌలభ్యాన్ని వాడటం నుండి మిమ్మల్ని నిరోధించలేదు.\n\nమీ ప్రస్తుత ఐపీ చిరునామా $3, మరియు నిరోధపు ఐడీ: $5.\nమీ సంప్రదింపులన్నిటిలోను అన్ని పై వివరాలను ఉదహరించండి.",
        "history-edit-tags": "ఎంచుకున్న సంస్కరణల ట్యాగులను సవరించు",
        "rev-deleted-comment": "(మార్పుల సంగ్రహాన్ని తొలగించారు)",
        "rev-deleted-user": "(వాడుకరి పేరుని తొలగించారు)",
-       "rev-deleted-event": "(à°\9aà°¿à°\9fà±\8dà°\9fà°¾ à°µà°¿à°µà°°à°¾à°²à°¨à±\81 à°¤à±\8aà°²à°\97à°¿à°\82à°\9aారà±\81)",
+       "rev-deleted-event": "(à°\9aà°¿à°\9fà±\8dà°\9fà°¾ à°µà°¿à°µà°°à°¾à°²à°¨à±\81 à°¤à±\80à°¸à±\87సాà°\82)",
        "rev-deleted-user-contribs": "[వాడుకరిపేరు లేదా ఐపీ చిరునామాని తొలగించారు  - మార్పుచేర్పుల నుండి మార్పుని దాచారు]",
        "rev-deleted-text-permission": "ఈ పేజీ కూర్పుని <strong>తొలగించారు</strong>.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} తొలగింపు చిట్టా]లో పూర్తి వివరాలు చూడవచ్చు.",
        "rev-deleted-text-unhide": "పేజీ యొక్క ఈ కూర్పును '''తొలగించాం'''.\n[{{fullurl:{{#Special:Log}}/delete|page={{FULLPAGENAMEE}}}} తొలగింపు చిట్టా]లో వివరాలు చూడవచ్చు.\nమీరు కావాలనుకుంటే, [$1 ఈ కూర్పుని చూడవచ్చు].",
        "mergehistory-go": "విలీనం చెయ్యదగ్గ దిద్దుబాట్లను చూపించు",
        "mergehistory-submit": "కూర్పులను విలీనం చెయ్యి",
        "mergehistory-empty": "ఏ కూర్పులనూ విలీనం చెయ్యలేము.",
-       "mergehistory-done": "$1 à°¯à±\8aà°\95à±\8dà°\95 $3 {{PLURAL:$3|à°\95à±\82à°°à±\8dà°ªà±\81ని|à°\95à±\82à°°à±\8dà°ªà±\81లనà±\81}} [[:$2]] à°²à±\8bనిà°\95à°¿ à°\9cయపà±\8dà°°à°¦à°\82à°\97à°¾ à°µà°¿à°²à±\80à°¨à°\82 à°\9aà±\87సాà°\82.",
+       "mergehistory-done": "$1 à°¯à±\8aà°\95à±\8dà°\95 $3 {{PLURAL:$3|à°\95à±\82à°°à±\8dà°ªà±\81à°¨à±\81|à°\95à±\82à°°à±\8dà°ªà±\81లనà±\81}} [[:$2]] à°²à±\8bనిà°\95à°¿ à°µà°¿à°²à±\80à°¨à°\82 {{PLURAL:$3|à°\9aà±\87సాà°\82|à°\9aà±\87సాà°\82}}.",
        "mergehistory-fail": "చరితాన్ని విలీనం చెయ్యలేకపోయాం. పేజీని, సమయాలను సరిచూసుకోండి.",
        "mergehistory-fail-bad-timestamp": "కాలముద్ర చెల్లదు.",
+       "mergehistory-fail-invalid-source": "మూలపు పేజీ సరైనది కాదు.",
+       "mergehistory-fail-invalid-dest": "లక్ష్యిత పేజీ సరైనది కాదు.",
+       "mergehistory-fail-permission": "చరిత్ర విలీనానికి సరిపడా అనుమతులు లేవు.",
+       "mergehistory-fail-self-merge": "మూలం, లక్ష్యం పేజీలు ఒకటే.",
        "mergehistory-no-source": "మూలం పేజీ, $1 లేదు.",
        "mergehistory-no-destination": "గమ్యం పేజీ, $1 లేదు.",
        "mergehistory-invalid-source": "మూలం పేజీకి సరైన పేరు ఉండాలి.",
        "search-file-match": "(ఫైలు విషయంతో సరిపోలుతోంది)",
        "search-suggest": "మీరు అంటున్నది ఇదా: $1",
        "search-rewritten": "$1 కు ఫలితాలు చూపిస్తున్నాం. లేదంటే $2 కోసం వెతకండి.",
-       "search-interwiki-caption": "సోదర ప్రాజెక్టులు",
+       "search-interwiki-caption": "à°¸à±\8bదర à°ªà±\8dà°°à°¾à°\9cà±\86à°\95à±\8dà°\9fà±\81లలà±\8bని à°«à°²à°¿à°¤à°¾à°²à±\81",
        "search-interwiki-default": "$1 నుండి ఫలితాలు:",
        "search-interwiki-more": "(మరిన్ని)",
        "search-interwiki-more-results": "మరిన్ని ఫలితాలు",
        "search-external": "బయటి అన్వేషణ",
        "searchdisabled": "{{SITENAME}} అన్వేషణ తాత్కాలికంగా పని చెయ్యడం లేదు. ఈలోగా మీరు గూగుల్‌ ఉపయోగించి అన్వేషించవచ్చు. గమనిక: గూగుల్‌ వారి {{SITENAME}} ఫలితాలు కాలదోషం పట్టి ఉండే అవకాశం ఉంది.",
        "search-error": "$1 కోసం వెతికేటపుడు లోపమేదో దొర్లింది.",
+       "search-warning": "వెతుకుతూండగా ఓ హెచ్చరిక ఎదురైంది: $1",
        "preferences": "అభిరుచులు",
        "mypreferences": "అభిరుచులు",
        "prefs-edits": "దిద్దుబాట్ల సంఖ్య:",
        "prefs-editwatchlist-clear": "మీ వీక్షణజాబితాను తుడిచివేయండి",
        "prefs-watchlist-days": "వీక్షణ జాబితాలో చూపించవలసిన రోజులు:",
        "prefs-watchlist-days-max": "గరిష్ఠంగా $1 {{PLURAL:$1|రోజు|రోజులు}}",
-       "prefs-watchlist-edits": "విసà±\8dà°¤à±\83à°¤ à°µà±\80à°\95à±\8dà°·à°£ à°\9cాబితాలà±\8b à°\9aà±\82పిà°\82à°\9aవలసిన à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\8dà°²à±\81:",
+       "prefs-watchlist-edits": "à°µà±\80à°\95à±\8dà°·à°£à°\9cాబితాలà±\8b à°\9aà±\82పిà°\82à°\9aవలసిన à°\97à°°à°¿à°·à±\8dà°  à°¦à°¿à°¦à±\8dà°¦à±\81బాà°\9fà±\8dà°² à°¸à°\82à°\96à±\8dà°¯:",
        "prefs-watchlist-edits-max": "గరిష్ఠ సంఖ్య: 1000",
        "prefs-watchlist-token": "వీక్షణాజాబితా టోకెను:",
        "prefs-misc": "ఇతరత్రా",
        "prefs-help-prefershttps": "ఈ అభిరుచి మీరు పైసారి లాగినైనపుడు అమలౌతుంది.",
        "prefswarning-warning": "మీ అభిరుచులలో మీరు చేసిన మార్పులను ఇంకా భద్రపరచలేదు. మీరు \"$1\" ను నొక్కకుండా ఈ పేజీని వదలి వెళ్తే, మీ అభిరుచులు భద్రం కావు.",
        "prefs-tabs-navigation-hint": "చిట్కా: ట్యాబుల జాబితాలో ఓ ట్యాబు నుండి మరోదానికి వెళ్ళేందుకు కుడి ఎడమ బాణాల కీలను వాడవచ్చు.",
-       "userrights": "వాడుకరి హక్కుల నిర్వహణ",
+       "userrights": "వాడుకరి హక్కుల",
        "userrights-lookup-user": "వాడుకరిని ఎంచుకోండి",
        "userrights-user-editname": "వాడుకరిపేరును ఇవ్వండి:",
        "editusergroup": "వాడుకరి గుంపులను చూపించు",
        "editinguser": "{{GENDER:$1|user}} వాడుకరి హక్కులను మారుస్తున్నారు <strong>[[User:$1|$1]]</strong> $2",
+       "viewinguserrights": "{{GENDER:$1|వాడుకరి}} <strong>[[User:$1|$1]]</strong> హక్కులను చూస్తున్నారు $2",
        "userrights-editusergroup": "{{GENDER:$1|వాడుకరి}} సమూహాలను మార్చండి",
        "userrights-viewusergroup": "{{GENDER:$1|వాడుకరి}} గుంపులను చూడండి",
        "saveusergroups": "{{GENDER:$1|వాడుకరి}} గుంపులను భద్రపరచు",
        "userrights-groupsmember": "సభ్యులు:",
        "userrights-groupsmember-auto": "సంభావిత సభ్యులు:",
-       "userrights-groups-help": "à°\88 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°\8fà°¯à±\87 à°\97à±\81à°\82à°ªà±\81లలà±\8b à°\89à°\82డాలà±\8b à°®à±\80à°°à±\81 à°®à°¾à°°à±\8dà°\9aà°µà°\9aà±\8dà°\9aà±\81.\n* à°\9fà°¿à°\95à±\8dà°\95à±\81 à°ªà±\86à°\9fà±\8dà°\9fà°¿à°µà±\81à°\82à°\9fà±\87 à°\86 à°\97à±\81à°\82à°ªà±\81à°²à±\8b à°\88 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°\89à°¨à±\8dà°¨à°\9fà±\8dà°\9fà±\81.\n* à°\9fà°¿à°\95à±\8dà°\95à±\81 à°²à±\87à°\95à±\81à°\82à°\9fà±\87 à°\86 à°\97à±\81à°\82à°ªà±\81à°²à±\8b à°\88 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°²à±\87à°¨à°\9fà±\8dà°\9fà±\81.\n* à°\88 * à°\97à±\81à°°à±\8dà°¤à±\81 à°\89à°\82à°\9fà±\87 à°\92à°\95సారి à°\86 à°\97à±\81à°\82à°ªà±\81ని చేర్చాక మీరు తీసివేయలేరు, లేదా తీసివేసాక తిరిగి చేర్చలేరు.\n* ఈ # గుర్తు ఉంటే ఆ గుంపు కాలం తీరిపోయే సమయాన్ని పెంచగలరు; దాన్ని తగ్గించలేరు.",
+       "userrights-groups-help": "à°\88 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°\8fà°¯à±\87 à°\97à±\81à°\82à°ªà±\81లలà±\8b à°\89à°\82డాలà±\8b à°®à±\80à°°à±\81 à°®à°¾à°°à±\8dà°\9aà°µà°\9aà±\8dà°\9aà±\81.\n* à°\9fà°¿à°\95à±\8dà°\95à±\81 à°ªà±\86à°\9fà±\8dà°\9fà°¿à°µà±\81à°\82à°\9fà±\87 à°¸à°¦à°°à±\81 à°\97à±\81à°\82à°ªà±\81à°²à±\8b à°\88 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°\89à°¨à±\8dà°¨à°\9fà±\8dà°\9fà±\81.\n* à°\9fà°¿à°\95à±\8dà°\95à±\81 à°²à±\87à°\95à±\81à°\82à°\9fà±\87 à°¸à°¦à°°à±\81 à°\97à±\81à°\82à°ªà±\81à°²à±\8b à°\88 à°µà°¾à°¡à±\81à°\95à°°à°¿ à°²à±\87à°¨à°\9fà±\8dà°\9fà±\81.\n* * à°\97à±\81à°°à±\8dà°¤à±\81 à°\89à°\82à°\9fà±\87 à°\92à°\95సారి à°\86 à°\97à±\81à°\82à°ªà±\81à°\95à±\81 చేర్చాక మీరు తీసివేయలేరు, లేదా తీసివేసాక తిరిగి చేర్చలేరు.\n* ఈ # గుర్తు ఉంటే ఆ గుంపు కాలం తీరిపోయే సమయాన్ని పెంచగలరు; దాన్ని తగ్గించలేరు.",
        "userrights-reason": "కారణం:",
        "userrights-no-interwiki": "ఇతర వికీలలో వాడుకరి హక్కులను మార్చడానికి మీకు అనుమతి లేదు.",
        "userrights-nodatabase": "$1 అనే డేటాబేసు లేదు లేదా అది స్థానికం కాదు.",
        "userrights-changeable-col": "మీరు మార్చదగిన గుంపులు",
        "userrights-unchangeable-col": "మీరు మార్చలేని గుంపులు",
+       "userrights-expiry-current": "కాలంతీరే వ్యవధి $1",
        "userrights-expiry-none": "ఎన్నటికీ కాలం తీరిపోదు",
        "userrights-expiry": "కాలం తీరిపోయే వ్యవధి",
        "userrights-expiry-existing": "ప్రస్తుత కాలం తీరిపోయే సమయం: $3, $2",
        "grant-group-email": "ఈమెయిలు పంపించడం",
        "grant-group-administration": "నిర్వాహక చర్యలు చేపట్టడం",
        "grant-group-private-information": "మీ గోపనీయ డేటాను చూడడం",
+       "grant-createaccount": "ఖాతాల సృష్టి",
+       "grant-createeditmovepage": "పేజీల సృష్టి, దిద్దుబాటు, తరలింపు",
+       "grant-delete": "పేజీలు, కూర్పులు, లాగ్ ఎంట్రీల తొలగింపు",
+       "grant-editinterface": "MediaWiki పేరుబరిలోను, వాడుకరి CSS/JavaScript కూ దిద్దుబాట్లు.",
+       "grant-editmycssjs": "వాడుకరి CSS/JavaScript దిద్దుబాటు",
+       "grant-editmyoptions": "మీ అభిరుచుల దిద్దుబాటు",
+       "grant-editmywatchlist": "మీ వీక్షణజాబితా దిద్దుబాటు",
+       "grant-editpage": "ఉనికిలో ఉన్న పేజీల దిద్దుబాటు",
+       "grant-editprotected": "సంరక్షిత పేజీల్లో దిద్దుబాట్లు",
+       "grant-highvolume": "అధిక మొత్తంలో దిద్దుబాట్లు",
+       "grant-oversight": "వాడుకరులను దాచడం, కూర్పులను అణచిపెట్టడం",
+       "grant-patrol": "పేజీల్లో మార్పులపై నిఘా",
+       "grant-privateinfo": "గోపనీయ సమాచారం అందుబాటు",
+       "grant-protect": "పేజీల సంరక్షణ, అరక్షణ",
+       "grant-rollback": "పేజీల్లో చేసిన మార్పుల తిరుగుసేత (రోల్‌బ్యాక్)",
+       "grant-sendemail": "ఇతర వాడుకరులకు ఈమెయిలు పంపడం",
+       "grant-uploadeditmovefile": "దస్త్రాల ఎక్కింపు, రీప్లేసు, తరలింపు",
+       "grant-uploadfile": "కొత్త దస్త్రాల ఎక్కింపు",
        "grant-basic": "ప్రాథమిక హక్కులు",
+       "grant-viewdeleted": "తొలగించిన దస్త్రాలు, పేజీలను చూడడం",
+       "grant-viewmywatchlist": "మీ వీక్షణజాబితాను చూడడం",
        "newuserlogpage": "కొత్త వాడుకరుల చిట్టా",
        "newuserlogpagetext": "ఇది వాడుకరి నమోదుల చిట్టా.",
        "rightslog": "వాడుకరుల హక్కుల మార్పుల చిట్టా",
        "action-createpage": "ఈ పేజీని సృష్టించే",
        "action-createtalk": "ఈ చర్చాపేజీని సృష్టించే",
        "action-createaccount": "ఈ వాడుకరి ఖాతాని సృష్టించే",
+       "action-autocreateaccount": "ఈ బయటి వాడుకరి ఖాతాను ఆటోమాటిగ్గా సృష్టించే",
        "action-history": "ఈ పేజీ యొక్క చరిత్రని చూడండి",
        "action-minoredit": "ఈ మార్పుని చిన్నదిగా గుర్తించే",
        "action-move": "ఈ పేజీని తరలించే",
        "action-viewmywatchlist": "మీ వీక్షణ జాబితాను చూడండి",
        "action-viewmyprivateinfo": "మీ గోపనీయ సమాచారాన్ని చూడండి",
        "action-editmyprivateinfo": "మీ గోపనీయ సమాచారాన్ని సరిదిద్దండి",
-       "action-editcontentmodel": "à°ªà±\87à°\9cà±\80 à°¯à±\8aà°\95à±\8dà°\95 à°\95à°\82à°\9fà±\86à°\82à°\9fà±\81 à°®à±\8bà°¡à°²à±\81à°¨à±\81 à°¸à°µà°°à°¿à°\82à°\9aà±\81",
+       "action-editcontentmodel": "à°ªà±\87à°\9cà±\80 à°¯à±\8aà°\95à±\8dà°\95 à°\95à°\82à°\9fà±\86à°\82à°\9fà±\81 à°®à±\8bà°¡à°²à±\81à°¨à±\81 à°¸à°µà°°à°¿à°\82à°\9aà±\87",
        "action-managechangetags": "ట్యాగులను చేర్చే, (అ)చేతనం చేసే",
        "action-applychangetags": "మీ మార్పులతో ట్యాగులను ఆపాదించే",
        "action-deletechangetags": "డేటాబేసు నుండి ట్యాగులను తొలగించే",
+       "action-purge": "ఈ పేజీని పర్జ్ చేసే",
        "nchanges": "{{PLURAL:$1|ఒక మార్పు|$1 మార్పులు}}",
        "enhancedrc-since-last-visit": "{{PLURAL:$1|చివరి సందర్శన తరువాత}}, $1",
        "enhancedrc-history": "చరితం",
        "recentchanges-legend-heading": "<strong>సూచిక :</strong>",
        "recentchanges-legend-newpage": "{{int:recentchanges-label-newpage}} ([[Special:NewPages|కొత్త పేజీల జాబితా]]ను కూడా చూడండి)",
        "recentchanges-submit": "చూపించు",
+       "rcfilters-tag-remove": "'$1'ను తీసివెయ్యి",
+       "rcfilters-legend-heading": "<strong>సంక్షేపాల (ఎబ్రీవియేషన్లు) జాబితా:</strong>",
+       "rcfilters-other-review-tools": "<strong>ఇతర సమీక్షా ఉపకరణాలు</strong>",
+       "rcfilters-group-results-by-page": "ఫలితాలను పేజీవారీగా గుదిగుచ్చు",
+       "rcfilters-grouping-title": "గుదిగుచ్చడం",
+       "rcfilters-activefilters": "సచేతనమైన వడపోతలు",
+       "rcfilters-advancedfilters": "ఉన్నత వడపోతలు",
+       "rcfilters-limit-title": "చూపించాల్సిన మార్పులు",
+       "rcfilters-limit-shownum": "చివరి {{PLURAL:$1|మార్పును|$1 మార్పులను}} చూపించు",
+       "rcfilters-days-title": "ఇటీవలి రోజులు",
+       "rcfilters-hours-title": "ఇటీవలి గంటలు",
+       "rcfilters-days-show-days": "$1 {{PLURAL:$1|రోజు|రోజులు}}",
+       "rcfilters-days-show-hours": "$1 {{PLURAL:$1|గంట|గంటలు}}",
+       "rcfilters-highlighted-filters-list": "హైలైటు చేసినవి: $1",
+       "rcfilters-quickfilters": "భద్రపరచిన వడపోతకాలు",
+       "rcfilters-quickfilters-placeholder-title": "ఇంకా లింకులు వేటినీ భద్రపరచలేదు",
+       "rcfilters-quickfilters-placeholder-description": "మీ వడపోత సెట్టింగులను భద్రపరచి తరువాత వాడుకోవాలంటే, కింద ఉన్న యాక్టివ్ ఫిల్టర్ ఏరియా లోని పేజీక (బుక్‌మార్కు) ఐకన్ను నొక్కండి.",
+       "rcfilters-savedqueries-defaultlabel": "భద్రపరచిన వడపోతకాలు",
+       "rcfilters-savedqueries-rename": "పేరుమార్చు",
+       "rcfilters-savedqueries-setdefault": "డిఫాల్టుగా సెట్ చెయ్యండి",
+       "rcfilters-savedqueries-unsetdefault": "డిఫాల్టును తీసివెయ్యి",
        "rcfilters-savedqueries-remove": "తొలగించు",
        "rcfilters-savedqueries-new-name-label": "పేరు",
+       "rcfilters-savedqueries-new-name-placeholder": "వడపోతకపు ఉద్దేశమేంటో వివరించండి",
+       "rcfilters-savedqueries-apply-label": "వడపోతకాన్ని సృష్టించు",
+       "rcfilters-savedqueries-apply-and-setdefault-label": "డిఫాల్టు వడపోతకాన్ని సృష్టించు",
+       "rcfilters-savedqueries-cancel-label": "రద్దు చెయ్యి",
+       "rcfilters-savedqueries-add-new-title": "ప్రస్తుత వడపోత సెట్టింగులను భద్రపరచు",
+       "rcfilters-restore-default-filters": "డిఫాల్టు వడపోతకాలను పునఃస్థాపించు",
+       "rcfilters-clear-all-filters": "వడపోతకాలన్నింటినీ తుడిచెయ్యి",
+       "rcfilters-show-new-changes": "సరికొత్త మార్పులను చూడండి",
+       "rcfilters-search-placeholder": "ఇటీవలి మార్పులను వడకట్టు (శోధించండి లేదా టైపించడం మొదలుపెట్టండి)",
+       "rcfilters-invalid-filter": "తప్పు వడపోతకం",
+       "rcfilters-empty-filter": "చేతనంగా ఉన్న వడపోతకాలేమీ లేవు. మార్పుచేర్పు లన్నిటినీ చూపించాం.",
        "rcfilters-filterlist-title": "వడపోతలు",
+       "rcfilters-filterlist-whatsthis": "ఇవి ఎలా పనిచేస్తాయి?",
+       "rcfilters-filterlist-feedbacklink": "ఈ (కొత్త) వడపోత పరికరాలు ఎలా ఉన్నాయో మాకు చెప్పండి",
+       "rcfilters-highlightbutton-title": "ఫలితాలను హైలైటు చెయ్యి",
        "rcfilters-highlightmenu-title": "ఒక రంగును ఎంచుకోండి",
+       "rcfilters-highlightmenu-help": "ఈ లక్షణాన్ని హైలైటు చేసేందుకు ఓ రంగును ఎంచుకోండి",
+       "rcfilters-filterlist-noresults": "వడపోతకాలేమీ కనబడలేదు",
+       "rcfilters-noresults-conflict": "వెతకాల్సిన పదాలు పరస్పరం ఘర్షిస్తున్నందువలన ఫలితాలేమీ రాలేదు.",
+       "rcfilters-state-message-fullcoverage": "ఈగుంపులోని వడపోతలన్నిటినీ ఎంచుకోవడమూ, అసలు దేన్నీ ఎంచుకోకపోవడమూ ఒక్కటే. అంచేత ఈ వడపోత ప్రభావమేమీ ఉండదు. గుంపులో ఈ వడపోతలున్నాయి: $1",
+       "rcfilters-filtergroup-authorship": "కర్తృత్వం",
        "rcfilters-filter-editsbyself-label": "మీ దిద్దుబాట్లు",
        "rcfilters-filter-editsbyself-description": "మీ స్వంత దిద్దుబాట్లు.",
        "rcfilters-filter-editsbyother-label": "ఇతరుల దిద్దుబాట్లు",
        "rcfilters-filter-editsbyother-description": "మీరు చేసినవి కాకుండా మిగిలిన దిద్దుబాట్లన్నీ.",
-       "rcfilters-filtergroup-userExpLevel": "అనుభవ స్థాయి (నమోదైన వాడుకరులకు మాత్రమే)",
-       "rcfilters-filter-user-experience-level-registered-label": "నమోదైనది",
+       "rcfilters-filtergroup-userExpLevel": "వాడుకరి నమోదు, అనుభవం",
+       "rcfilters-filter-user-experience-level-registered-label": "నమోదైనవారు",
+       "rcfilters-filter-user-experience-level-registered-description": "లాగినై ఉన్న వాడుకరులు.",
+       "rcfilters-filter-user-experience-level-unregistered-label": "నమోదు కానివారు",
+       "rcfilters-filter-user-experience-level-unregistered-description": "లాగినై లేని వాడుకరులు.",
        "rcfilters-filter-user-experience-level-newcomer-label": "కొత్తవారు",
-       "rcfilters-filter-user-experience-level-newcomer-description": "10 కంటే తక్కువ దిద్దుబాట్లు, 4 రోజుల కంటే తక్కువ పని.",
+       "rcfilters-filter-user-experience-level-newcomer-description": "10 కంటే తక్కువ దిద్దుబాట్లు, 4 రోజుల కంటే తక్కువ పని చేసిన నమోదైన వాడుకరులు.",
        "rcfilters-filter-user-experience-level-learner-label": "నేర్చుకుంటున్నవారు",
-       "rcfilters-filter-user-experience-level-learner-description": "\"కొత్తవారి\" కంటే ఎక్కువ, \"అనుభవజ్ఞులైన వాడుకరుల\" కంటే తక్కువ అనుభవం.",
+       "rcfilters-filter-user-experience-level-learner-description": "అనుభవ స్థాయి \"కొత్తవారి\"కి, \"అనుభవజ్ఞులైన వాడుకరుల\"కూ మధ్యలో ఉన్న వాడుకరులు.",
        "rcfilters-filter-user-experience-level-experienced-label": "అనుభవజ్ఞులైన వాడుకరులు",
-       "rcfilters-filter-user-experience-level-experienced-description": "30 రోజుల కంటే ఎక్కువ పని, 500 పైచిలుకు దిద్దుబాట్లు.",
+       "rcfilters-filter-user-experience-level-experienced-description": "30 రోజుల కంటే ఎక్కువ పని, 500 కు పైగా దిద్దుబాట్లూ చేసిన వాడుకరులు.",
+       "rcfilters-filtergroup-automated": "ఆటోమాటిక్ మార్పులు",
        "rcfilters-filter-bots-label": "బాట్",
+       "rcfilters-filter-bots-description": "ఆటోమాటిక్ ఉపకరణాలు చేసిన మార్పులు.",
+       "rcfilters-filter-humans-label": "మనిషి (బాట్ కాదు)",
+       "rcfilters-filter-humans-description": "మనుష్యులు చేసిన మార్పులు.",
+       "rcfilters-filtergroup-reviewstatus": "సమీక్ష స్థాయి",
+       "rcfilters-filter-patrolled-label": "నిఘాలో ఉన్నవి",
+       "rcfilters-filter-patrolled-description": "నిఘాలో ఉన్నట్లు గుర్తించిన మార్పులు",
+       "rcfilters-filter-unpatrolled-label": "నిఘాలో లేనివి",
+       "rcfilters-filter-unpatrolled-description": "నిఘాలో ఉన్నట్లు గుర్తించని మార్పులు",
        "rcfilters-filtergroup-significance": "ప్రాముఖ్యం",
        "rcfilters-filter-minor-label": "చిన్న మార్పులు",
        "rcfilters-filter-minor-description": "రచయిత చిన్నవిగా గుర్తు పెట్టిన దిద్దుబాట్లు.",
        "rcfilters-filter-major-label": "చిన్నవి కాని దిద్దుబాట్లు",
        "rcfilters-filter-major-description": "చిన్నవిగా గుర్తు పెట్టని దిద్దుబాట్లు.",
+       "rcfilters-filtergroup-watchlist": "వీక్షణలో ఉన్న పేజీలు",
+       "rcfilters-filter-watchlist-watched-label": "వీక్షణజాబితాలో",
+       "rcfilters-filter-watchlist-watched-description": "మీ వీక్షణ జబితాలో ఉన్న పేజీల్లో జరిగిన మార్పులు.",
+       "rcfilters-filter-watchlist-watchednew-label": "కొత్త వీక్షణజాబితా మార్పులు",
+       "rcfilters-filter-watchlist-watchednew-description": "మార్పులు జరిగాక ఇంకా మీరు చూడని మీ వీక్షణజాబితా లోని పేజీలు.",
+       "rcfilters-filter-watchlist-notwatched-label": "వీక్షణజాబితాలో లేనివి",
+       "rcfilters-filter-watchlist-notwatched-description": "మీ వీక్షణజాబితాలో ఉన్న పేజీల్లో జరిగినవి తప్ప మిగతా మార్పులన్నీ.",
+       "rcfilters-filtergroup-watchlistactivity": "వీక్షణజాబితా కార్యకలాపం",
+       "rcfilters-filter-watchlistactivity-unseen-label": "చూడని మార్పులు",
+       "rcfilters-filter-watchlistactivity-unseen-description": "పేజీల్లో మార్పులు జరిగిన తరువాత మీరింకా చూడనివి.",
+       "rcfilters-filter-watchlistactivity-seen-label": "చూసిన మార్పులు",
+       "rcfilters-filter-watchlistactivity-seen-description": "మార్పులు జరిగాక మీరు చూసేసినవి.",
        "rcfilters-filtergroup-changetype": "దిద్దుబాటు రకం",
        "rcfilters-filter-pageedits-label": "పేజీ దిద్దుబాట్లు",
+       "rcfilters-filter-pageedits-description": "వికీ పాఠ్యంలో, చర్చల్లో, వర్గ వివరణల్లో జరిగిన మార్పులు...",
        "rcfilters-filter-newpages-label": "పేజీల సృష్టి",
        "rcfilters-filter-newpages-description": "కొత్త పేజీలను సృష్టించే దిద్దుబాట్లు.",
        "rcfilters-filter-categorization-label": "వర్గాల దిద్దుబాట్లు",
-       "rcfilters-filter-logactions-description": "నిర్వాహక పనులు, ఖాతా పనులు, పేజీ తొలగింపులు, ఎక్కింపులు....",
+       "rcfilters-filter-categorization-description": "వర్గాల్లో చేర్చిన, తీసేసిన పేజీల రికార్డు.",
+       "rcfilters-filter-logactions-label": "చిట్టాల్లోకి చేరిన కార్యకలాపాలు",
+       "rcfilters-filter-logactions-description": "నిర్వాహక పనులు, ఖాతాల సృష్టి, పేజీ తొలగింపులు, ఎక్కింపులు...",
+       "rcfilters-hideminor-conflicts-typeofchange": "కొన్ని రకాల మార్పులను \"చిన్న\" మార్పులుగా సూచించ జాలరు. అంచేత ఈ వడపోత కింది మార్పు రకాల వడపోతలతో ఘర్షిస్తోంది: $1",
+       "rcfilters-filtergroup-lastRevision": "ఇటీవలి కూర్పులు",
+       "rcfilters-filter-lastrevision-label": "ఇటీవలి కూర్పు",
+       "rcfilters-filter-lastrevision-description": "పేజీలో ఇటీవల జరిగిన చిట్టచివరి మార్పు.",
+       "rcfilters-filter-previousrevision-label": "ఇటీవలి కూర్పు కాదు",
+       "rcfilters-filter-previousrevision-description": "\"చిట్టచివరి కూర్పు\" కాని మార్పులన్నీ.",
+       "rcfilters-filter-excluded": "వదిలేసినవి",
+       "rcfilters-tag-prefix-namespace-inverted": "<strong>:not</strong> $1",
+       "rcfilters-exclude-button-off": "ఎంచుకున్నవాటిని వదిలెయ్యి",
+       "rcfilters-exclude-button-on": "ఎంచుకున్నవాటిని వదిలేస్తున్నాం",
+       "rcfilters-view-advanced-filters-label": "ఉన్నత వడపోతలు",
+       "rcfilters-view-tags": "ట్యాగ్ ఉన్న మార్పులు",
+       "rcfilters-view-namespaces-tooltip": "ఫలితాలను పేరుబరి ప్రకారం వడపోయి",
+       "rcfilters-liveupdates-button": "లైవ్ తాజాకరణలు",
+       "rcfilters-liveupdates-button-title-on": "లైవ్ తాజాకరణలను ఆఫ్ చెయ్యి",
+       "rcfilters-liveupdates-button-title-off": "కొత్త మార్పులు, జరుగుతూండగానే చూపించు",
+       "rcfilters-watchlist-markseen-button": "మాఅర్పులన్నీ చూసినట్లుగా గుర్తించు",
+       "rcfilters-watchlist-edit-watchlist-button": "మీ వీక్షణ జాబితాను సవరించండి",
        "rcnotefrom": "<strong>$3, $4</strong> తరువాత జరిగిన {{PLURAL:$5|మార్పు|మార్పులు}} కింద ఇచ్చాం (<strong>$1</strong> దాకా చూపించాం).",
-       "rclistfrom": "$3, $2 కు ముందు  జరిగిన మార్పులను చూపించు",
+       "rclistfromreset": "తేదీ ఎంపికను రీసెట్ చెయ్యి",
+       "rclistfrom": "$3, $2 తో మొదలుపెట్టి ఆ తరువాత జరిగిన మార్పులను చూపించు",
        "rcshowhideminor": "చిన్న మార్పులను $1",
        "rcshowhideminor-show": "చూపించు",
        "rcshowhideminor-hide": "దాచు",
        "rcshowhidemine": "నా మార్పులను $1",
        "rcshowhidemine-show": "చూపించు",
        "rcshowhidemine-hide": "దాచు",
-       "rcshowhidecategorization": "à°ªà±\87à°\9cà°¿  వర్గీకరణ $1",
+       "rcshowhidecategorization": "à°ªà±\87à°\9cà±\80 వర్గీకరణ $1",
        "rcshowhidecategorization-show": "చూపించు",
        "rcshowhidecategorization-hide": "దాచు",
        "rclinks": "గత  $2 రోజుల లోని చివరి $1 మార్పులను చూపించు",
        "recentchanges-page-added-to-category-bundled": "[[:$1]] వర్గానికి చేర్చబడింది, [[Special:WhatLinksHere/$1|ఈ పేజీ ఇతర పేజీల్లో చేర్చబడింది]]",
        "recentchanges-page-removed-from-category": "[[:$1]] వర్గం నుండి తీసివేయబడింది",
        "recentchanges-page-removed-from-category-bundled": "[[:$1]] వర్గం నుండి తీసివేయబడింది, [[Special:WhatLinksHere/$1|ఈ పేజీ ఇతర పేజీల్లో చేర్చబడింది]]",
+       "autochange-username": "MediaWiki ఆటోమాటిక్ మార్పు",
        "upload": "దస్త్రపు ఎక్కింపు",
        "uploadbtn": "దస్త్రాన్ని ఎక్కించు",
        "reuploaddesc": "మళ్ళీ అప్‌లోడు ఫారంకు వెళ్ళు.",
        "wantedtemplates": "కావాల్సిన మూసలు",
        "mostlinked": "అధిక లింకులు చూపే పేజీలు",
        "mostlinkedcategories": "అధిక లింకులు చూపే వర్గాలు",
-       "mostlinkedtemplates": "à°\8eà°\95à±\8dà°\95à±\81à°µà°\97à°¾ à°\89పయà±\8bà°\97à°¿à°\82à°\9aిన పేజీలు",
+       "mostlinkedtemplates": "à°\8eà°\95à±\8dà°\95à±\81à°µà°\97à°¾ à°\9fà±\8dరానà±\8dà°¸à±\8dâ\80\8cà°\95à±\8dà°²à±\82à°¡à°¯ిన పేజీలు",
        "mostcategories": "అధిక వర్గాలలో చేరిన వ్యాసాలు",
        "mostimages": "అధిక లింకులు గల బొమ్మలు",
        "mostinterwikis": "అత్యధిక అంతరవికీ లింకులు కలిగిన పేజీలు",
        "protectedpages-unknown-timestamp": "తెలియని",
        "protectedpages-unknown-performer": "తెలియని వాడుకరి",
        "protectedtitles": "సంరక్షిత శీర్షికలు",
-       "protectedtitles-summary": "à°¯à±\80 à°ªà±\87à°\9cà±\80à°²à±\8b à°ªà±\8dà°°à°¸à±\8dà°¤à±\81తానిà°\95à°¿ à°¨à°¿à°°à±\8dమాణà°\82 à°¨à°¿à°·à°¿à°¦à±\8dదమà±\88à°¨ à°¶à±\80à°°à±\8dణిà°\95లనà±\8dà°¨à±\80 à°ªà±\8aà°\82à°¦à±\81పరà°\9aబడà±\8dడాయి.à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤à°\82 à°\89à°¨à±\8dà°¨ à°°à°\95à±\8dà°·à°¿à°¤ à°ªà±\87à°\9cà±\80à°²à°\95à±\8bà°¸à°\82 à°¯à°¿à°\95à±\8dà°\95à°¡ à°\9aà±\82à°¡à°\82à°¡à°¿ [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
+       "protectedtitles-summary": "à°¯à±\80 à°ªà±\87à°\9cà±\80à°²à±\8b à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤à°\82 à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà°\95à±\81à°\82à°¡à°¾ à°¨à°¿à°°à±\8bధిà°\82à°\9aబడà±\8dà°¡ à°¶à±\80à°°à±\8dణిà°\95లనà±\8dà°¨à±\80 à°ªà±\8aà°\82à°¦à±\81పరà°\9aబడà±\8dడాయి. à°¸à°\82à°°à°\95à±\8dà°·à°¿à°\82à°\9aబడà±\8dà°¦ à°ªà±\87à°\9cà±\80à°²à°\95à±\8bà°¸à°\82 à°¯à°¿à°\95à±\8dà°\95à°¡ à°\9aà±\82à°¡à°\82à°¡à°¿: [[{{#special:ProtectedPages}}|{{int:protectedpages}}]].",
        "protectedtitlesempty": "ఈ పరామితులతో ప్రస్తుతం శీర్షికలేమీ సరక్షించబడి లేవు.",
        "listusers": "వాడుకరుల జాబితా",
        "listusers-editsonly": "మార్పులు చేసిన వాడుకరులను మాత్రమే చూపించు",
        "apihelp-no-such-module": "\"$1\" మాడ్యూలు కనబడలేదు.",
        "apisandbox": "API ప్రయోగశాల",
        "apisandbox-api-disabled": "ఈ సైటులో API అచేతనమై ఉంది.",
-       "apisandbox-unfullscreen": "à°ªà±\87à°\9cà±\80à°¨à±\81 చూపించు",
+       "apisandbox-unfullscreen": "à°ªà±\87à°\9cà±\80ని చూపించు",
        "apisandbox-submit": "అభ్యర్ధించు",
        "apisandbox-reset": "తుడిచివేయి",
        "apisandbox-retry": "మళ్ళీ ప్రయత్నించు",
        "listgrants-grant": "గ్రాంటు",
        "listgrants-rights": "హక్కులు",
        "trackingcategories": "పహారా కాయు వర్గాలు",
-       "trackingcategories-msg": "పహారా à°\95ారà±\8dà°¯à±\81 à°µà°°à±\8dà°\97à°®à±\81",
+       "trackingcategories-msg": "పహారా కాయు వర్గము",
        "trackingcategories-name": "సందేశం పేరు",
        "trackingcategories-desc": "వర్గపు చేర్పు క్రైటేరియా",
        "broken-file-category-desc": "ఈ పుటలో విరిగిన దస్త్ర లంకె ఉన్నది (దస్త్రం ఉనికిలో లేనప్పుడు దస్త్రానికి ఎంబెడ్ చేయు లంకె).",
        "protectlogpage": "సంరక్షణల చిట్టా",
        "protectlogtext": "ఈ క్రింద ఉన్నది పేజీల సంరక్షణలకు జరిగిన మార్పుల జాబితా.\nప్రస్తుతం అమలులో ఉన్న సంరక్షణలకై [[Special:ProtectedPages|సంరక్షిత పేజీల జాబితా]]ను చూడండి.",
        "protectedarticle": "\"[[$1]]\" సంరక్షించబడింది.",
-       "modifiedarticleprotection": "\"[[$1]]\" సరక్షణ స్థాయిని మార్చాం",
-       "unprotectedarticle": "\"[[$1]]\" à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°°à°\95à±\8dషణనà±\81 à°¤à±\8aà°²à°\97à°¿à°\82à°\9aారà±\81",
+       "modifiedarticleprotection": "\"[[$1]]\" à°¸à°\82à°°à°\95à±\8dà°·à°£ à°¸à±\8dథాయిని à°®à°¾à°°à±\8dà°\9aà°¾à°\82",
+       "unprotectedarticle": "\"[[$1]]\" à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°°à°\95à±\8dషణనà±\81 à°¤à±\8aà°²à°\97à°¿à°\82à°\9aà°¾à°\82",
        "movedarticleprotection": "సంరక్షణా అమరికని \"[[$2]]\" నుండి \"[[$1]]\"కి మార్చారు",
        "protectedarticle-comment": "\"[[$1]]\" ను {{GENDER:$2|సంరక్షించారు}}",
        "modifiedarticleprotection-comment": "\"[[$1]]\" యొక్క {{GENDER:$2|సంరక్షణ స్థాయిని మార్చారు}}",
        "unprotectedarticle-comment": "\"[[$1]]\" ను {{GENDER:$2|సంరక్షణ నుండి తీసివేసారు}}",
-       "protect-title": "\"$1\" à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°°à°\95à±\8dà°·à°£ à°¸à±\8dథాయి à°\85à°®ర్పు",
+       "protect-title": "\"$1\" à°¯à±\8aà°\95à±\8dà°\95 à°¸à°\82à°°à°\95à±\8dà°·à°£ à°¸à±\8dథాయి à°®à°¾ర్పు",
        "protect-title-notallowed": "\"$1\" యొక్క సంరక్షణ స్థాయి",
        "prot_1movedto2": "$1, $2కు తరలించబడింది",
        "protect-badnamespace-title": "సంరక్షించజాలని పేరుబరి",
        "protectcomment": "కారణం:",
        "protectexpiry": "గడువు:",
        "protect_expiry_invalid": "గడువు సమయాన్ని సరిగ్గా ఇవ్వలేదు.",
-       "protect_expiry_old": "à°®à±\80à°°à°¿à°\9aà±\8dà°\9aà°¿à°¨ à°\97à°¡à±\81à°µà±\81 à°ªà±\8dà°°à°¸à±\8dà°¤à±\81à°¤ à°¸à°®à°¯à°\82 à°\95à°\82à°\9fà±\87 à°®à±\81à°\82à°¦à±\81 ఉంది.",
+       "protect_expiry_old": "à°\97à°¡à±\81à°µà±\81 à°\97à°¤ à°\95ాలà°\82à°²à±\8b ఉంది.",
        "protect-unchain-permissions": "మరిన్ని సంరక్షణ వికల్పాలను తెరువు",
        "protect-text": "ఈ పెజీ '''$1''' ఎంత సంరక్షణలొ వుందో మీరు ఇక్కడ చూడవచ్చు, మార్చవచ్చు.",
        "protect-locked-blocked": "నిరోధించబడి ఉండగా మీరు సంరక్షణ స్థాయిని మార్చలేరు. ప్రస్తుతం '''$1''' పేజీకి ఉన్న సెట్టింగులివి:",
        "protect-level-autoconfirmed": "స్వయన్నిర్ధారిత వాడుకరులను మాత్రమే అనుమతించు",
        "protect-level-sysop": "నిర్వాహకులను మాత్రమే అనుమతించు",
        "protect-summary-cascade": "కాస్కేడింగు",
-       "protect-expiring": "$1 (UTC)న కాలంచెల్లుతుంది",
-       "protect-expiring-local": "$1న కాలంచెల్లుతుంది",
+       "protect-expiring": "$1 (UTC)న కాలం చెల్లుతుంది",
+       "protect-expiring-local": "$1న కాలం చెల్లుతుంది",
        "protect-expiry-indefinite": "నిరవధికం",
        "protect-cascade": "ఈ పేజీకి జతపరిచిన పేజీలను కూడా రక్షించు (కాస్కేడింగు రక్షణ)",
        "protect-cantedit": "ఈ పేజీ యొక్క సంరక్షణా స్థాయిని మీరు మార్చలేరు, ఎందుకంటే దాన్ని మార్చే అనుమతి మీకు లేదు.",
        "pagesize": "(బైట్లు)",
        "restriction-edit": "మార్చడం",
        "restriction-move": "తరలించడం",
-       "restriction-create": "à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà±\81",
-       "restriction-upload": "à°\8eà°\95à±\8dà°\95à°¿à°\82à°\9aà±\81",
+       "restriction-create": "à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°\9aà°¡à°\82",
+       "restriction-upload": "à°\8eà°\95à±\8dà°\95à°¿à°\82à°\9aà°¡à°\82",
        "restriction-level-sysop": "పూర్తి సంరక్షణ",
        "restriction-level-autoconfirmed": "అర్థ సంరక్షణ",
        "restriction-level-all": "ఏ స్థాయి అయినా",
        "undelete": "తుడిచివేయబడ్డ పేజీలను చూపించు",
        "undeletepage": "తుడిచివేయబడిన పేజీలను చూపించు, పునఃస్థాపించు",
-       "undeletepagetitle": "'''క్రింద చూపిస్తున్నవి [[:$1]] యొక్క తొలగించిన మార్పులు'''.",
+       "undeletepagetitle": "<strong>క్రింద చూపిస్తున్న వాటిలో [[:$1|$1]] యొక్క తొలగించిన కూర్పు లున్నాయి</strong>.",
        "viewdeletedpage": "తొలగించిన పేజీలను చూడండి",
        "undeletepagetext": "క్రింది {{PLURAL:$1|పేజీని|$1 పేజీలను}} తొలగించారు, కానీ పునఃస్థాపనకు వీలుగా భండాగారంలో ఉన్నాయి.\nభండాగారం నిర్ణీత వ్యవధులలో పూర్తిగా ఖాళీ చేయబడుతుంటుంది.",
        "undelete-fieldset-title": "కూర్పులను పునఃస్థాపించండి",
        "month": "ఈ నెల నుండి (అంతకు ముందువి):",
        "year": "ఈ సంవత్సరం నుండి (అంతకు ముందువి):",
        "sp-contributions-newbies": "కొత్త ఖాతాల యొక్క రచనలని మాత్రమే చూపించు",
-       "sp-contributions-newbies-sub": "కొత్తవారి కోసం",
+       "sp-contributions-newbies-sub": "కొత్త ఖాతాల కోసం",
        "sp-contributions-newbies-title": "కొత్త ఖాతాల వాడుకరుల మార్పుచేర్పులు",
        "sp-contributions-blocklog": "నిరోధాల చిట్టా",
        "sp-contributions-suppresslog": "అణచిపెట్టబడిన {{GENDER:$1|వాడుకరి}} రచనలు",
        "whatlinkshere-hideimages": "$1 దస్త్రపు లంకెలు",
        "whatlinkshere-filters": "వడపోతలు",
        "whatlinkshere-submit": "వెళ్ళు",
-       "autoblockid": "tanaDDu #$1",
+       "autoblockid": "ఆటోనిరోధం #$1",
        "block": "వాడుకరి నిరోధం",
        "unblock": "వాడుకరిపై నిరోధాన్ని తీసెయ్యండి",
        "blockip": "{{GENDER:$1|వాడుకరిని}} నిరోధించు",
        "ipaddressorusername": "ఐపీ చిరునామా లేదా వాడుకరిపేరు:",
        "ipbexpiry": "అంతమయ్యే గడువు",
        "ipbreason": "కారణం:",
-       "ipbreason-dropdown": "*సాధారణ నిరోధ కారణాలు\n** తప్పు సమాచారాన్ని చొప్పించడం\n** పేజీల్లోని సమాచారాన్ని తీసెయ్యడం\n** బయటి సైట్లకు లంకెలతో స్పాము చెయ్యడం\n** పేజీల్లోకి చెత్తను ఎక్కించడం\n** బెదిరింపు ప్రవర్తన/వేధింపులు\n** అనేక ఖాతాలను సృష్టించి దుశ్చర్యకు పాల్పడడం\n** అనుచితమైన వాడుకరి పేరు\n** అదుపు తప్పిన బాటు",
+       "ipbreason-dropdown": "*సాధారణ నిరోధ కారణాలు\n** తప్పు సమాచారాన్ని చొప్పించడం\n** పేజీల్లోని సమాచారాన్ని తీసెయ్యడం\n** బయటి సైట్లకు లంకెలతో స్పాము చెయ్యడం\n** పేజీల్లోకి చెత్తను ఎక్కించడం\n** బెదిరింపు ప్రవర్తన/వేధింపులు\n** అనేక ఖాతాలను సృష్టించి దుశ్చర్యకు పాల్పడడం\n** అనుచితమైన వాడుకరి పేరు",
        "ipb-hardblock": "లాగినై ఉన్న వాడుకరులు ఈ ఐపీ అడ్రసు నుంచి మార్పుచేర్పులు చెయ్యకుండా నిరోధించండి",
-       "ipbcreateaccount": "à°\96ాతా à°¸à±\83à°·à±\8dà°\9fà°¿à°\82à°ªà±\81ని à°¨à°¿à°µà°¾à°°à°¿à°\82à°\9aà±\81",
+       "ipbcreateaccount": "ఖాతా సృష్టిని నివారించు",
        "ipbemailban": "వాడుకరిని ఈ-మెయిల్ చెయ్యకుండా నివారించు",
        "ipbenableautoblock": "ఈ వాడుకరి వాడిన చివరి ఐపీ అడ్రసును, అలాగే ఆ తరువాత వాడే అడ్రసులను కూడా ఆటోమాటిగ్గా నిరోధించు",
        "ipbsubmit": "ఈ సభ్యుని నిరోధించు",
        "ipb-unblock": "వాడుకరి పేరుపై లేదా ఐపీ చిరునామాపై ఉన్న నిరోధాన్ని తొలగించండి",
        "ipb-blocklist": "అమల్లో ఉన్న నిరోధాలను చూపించు",
        "ipb-blocklist-contribs": "{{GENDER:$1|$1}} మార్పులు-చేర్పులు",
-       "ipb-blocklist-duration-left": "$1 మిగిలివున్నాయి",
-       "unblockip": "సభà±\8dà°¯à±\81à°¨ిపై నిరోధాన్ని తొలగించు",
+       "ipb-blocklist-duration-left": "ఇంకా $1 మిగిలి ఉంది.",
+       "unblockip": "వాడà±\81à°\95à°°ిపై నిరోధాన్ని తొలగించు",
        "unblockiptext": "కింది ఫారం ఉపయోగించి, నిరోధించబడిన ఐ.పీ. చిరునామా లేదా సభ్యునికి తిరిగి రచనలు చేసే అధికారం ఇవ్వవచ్చు.",
        "ipusubmit": "ఈ నిరోధాన్ని తొలగించు",
        "unblocked": "[[User:$1|$1]]పై నిరోధం తొలగించబడింది",
        "block-log-flags-noemail": "ఈ-మెయిలుని నిరోధించాం",
        "block-log-flags-nousertalk": "తమ చర్చాపేజీని మార్చలేరు",
        "block-log-flags-angry-autoblock": "మరింత ధృడమైన స్వయంనిరోధకం సచేతనం చేయబడింది",
-       "block-log-flags-hiddenname": "వాడà±\81à°\95à°°à°¿à°ªà±\87à°°à±\81ని à°¦à°¾à°\9aారà±\81",
+       "block-log-flags-hiddenname": "వాడà±\81à°\95à°°à°¿à°ªà±\87à°°à±\81ని à°¦à°¾à°\9aà°¾à°\82",
        "range_block_disabled": "శ్రేణి(రేంజి) నిరోధం చెయ్యగల నిర్వాహక అనుమతిని అశక్తం చేసాం.",
        "ipb_expiry_invalid": "అంతమయ్యే గడువు సరైనది కాదు.",
        "ipb_expiry_temp": "దాచిన వాడుకరిపేరు నిరోధాలు శాశ్వతంగా ఉండాలి.",
index cf24b37..8e22fd4 100644 (file)
        "undo-failure": "การแก้ไขนี้ไม่สามารถย้อนกลับได้ เนื่องจากขัดแย้งกับการแก้ไขระหว่างกลาง",
        "undo-norev": "ไม่สามารถย้อนการแก้ไขนี้กลับ เพราะไม่มีหรือถูกลบไปแล้ว",
        "undo-nochange": "ดูเหมือนว่าการแก้ไขดังกล่าวถูกย้อนกลับแล้ว",
-       "undo-summary": "à¸\97ำà¸\81ลัà¸\9aรุà¹\88à¸\99à¹\81à¸\81à¹\89à¹\84à¸\82 $1 à¹\82à¸\94ย [[Special:Contributions/$2|$2]] ([[User talk:$2|à¸\9eูà¸\94à¸\84ุย]])",
-       "undo-summary-username-hidden": "à¸\97ำà¸\81ลัà¸\9aรุà¹\88à¸\99à¹\81à¸\81à¹\89à¹\84à¸\82 $1 à¹\82à¸\94ยà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¹\84มà¹\88ระà¸\9aุชื่อ",
+       "undo-summary": "ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82 $1 à¸\97ีà¹\88 [[Special:Contributions/$2|$2]] ([[User talk:$2|à¸\84ุย]]) à¸ªà¸£à¹\89าà¸\87",
+       "undo-summary-username-hidden": "ยà¹\89อà¸\99à¸\81ารà¹\81à¸\81à¹\89à¹\84à¸\82 $1 à¸\97ีà¹\88สรà¹\89าà¸\87à¹\82à¸\94ยà¸\9cูà¹\89à¹\83à¸\8aà¹\89à¸\9bà¸\81à¸\9bิà¸\94ชื่อ",
        "cantcreateaccount-text": "การสร้างบัญชีใหม่จากที่อยู่ไอพีนี้ ('''$1''') ถูกระงับโดย [[User:$3|$3]]\n\nเหตุผลที่ $3 ให้ไว้ คือ ''$2''",
        "cantcreateaccount-range-text": "การสร้างบัญชีจากเลขที่อยู่ไอพีในช่วง <strong>$1</strong> ซึ่งรวมเลขที่อยู่ไอพีของคุณ (<strong>$4</strong>) ถูกบล็อกโดย [[User:$3|$3]] \n\nเหตุผลที่ $3 ชี้แจง คือ <em>$2</em>",
        "viewpagelogs": "ดูปูมของหน้านี้",
index 43c0c77..aab3113 100644 (file)
        "sp-contributions-search": "Maghanap ng ambag",
        "sp-contributions-username": "IP Address o bansag:",
        "sp-contributions-toponly": "Ipakita lang ang mga pamamatnugot na mga huling rebisyon",
+       "sp-contributions-newonly": "Ipakita lang ang mga pamamatnugot na mga nalikhang pahina",
        "sp-contributions-submit": "Hanapin",
        "sp-contributions-explain": "",
        "whatlinkshere": "Mga nakaturo dito",
index aad07df..8b816f8 100644 (file)
        "upload_directory_read_only": "Dosya yükleme dizinine ($1) web sunucusunun yazma izni yok.",
        "uploaderror": "Yükleme hatası",
        "upload-recreate-warning": "'''Uyarı: Bu adı taşıyan bir dosya silindi veya taşındı.'''\n\nBu sayfanın silme ve taşıma günlüğü kolaylık için burada sağlanmıştır:",
-       "uploadtext": "Dosya yüklemek için aşağıdaki formu kullanın.\nÖnceden yüklenmiş dosyaları görmek ya da aramak için [[Special:FileList|yüklenmiş dosyalar listesine]] bakın, (tekrar) yüklenenler [[Special:Log/upload|yükleme günlüğü]]nde, silinenler [[Special:Log/delete|silinme günlüğü]]nde tutulumaktadır.\n\nBir sayfaya dosya koymak için bağlantınızda aşağıdaki formlardan birini kullanın;\n* Dosyanın tam sürümünü kullanmak için: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.jpg]]</nowiki></code>'''\n* Sol kenarda bir kutu içinde, altında tanım olarak 'alt metin' ile, 200 piksel genişiğindeki sürümü kullanmak için: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.png|200px|thumb|left|alt metin]]</nowiki></code>'''\n* Dosyayı göstermeden, dosyaya direk bağlantı vermek için: '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dosya.ogg]]</nowiki></code>'''",
+       "uploadtext": "Dosya yüklemek için aşağıdaki formu kullanın.\nÖnceden yüklenmiş dosyaları görmek ya da aramak için [[Special:FileList|yüklenmiş dosyalar listesine]] bakın, (tekrar) yüklenenler [[Special:Log/upload|yükleme günlüğü]]nde, silinenler [[Special:Log/delete|silinme günlüğü]]nde tutulmaktadır.\n\nBir sayfaya dosya koymak için bağlantınızda aşağıdaki formlardan birini kullanın;\n* Dosyanın tam sürümünü kullanmak için: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.jpg]]</nowiki></code>'''\n* Sol kenarda bir kutu içinde, altında tanım olarak 'alt metin' ile, 200 piksel genişiğindeki sürümü kullanmak için: '''<code><nowiki>[[</nowiki>{{ns:file}}<nowiki>:Dosya.png|200px|thumb|left|alt metin]]</nowiki></code>'''\n* Dosyayı göstermeden, dosyaya direkt bağlantı vermek için: '''<code><nowiki>[[</nowiki>{{ns:media}}<nowiki>:Dosya.ogg]]</nowiki></code>'''",
        "upload-permitted": "İzin verilen dosya {{PLURAL:$2|türü|türleri}}: $1.",
        "upload-preferred": "Tercih edilen dosya {{PLURAL:$2|türü|türleri}}: $1.",
        "upload-prohibited": "Yasaklanan dosya {{PLURAL:$2|türü|türleri}}: $1.",
index 79af9d4..01f4a88 100644 (file)
        "permissionserrorstext": "Түбәндәге {{PLURAL:$1|1=сәбәп|сәбәпләр}} аркасында сез бу гамәлне башкара алмыйсыз:",
        "permissionserrorstext-withaction": "$2 гамәлен башкара алмыйсыз. {{PLURAL:$1|1=Сәбәбе|Сәбәпләре}}:",
        "recreate-moveddeleted-warn": "'''Игътибар: Сез бетерелгән бит урынына яңа бит ясамакчы буласыз.'''\n\nСезгә чыннан да бу битне яңадан ясау кирәкме?\nТүбәндә битнең бетерү һәм күчерү көндәлеге китерелә:",
-       "moveddeleted-notice": "Бу бит бетерелгән иде.\nТүбәндә бетерелү һәм күчерелү көндәлекне китерелә.",
+       "moveddeleted-notice": "Бу бит бетерелгән.\nТүбәндә бу битнең бетерелү, якланышы һәм күчерелү көндәлекләре китерелә.",
        "log-fulllog": "Көндәлекне тулысынча карау",
        "edit-hook-aborted": "Үзгәртү махсус процедура тарафыннан кире кагыла.\nСәбәпләре китерелми.",
        "edit-gone-missing": "Битне яңартып булмый.\nУл бетерелгән булырга мөмкин.",
        "recentchanges": "Соңгы үзгәртүләр",
        "recentchanges-legend": "Соңгы үзгәртүләр көйләүләре",
        "recentchanges-summary": "Төрле битләрдә эшләнгән соңгы үзгәртүләр исемлеге.",
+       "recentchanges-noresult": "Сайланган чорда күрсәтелгән шартларга туры килүче төзәтмәләр юк.",
        "recentchanges-feed-description": "Бу агымда соңгы үзгәртүләрне күзәтү.",
        "recentchanges-label-newpage": "Бу үзгәртү белән яңа бит төзелгән",
        "recentchanges-label-minor": "Бу кече үзгәртү",
        "pageinfo-article-id": "Бит идентификаторы",
        "pageinfo-language": "Битнең теле",
        "pageinfo-language-change": "үзгәртү",
+       "pageinfo-content-model": "Бит эчтәлегенең моделе",
        "pageinfo-content-model-change": "үзгәртү",
+       "pageinfo-robot-policy": "Эзләү роботлары тарафыннан индексацияләнү",
        "pageinfo-robot-index": "Рөхсәт",
        "pageinfo-robot-noindex": "Рөхсәтсез",
+       "pageinfo-watchers": "Күзәтүчеләр саны",
+       "pageinfo-few-watchers": "$1 әзрәк {{PLURAL:$1|күзәтүче}}",
+       "pageinfo-redirects-name": "Бу биткә юнәлтүләр саны",
        "pageinfo-firstuser": "Битне төзүче",
        "pageinfo-firsttime": "Битне төзү датасы",
        "pageinfo-lastuser": "Соңгы мөхәррирләүче",
        "pageinfo-lasttime": "Соңгы үзгәртү датасы",
        "pageinfo-edits": "Гомуми төзәтүләр саны",
        "pageinfo-authors": "Гомуми авторлар саны",
+       "pageinfo-recent-edits": "Соңгы вакытта үзгәртүләр ($1 эчендә)",
+       "pageinfo-recent-authors": "Кабатланмас авторлар саны",
        "pageinfo-toolboxlink": "Бит турында мәгълүмат",
        "pageinfo-redirectsto": "Юнәлтү",
        "pageinfo-redirectsto-info": "мәгълүмат",
        "version-libraries-description": "Тасвирлама",
        "version-libraries-authors": "Авторлар",
        "redirect-submit": "Күчү",
+       "redirect-lookup": "Эзләү:",
+       "redirect-value": "Мәгънәсе",
+       "redirect-user": "Кулланучы идентификаторы",
+       "redirect-page": "Бит идентификаторы",
+       "redirect-revision": "Бит юрамасы",
+       "redirect-file": "Файл исеме",
        "fileduplicatesearch": "Бер үк файлларны эзләү",
        "fileduplicatesearch-submit": "Эзләү",
        "specialpages": "Махсус битләр",
        "tags-delete": "бетерү",
        "tags-activate": "активлаштыру",
        "tags-deactivate": "сүндерү",
+       "tags-hitcount": "$1 {{PLURAL:$1|үзгәртү}}",
        "tags-create-submit": "Төзү",
        "comparepages": "Битләрне чагыштыру",
        "compare-page1": "Беренче сәхифә",
        "logentry-newusers-create2": "$1 - $3 исемле хисап язмасы {{GENDER:$2|төзеде}}",
        "logentry-newusers-autocreate": "{{GENDER:$2|кулланучының}} автоматик рәвештә $1 хисап язмасы төзелде",
        "logentry-upload-upload": "$1 {{GENDER:$2|йөкләде}} $3",
+       "logentry-upload-overwrite": "$1 $3 өчен яңа юрама {{GENDER:$2|йөкләде}}",
        "rightsnone": "(юк)",
        "feedback-adding": "Фикерне сәхифәгә өстәү ...",
        "feedback-back": "Артка",
index c4ffd62..3595d24 100644 (file)
        "parser-template-loop-warning": "Виявлена петля у шаблонах: [[$1]]",
        "template-loop-category": "Сторінки з петлями шаблонів",
        "template-loop-category-desc": "Ця сторінка містить петлю шаблонів, тобто шаблон, який рекурсивно викликає сам себе.",
+       "template-loop-warning": "<strong>Попередження:</strong> Ця сторінка викликає[[:$1]], що спричиняє петлю в шаблоні (нескінченний рекурсивний виклик).",
        "parser-template-recursion-depth-warning": "Перевищене обмеження глибини рекурсії шаблону ($1)",
        "language-converter-depth-warning": "Перевищене обмеження глибини мовного конвертора ($1)",
        "node-count-exceeded-category": "Сторінки, на яких перевищено лічильник вузлів",
        "timezoneregion-indian": "Індійський океан",
        "timezoneregion-pacific": "Тихий океан",
        "allowemail": "Дозволити електронну пошту від інших користувачів",
+       "email-blacklist-label": "Заборонити цим користувачам надсилати мені листи на електронну пошту:",
        "prefs-searchoptions": "Пошук",
        "prefs-namespaces": "Простори назв",
        "default": "за замовчуванням",
        "rcfilters-watchlist-markseen-button": "Позначити всі зміни як переглянуті",
        "rcfilters-watchlist-edit-watchlist-button": "Редагувати Ваш список сторінок, за якими Ви спостерігаєте",
        "rcfilters-watchlist-showupdated": "Зміни до сторінок, які Ви не відвідували з моменту здійснення змін, виділені <strong>жирним</strong>, із цілісними маркерами.",
+       "rcfilters-preference-label": "Приховати покращену версію Нових редагувань",
+       "rcfilters-preference-help": "Скасовує зміну дизайну 2017 року та всі інструменти, додані тоді й пізніше.",
        "rcnotefrom": "Нижче знаходяться {{PLURAL:$5|редагування}} з <strong>$3, $4</strong> (відображено до <strong>$1</strong>).",
        "rclistfromreset": "Скинути вибір дати",
        "rclistfrom": "Показати редагування починаючи з $3 $2.",
        "uploadbtn": "Завантажити файл",
        "reuploaddesc": "Повернутися до форми завантаження",
        "upload-tryagain": "Зберегти змінений опис файлу",
+       "upload-tryagain-nostash": "Надіслати повторно завантажений файл та змінений опис",
        "uploadnologin": "Ви не ввійшли в систему",
        "uploadnologintext": "Будь ласка, $1, щоб завантажувати файли.",
        "upload_directory_missing": "Директорія для завантажень ($1) відсутня і не може бути створена веб-сервером.",
        "file-deleted-duplicate-notitle": "Файл, ідентичний до цього файлу, був раніше видалений, і назву було усунено.\nВам слід попросити кого-небудь з можливістю перегляду усуненого файлу даних, щоб проаналізувати ситуацію, перш ніж приступити до повторного завантаження.",
        "uploadwarning": "Попередження",
        "uploadwarning-text": "Будь ласка, змініть наданий нижче опис файлу і спробуйте ще раз.",
+       "uploadwarning-text-nostash": "Будь ласка, завантажте файл повторно, змініть опис нижче і спробуйте ще раз.",
        "savefile": "Зберегти файл",
        "uploaddisabled": "Завантаження заборонене",
        "copyuploaddisabled": "Завантаження через URL вимкнене.",
        "listfiles_size": "Розмір (в байтах)",
        "listfiles_description": "Опис",
        "listfiles_count": "Версії",
-       "listfiles-show-all": "Включати старі версії зображень",
+       "listfiles-show-all": "Включати старі версії файлів",
        "listfiles-latestversion": "Поточна версія",
        "listfiles-latestversion-yes": "Так",
        "listfiles-latestversion-no": "Ні",
        "sp-contributions-newonly": "Показувати тільки редагування, які є створеннями сторінок",
        "sp-contributions-hideminor": "Приховати малі правки",
        "sp-contributions-submit": "Пошук",
+       "sp-contributions-outofrange": "Неможливо показати будь-які результати. Запитуваний діапазон IP-адрес є більшим, аніж CIDR-ліміт у /$1.",
        "whatlinkshere": "Посилання сюди",
        "whatlinkshere-title": "Сторінки, що посилаються на «$1»",
        "whatlinkshere-page": "Сторінка:",
index 6497dfa..69cdba1 100644 (file)
        "toc": "فہرست",
        "showtoc": "دکھائیں",
        "hidetoc": "چھپائیں",
-       "collapsible-collapse": "خاتÙ\85Û\92",
-       "collapsible-expand": "توسیع",
+       "collapsible-collapse": "بÙ\86د Ú©Ø±Û\8cÚº",
+       "collapsible-expand": "کھولیں",
        "confirmable-confirm": "کیا {{GENDER:$1|آپ کو}} اس بات کا یقین ہے؟",
        "confirmable-yes": "جی ہاں",
        "confirmable-no": "جی نہیں",
        "tooltip-preferences-save": "ترجیحات محفوظ کریں",
        "tooltip-summary": "مختصر خلاصہ درج کریں",
        "common.css": "body,\ntextarea {\n    font-family: Amiri;\n}",
+       "group-bureaucrat.css": "/* یہاں درج شدہ سی ایس ایس محض مامورین اداری کے لیے فعال رہے گی */",
+       "group-bureaucrat.js": "/* یہاں درج شدہ جاوا اسکرپٹ محض مامورین اداری کے لیے فعال رہے گی */",
        "anonymous": "{{SITENAME}} {{PLURAL:$1|کا|کے}} گمنام {{PLURAL:$1|صارف|صارفین}}",
        "siteuser": "{{SITENAME}} $1 صارف",
        "anonuser": "{{SITENAME}} کا گمنام صارف $1",
index 3fd3cf9..dbc2206 100644 (file)
        "category-file-count-limited": "An mga nasunod nga {{PLURAL:$1|ka fayl|$1 ka mga faly aada}} han yana nga kaarangay.",
        "listingcontinuesabbrev": "pdyn.",
        "index-category": "Mga nakatudlokan nga pagkli",
-       "noindex-category": "Mga diri nakatudlokan nga pagkli",
+       "noindex-category": "Mga waray nakaindex nga pakli",
        "broken-file-category": "Mga pakli nga mayda utod nga mga sumpay hin paypay",
        "about": "Mahitungod han",
        "article": "Pakli hin sulod",
        "anontalk": "Hiruhimangraw",
        "navigation": "Paglayag",
        "and": "&#32;ngan",
-       "qbfind": "Bilnga",
-       "qbbrowse": "Igdalikyat",
-       "qbedit": "Igliwat",
-       "qbpageoptions": "Ini nga pakli",
-       "qbmyoptions": "Akon mga pakli",
        "faq": "AGG",
-       "faqpage": "Project:AGG",
        "actions": "Mga buhat",
        "namespaces": "Mga ngaran-lat'ang",
        "variants": "Mga pagkadirudilain",
        "edit-local": "Igliwat an lokal nga pagpahayag",
        "create": "Himo-a",
        "create-local": "Igdugang an lokal nga pagpahayag",
-       "editthispage": "Igliwat ini nga pakli",
-       "create-this-page": "Himo-a ini nga pakli",
        "delete": "Para-a",
-       "deletethispage": "Para-a ini nga pakli",
-       "undeletethispage": "Igbalik an ini nga pakli nga napara",
        "undelete_short": "Igkansela an pagpara {{PLURAL:$1|usa nga pagliwat|$1 nga mga pagliwat}}",
        "viewdeleted_short": "{{PLURAL:$1|usa nga ginpara nga pagliwat|$1 ka ginpara nga mga pagliwat}}",
        "protect": "Panalipdi",
        "protect_change": "balyo-a",
-       "protectthispage": "Panalipdi ini nga pakli",
        "unprotect": "Liwani an panalipod",
-       "unprotectthispage": "Kuhaa an panalipod hini nga pakli",
        "newpage": "Bag-o nga pakli",
-       "talkpage": "Pakighimangraw hiunong hini nga pakli",
        "talkpagelinktext": "Hiruhimangraw",
        "specialpage": "Pinaurog nga pakli",
        "personaltools": "Mga pankalugaringon nga garamiton",
-       "articlepage": "Kitaa in may sulod nga pakli",
        "talk": "Hiruhimangraw",
        "views": "Mga paglantaw",
        "toolbox": "Mga higamit",
-       "userpage": "Kitaa in pakli hin gumaramit",
-       "projectpage": "Kitaa in pakli hin proyekto",
        "imagepage": "Kitaa in pakli hin paypay",
        "mediawikipage": "Kitaa in pakli hin mensahe",
        "templatepage": "Kitaa in pakli hin plantilya",
        "redirectedfrom": "(Ginredirekta tikang ha $1)",
        "redirectpagesub": "Redirek nga pakli",
        "redirectto": "Ig-redirect ngadto ha:",
-       "lastmodifiedat": "Ini nga pakli kataposan ginliwat dida han $1, han $2.",
+       "lastmodifiedat": "Ini nga pakli katapusan ginliwat dida han $1, han $2.",
        "viewcount": "Ini nga pakli ginkanhi hin {{PLURAL:$1|makausa|$1 ka beses}}.",
        "protectedpage": "Ginpanalipdan nga pakli",
        "jumpto": "Laktaw ngadto ha:",
        "permissionserrorstext": "Diri ka gintutugotan pagbuhat hito, mahitungod han mga nasunod nga {{PLURAL:$1|katadungan|mga katadungan}}:",
        "permissionserrorstext-withaction": "Waray ka permiso han $2, tungod han masunod nga {{PLURAL:$1|rason|mga rason}}:",
        "recreate-moveddeleted-warn": "'''Pahimatngon: Naghihimo ka hin pakli nga ginpara na.'''\n\nAngay mo hunahunaon kon naangay ba nga magpadayon hin pagliwat hini nga pakli.\nAn talaan hin pagpara ngan pagbalhin hini nga pakli ginhahatag dinhi para hin masayon nga pagkita:",
-       "moveddeleted-notice": "Ini nga pakli in ginpara.\nAn taramdan han pagpara ngan pagbalhin para han pakli in ginhahatag ha ubos para han kasarigan.",
+       "moveddeleted-notice": "Ginpara na inin nga pakli.\nAn talaan han pagpara, pagpanalipod ngan pagbalhin para han pakli in aada ha ubos para hit reperensya.",
        "log-fulllog": "Kitaa an bug-os nga taramdan",
        "edit-gone-missing": "Diri nakakaupdate han pakli.\nBaga inin ginpara na.",
        "edit-conflict": "Diri pagkakauroyon han pagliwat.",
        "page_first": "syahan",
        "page_last": "katapusan",
        "histlegend": "Kaibhan nga pirilion: Igmarka an mga radyo nga kahon han mga pagbag-o para maikumpara ngan igu-a an ''enter'' o an piridlitan ha ubos.<br />\nLeyenda: '''({{int:cur}})''' = kaibhan ha giuurhii nga pag-bag-o, '''({{int:last}})''' = kaibhan ha nahiuna nga pag-bag-o, '''{{int:minoreditletter}}''' = gagmay nga pagliwat.",
-       "history-fieldset-title": "Kaagi han panngaykay",
+       "history-fieldset-title": "Pamiling hin mga rebisyon",
        "history-show-deleted": "Ginpara la",
        "histfirst": "Giunhani",
        "histlast": "Gibag-ohi",
        "search-redirect": "(Ginredirekta tikang ha $1)",
        "search-section": "(bahin $1)",
        "search-category": "(kaarangay $1)",
+       "search-file-match": "(nakaigo hin pareho nga file content)",
        "search-suggest": "Buot sidngon mo ba: $1",
        "search-interwiki-caption": "Mga bugto nga proyekto",
        "search-interwiki-default": "Mga resulta tikang han $1:",
        "sharedupload": "Ini nga fayl tikang han $1 ngan puyde magamit ha iba nga mga proyekto.",
        "sharedupload-desc-there": "Ini nga fayl tikang han $1 ngan puyde magamit ha iba nga mga proyekto.\nAlayon pagkita han [$2 nga pakli hin pagpahayag mahitungod hini nga fayl] para hin dugang nga kasayuran.",
        "sharedupload-desc-here": "An fayl in tikang ha $1 ngan puydi mahigamitan para han iba nga mga proyekto.\nAn paglaladawan han iya [$2 fayl han paglaladawan nga pakli] didto in ginpapakita ha sirong.",
+       "filepage-nofile": "Waray file nga may ngaran hini.",
        "uploadnewversion-linktext": "Igkarga-pasaka an ba-o nga bersyon hini nga paypay",
        "shared-repo-from": "tikang $1",
        "upload-disallowed-here": "Diri nimo masasapaw ini nga paypay.",
        "sp-contributions-search": "Pamiling hin mga ámot",
        "sp-contributions-username": "IP nga adres o nágámit:",
        "sp-contributions-toponly": "Igpakita la an mga pagliwat nga giuurhii an pagbag-o",
+       "sp-contributions-newonly": "Igpakita la an mga ginliwat nga nanhihimo hin pakli",
        "sp-contributions-submit": "Bilnga",
        "whatlinkshere": "Mga nasumpay dinhi",
        "whatlinkshere-title": "Mga pakli nga nasumpay ngadto ha \"$1\"",
        "ipblocklist-submit": "Bilnga",
        "ipblocklist-localblock": "Lokal nga pagpugong",
        "ipblocklist-otherblocks": "Iba {{PLURAL:$1|ka pagpugong|ka mga pagpugong}}",
+       "infiniteblock": "kanunay",
        "expiringblock": "diri madulot pag $1 han $2",
        "anononlyblock": "Waray nagpakilala la",
        "createaccountblock": "Diri ginpapagana an paghimo hin akawnt",
        "version-libraries-license": "Lisensya",
        "version-libraries-description": "Deskripsyon",
        "version-libraries-authors": "Mga awtor",
+       "redirect-summary": "Ini nga pinaurog nga pakli in nagredirect ngadto ha file (ginhatag an filename), usa ka pakli (ginhatag han ID han rebisyon o ID han pakli), usa ka pakli han gumaramit (ginhatag an numero nga ID han gumaramit), o usa ka entrada han log, (ginhatag an ID han log). Paggamit: [[{{#Special:Redirect}}/file/Example.jpg]], [[{{#Special:Redirect}}/page/64308]], [[{{#Special:Redirect}}/revision/328429]], [[{{#Special:Redirect}}/user/101]], o [[{{#Special:Redirect}}/logid/186]].",
        "redirect-submit": "Kadtoa",
+       "redirect-user": "ID han gumaramit",
+       "redirect-page": "ID han pakli",
+       "redirect-revision": "Rebisyon han pakli",
        "redirect-file": "Ngaran han file",
        "fileduplicatesearch": "Pamiling hin nadoble nga mga paypay",
        "fileduplicatesearch-filename": "Ngaran han paypay:",
        "revdelete-summary-hid": "An halipotay nga masisiring hiton pagliwat in nakatago",
        "revdelete-uname-hid": "nakatago an agnay-hit-gumaramit",
        "logentry-move-move": "$1 {{GENDER:$2|ginbalhin}} an pakli nga $3 ngadto ha $4",
+       "logentry-move-move-noredirect": "Hi $1 {{GENDER:$2|ginbalhin}} an pakli nga $3 ngadto ha $4 nga diri nagpapabilin hin redirect",
        "logentry-newusers-newusers": "An gumaramit nga akawnt nga $1 {{GENDER:$2|ginhimo}}",
        "logentry-newusers-create": "An gumaramit nga akawnt nga $1 {{GENDER:$2|ginhimo}}",
        "logentry-newusers-create2": "An gumaramit nga akawnt nga $3 {{GENDER:$2|ginhimo}} ni $1",
index 168b9db..b766b1c 100644 (file)
        "and": "和",
        "faq": "常见问题",
        "actions": "操作",
-       "namespaces": "å\91½å\90\8d空间",
+       "namespaces": "å\90\8då­\97空间",
        "variants": "变种",
        "navigation-heading": "导航菜单",
        "errorpagetitle": "错误",
        "accountcreatedtext": "[[{{ns:User}}:$1|$1]]([[{{ns:User talk}}:$1|对话]])的账户已创建。",
        "createaccount-title": "在{{SITENAME}}创建新账户",
        "createaccount-text": "有人在{{SITENAME}}中利用您的邮箱创建了一个名为 \"$2\" 的新帐户($4),密码是 \"$3\" 。您应该立即登录并更改密码。\n\n如果该账户创建错误的话,您可以忽略此信息。",
-       "login-throttled": "最近尝试登录的次数过多。请等待$1后再试。",
+       "login-throttled": "最近尝试登录的次数过多。请等待$1后再试。",
        "login-abort-generic": "您的登录失败 - 已终止",
        "login-migrated-generic": "您的账户已被迁移,并且您的用户名在此wiki不再存在。",
        "loginlanguagelabel": "语言:$1",
        "parser-template-loop-warning": "检查到模板循环:[[$1]]",
        "template-loop-category": "有模板循环的页面",
        "template-loop-category-desc": "页面存在模板循环,就是递归进行自我调用的模板。",
+       "template-loop-warning": "<strong>警告:</strong>此页面调用[[:$1]],这导致了模板循环(无限递归调用)。",
        "parser-template-recursion-depth-warning": "模板递归深度越限($1)",
        "language-converter-depth-warning": "字词转换器深度越限($1)",
        "node-count-exceeded-category": "页面的节点数超出限制",
        "timezoneregion-indian": "印度洋",
        "timezoneregion-pacific": "太平洋",
        "allowemail": "启用来自其他用户的电子邮件",
+       "email-blacklist-label": "禁止这些用户给我发送电子邮件:",
        "prefs-searchoptions": "搜索",
        "prefs-namespaces": "名字空间",
        "default": "默认",
        "rcfilters-watchlist-markseen-button": "标记所有更改为已查看",
        "rcfilters-watchlist-edit-watchlist-button": "编辑您的监视页面的列表",
        "rcfilters-watchlist-showupdated": "自更改发生以来,对您尚未访问的页面做出的更改以<strong>粗体</strong>显示,并带有立体标记。",
+       "rcfilters-preference-label": "隐藏改进的最近更改版本",
+       "rcfilters-preference-help": "返回到2017年界面重新设计版,并重新添加这以后新增的工具。",
        "rcnotefrom": "下面{{PLURAL:$5|是}}<strong>$3 $4</strong>之后的更改(最多显示<strong>$1</strong>个)。",
        "rclistfromreset": "重置时间选择",
        "rclistfrom": "显示$3 $2之后的新更改",
        "uploadbtn": "上传文件",
        "reuploaddesc": "取消上传,返回上传表格",
        "upload-tryagain": "提交修改过的文件说明",
+       "upload-tryagain-nostash": "提交重新上传的文件并修改说明",
        "uploadnologin": "未登录",
        "uploadnologintext": "请$1以上传文件。",
        "upload_directory_missing": "上传目录($1)遗失,不能由网页服务器建立。",
        "file-deleted-duplicate-notitle": "之前有与此相同的文件被删除和取消标题。您应该询问查看过改文件数据的任何人以复查重新上传时的诸多问题。",
        "uploadwarning": "上传警告",
        "uploadwarning-text": "请修改下面的文件说明并重试。",
+       "uploadwarning-text-nostash": "请重新上传文件,在下方修改说明并重试。",
        "savefile": "保存文件",
        "uploaddisabled": "上传己停用。",
        "copyuploaddisabled": "URL上传已停用。",
        "listfiles_size": "尺寸",
        "listfiles_description": "说明",
        "listfiles_count": "版本",
-       "listfiles-show-all": "包括图片的旧版本",
+       "listfiles-show-all": "包括文件的旧版本",
        "listfiles-latestversion": "当前版本",
        "listfiles-latestversion-yes": "是",
        "listfiles-latestversion-no": "否",
        "allpagesbadtitle": "给定的页面标题是非法的,或者具有一个内部语言或内部 wiki 的前缀。它可能包含一个或更多的不能用于标题的字符。",
        "allpages-bad-ns": "在{{SITENAME}}中没有一个叫做\"$1\"的名字空间。",
        "allpages-hide-redirects": "隐藏重定向",
-       "cachedspecial-viewing-cached-ttl": "正在查看本页面至少$1前的缓存版本。",
+       "cachedspecial-viewing-cached-ttl": "正在查看本页面至少$1前的缓存版本。",
        "cachedspecial-viewing-cached-ts": "您正浏览此页的缓存版本,不一定是最新的完整版本。",
        "cachedspecial-refresh-now": "查看最新的。",
        "categories": "分类",
        "unwatchthispage": "停止监视",
        "notanarticle": "非内容页面",
        "notvisiblerev": "上次由不同用户所作的版本已经删除",
-       "watchlist-details": "æ\82¨ç\9a\84ç\9b\91è§\86å\88\97表中æ\9c\89{{PLURAL:$1|$1个页é\9d¢}}ï¼\88å¤\96å\8a 讨论页)。",
+       "watchlist-details": "æ\82¨ç\9a\84ç\9b\91è§\86å\88\97表中æ\9c\89{{PLURAL:$1|$1个页é\9d¢}}ï¼\88å\8c\85å\90«讨论页)。",
        "wlheader-enotif": "已启用电子邮件通知。",
        "wlheader-showupdated": "您上次访问后发生更改的页面<strong>加粗</strong>显示。",
        "wlnote": "下面是{{PLURAL:$2|过去<strong>$2</strong>小时}}的{{PLURAL:$1|最后<strong>$1</strong>个更改}},截至$3 $4。",
index 46fdcf4..a3b7d5a 100644 (file)
        "unwatchthispage": "停止監視",
        "notanarticle": "非內容的頁面",
        "notvisiblerev": "最後一次由其他使用者所作的修訂已經被刪除",
-       "watchlist-details": "您的監視清單上共有 $1 個頁面 (不包含對話頁面)。",
+       "watchlist-details": "您的監視清單上共有 $1 個頁面(包含對話頁面)。",
        "wlheader-enotif": "已開啟電子郵件通知功能。",
        "wlheader-showupdated": "在您最後一次檢視過後修改的頁面會以 <strong>粗體</strong> 顯示。",
        "wlnote": "以下為自 $3 $4 之前的 <strong>$2</strong> 小時內所做的 <strong>$1</strong> 次變更。",
index 89e8089..ecbbb85 100644 (file)
@@ -1244,8 +1244,8 @@ abstract class Maintenance {
         * This function has the same parameters as wfGetDB()
         *
         * @param int $db DB index (DB_REPLICA/DB_MASTER)
-        * @param array $groups; default: empty array
-        * @param string|bool $wiki; default: current wiki
+        * @param array $groups default: empty array
+        * @param string|bool $wiki default: current wiki
         * @return IMaintainableDatabase
         */
        protected function getDB( $db, $groups = [], $wiki = false ) {
index 1ebc4f6..04158ae 100644 (file)
@@ -35,6 +35,7 @@ class AddSite extends Maintenance {
        /**
         * Imports the site described by the parameters (see self::__construct()) passed to this
         * maintenance sccript into the sites table of MediaWiki.
+        * @return bool
         */
        public function execute() {
                $siteStore = MediaWikiServices::getInstance()->getSiteStore();
index c8ac1ad..996d562 100644 (file)
@@ -1,11 +1,11 @@
-ALTER TABLE /*_*/revision MODIFY rev_comment varbinary(767) NOT NULL;
-ALTER TABLE /*_*/archive MODIFY ar_comment varbinary(767) NOT NULL;
-ALTER TABLE /*_*/image MODIFY img_description varbinary(767) NOT NULL;
-ALTER TABLE /*_*/oldimage MODIFY oi_description varbinary(767) NOT NULL;
-ALTER TABLE /*_*/filearchive MODIFY fa_description varbinary(767);
+ALTER TABLE /*_*/revision MODIFY rev_comment varbinary(767) NOT NULL default '';
+ALTER TABLE /*_*/archive MODIFY ar_comment varbinary(767) NOT NULL default '';
+ALTER TABLE /*_*/image MODIFY img_description varbinary(767) NOT NULL default '';
+ALTER TABLE /*_*/oldimage MODIFY oi_description varbinary(767) NOT NULL default '';
+ALTER TABLE /*_*/filearchive MODIFY fa_description varbinary(767) default '';
 ALTER TABLE /*_*/filearchive MODIFY fa_deleted_reason varbinary(767) default '';
 ALTER TABLE /*_*/recentchanges MODIFY rc_comment varbinary(767) NOT NULL default '';
 ALTER TABLE /*_*/logging MODIFY log_comment varbinary(767) NOT NULL default '';
-ALTER TABLE /*_*/ipblocks MODIFY ipb_reason varbinary(767) NOT NULL;
-ALTER TABLE /*_*/protected_titles MODIFY pt_reason varbinary(767);
+ALTER TABLE /*_*/ipblocks MODIFY ipb_reason varbinary(767) NOT NULL default '';
+ALTER TABLE /*_*/protected_titles MODIFY pt_reason varbinary(767) default '';
 
index 6b7d1af..4f7af21 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="8" height="8">
-<circle cx="4" cy="4" r="2"/>
+       <circle cx="4" cy="4" r="2"/>
 </svg>
index 8bd060f..504c7d7 100644 (file)
@@ -21,6 +21,8 @@
 
 require_once __DIR__ . '/Maintenance.php';
 
+use MediaWiki\MediaWikiServices;
+
 /**
  * @ingroup Maintenance
  */
@@ -41,6 +43,7 @@ class CompareParserCache extends Maintenance {
                $scanned = 0;
                $withcache = 0;
                $withdiff = 0;
+               $parserCache = MediaWikiServices::getInstance()->getParserCache();
                while ( $pages-- > 0 ) {
                        $row = $dbr->selectRow( 'page', '*',
                                [
@@ -66,7 +69,7 @@ class CompareParserCache extends Maintenance {
 
                        $parserOptions = $page->makeParserOptions( 'canonical' );
 
-                       $parserOutputOld = ParserCache::singleton()->get( $page, $parserOptions );
+                       $parserOutputOld = $parserCache->get( $page, $parserOptions );
 
                        if ( $parserOutputOld ) {
                                $t1 = microtime( true );
index e7ba8fa..7c3c95d 100644 (file)
@@ -3181,7 +3181,7 @@ prefixsearchdisabled
 prefs
 prefsection
 prefsnologintext2
-prefsubmit
+prefcontrol
 preload
 preloads
 preloadtitle
index 94b7fb4..6128d23 100644 (file)
@@ -69,6 +69,8 @@ class DeprecatedInterfaceFinder extends FileAwareNodeVisitor {
        /**
         * Check whether a function or method includes a call to wfDeprecated(),
         * indicating that it is a hard-deprecated interface.
+        * @param PhpParser\Node $node
+        * @return bool
         */
        public function isHardDeprecated( PhpParser\Node $node ) {
                if ( !$node->stmts ) {
index 81e18c9..fd36db1 100644 (file)
@@ -79,6 +79,9 @@ class FindHooks extends Maintenance {
                $nonRecurseDirs = [
                        "$IP/",
                ];
+               $extraFiles = [
+                       "$IP/tests/phpunit/MediaWikiTestCase.php",
+               ];
 
                foreach ( $recurseDirs as $dir ) {
                        $ret = $this->getHooksFromDir( $dir, self::FIND_RECURSIVE );
@@ -90,6 +93,10 @@ class FindHooks extends Maintenance {
                        $potentialHooks = array_merge( $potentialHooks, $ret['good'] );
                        $badHooks = array_merge( $badHooks, $ret['bad'] );
                }
+               foreach ( $extraFiles as $file ) {
+                       $potentialHooks = array_merge( $potentialHooks, $this->getHooksFromFile( $file ) );
+                       $badHooks = array_merge( $badHooks, $this->getBadHooksFromFile( $file ) );
+               }
 
                $documented = array_keys( $documentedHooks );
                $potential = array_keys( $potentialHooks );
@@ -262,6 +269,8 @@ class FindHooks extends Maintenance {
                                $n = [];
                                if ( preg_match_all( '/((?:[^,\(\)]|\([^\(\)]*\))+)/', $match[4], $n ) ) {
                                        $args = array_map( 'trim', $n[1] );
+                                       // remove empty entries from trailing spaces
+                                       $args = array_filter( $args );
                                }
                        } elseif ( isset( $match[3] ) ) {
                                // Found a parameter for Hooks::run,
index d273a6a..26a9c39 100644 (file)
@@ -410,7 +410,7 @@ class GenerateSitemap extends Maintenance {
        /**
         * gzwrite() / fwrite() wrapper
         *
-        * @param resource $handle
+        * @param resource &$handle
         * @param string $str
         */
        function write( &$handle, $str ) {
@@ -427,7 +427,7 @@ class GenerateSitemap extends Maintenance {
        /**
         * gzclose() / fclose() wrapper
         *
-        * @param resource $handle
+        * @param resource &$handle
         */
        function close( &$handle ) {
                if ( $this->compress ) {
index 6975e25..a63149e 100644 (file)
 行動電話   移动电话
 流動電話   移动电话
 數據機      调制解调器
+網域名稱   域名
 葉門 也门
 貝里斯      伯利兹
 維德角      佛得角
 馬爾地夫   马尔代夫
 馬爾他      马耳他
 馬利共和國        马里共和国
+汕埠 圣佩德罗苏拉
 笨豬跳      蹦极跳
 绑紧跳      蹦极跳
 狗隻 犬只
 賓拉登      本拉登
 賓·拉登    本·拉登
 歐巴馬      奥巴马
+唐納·川普 唐纳德·特朗普
+當勞·特朗普      唐纳德·特朗普
+當奴·特朗普      唐纳德·特朗普
 北韓 北朝鲜
 台北韓      台北韩
 寮人民民主共和國       老挝人民民主共和国
 百慕達      百慕大
 三藩市      旧金山
 荷里活      好莱坞
+荷里活道   荷里活道
+荷里活廣場        荷里活广场
 麻薩諸塞   马萨诸塞
 伊利諾      伊利诺伊
 伊利諾伊   伊利诺伊
 韌體 固件
 唯讀 只读
 作業系統   操作系统
+行動作業系統     移动操作系统
+流動作業系統     移动操作系统
 外掛程式   插件
 電晶體      晶体管
 顯示卡      显卡
@@ -2576,7 +2585,6 @@ A型肝炎        甲型肝炎
 芮氏規模   里氏震级
 芮氏地震規模     里氏地震规模
 黎克特制   里氏
-機率 概率
 行政總裁   首席执行官
 執行長,   首席执行官,
 執行長、   首席执行官、
@@ -2624,6 +2632,7 @@ A型肝炎        甲型肝炎
 數位技術   数字技术
 數位訊號   数字信号
 數碼訊號   数字信号
+數位音樂   数字音乐
 數位化      数字化
 行動網路   移动网络
 流動網絡   移动网络
@@ -2672,3 +2681,4 @@ A型肝炎        甲型肝炎
 行人路权   行人路权
 塑膠袋      塑料袋
 烏龍麵      乌冬面
+披索 比索
index 7a07259..b71764a 100644 (file)
@@ -14,7 +14,6 @@
 妆台 妝枱
 弹珠台      彈珠枱
 折台 摺枱
-台布 枱布
 台历 枱曆
 台灯 枱燈
 写字台      寫字枱
 機器人      機械人
 移动电话   流動電話
 行動電話   流動電話
+操作系统   作業系統
+移动操作系统     流動作業系統
+行動作業系統     流動作業系統
 數據機      調制解調器
 短信 短訊
 簡訊 短訊
 賓拉登      本拉登
 賓·拉登    本·拉登
 歐巴馬      奧巴馬
+唐納·川普 當勞·特朗普
+唐纳德·特朗普   當勞·特朗普
 戈登·布朗 白高敦
 狂牛症      瘋牛症
 A肝   甲肝
@@ -3007,6 +3011,8 @@ IP地址  IP位址
 數位技術   數碼技術
 数字信号   數碼訊號
 數碼訊號   數碼訊號
+数字音乐   數碼音樂
+數位音樂   數碼音樂
 数字化      數碼化
 數位化      數碼化
 行動網路   流動網絡
index 6f3304f..56400c3 100644 (file)
 崑腔 昆腔
 崑蘇 昆苏
 崑調 昆调
+崑島 昆岛
 諠譁 喧哗
 慫慂 怂恿
 陈元扞      陈元扞
index d983932..16e2751 100644 (file)
 馬利蘭      馬里蘭
 里士满      里奇蒙
 荷里活      好萊塢
-荷李活道   荷李活道
+荷里活道   荷里活道
+荷里活廣場        荷里活廣場
 维尔京群岛        維京群島
 維爾京群島        維京群島
 纽黑文      紐哈芬
 蒙特利爾   蒙特婁
 斯堪的纳维亚     斯堪地那維亞
 斯堪的納維亞     斯堪地那維亞
+圣佩德罗苏拉     汕埠
 麦克尔      麥可
 迈克尔      麥可
 魯賓斯·巴里切羅        魯本·巴瑞切羅
 肯尼迪      甘迺迪
 奥巴马      歐巴馬
 奧巴馬      歐巴馬
+特朗普      川普
+唐纳德·特朗普   唐納·川普
+當勞·特朗普      唐納·川普
+當奴·特朗普      唐納·川普
 概率 機率
 疯牛症      狂牛症
 甲肝 A肝
 智能卡      智慧卡
 數據庫      資料庫
 操作系统   作業系統
+移动操作系统     行動作業系統
+流動作業系統     行動作業系統
 人机交互   人機互動
 交互设计   互動設計
 互联网络   網際網路
index e5b05ff..1912bcf 100644 (file)
@@ -135,6 +135,7 @@ U+056D9囙|U+056E0因|
 U+05705圅|U+051FD函|
 U+0577F坿|U+09644附|
 U+0579C垜|U+0579B垛|
+U+057BB垻|U+0575D坝|
 U+0585A塚|U+051A2冢|
 U+0585F塟|U+0846C葬|
 U+05872塲|U+0573A场|
index 9b2e081..c5d5fd7 100644 (file)
 雪窗螢几
 燕几
 隱几
+几筵
 饑饉
 乾薑
 毛薑
 上簽發
 上簽約
 上簽了
+上簽證
 中簽名
 中簽字
 中簽收
 中簽發
 中簽約
 中簽了
+中簽證
 下簽名
 下簽字
 下簽收
 下簽發
 下簽約
 下簽了
+下簽證
 犖确
 磽确
 确瘠
 山谷 #分詞用
 溝谷
 曼谷
+星露谷物語
 于美人
 緊緻
 曰云
 可自制
 台子女
 台子孫
-台布景
 台州
 台風穩健
 穩健的台風
 尸鳩
 尸佼
 尸子
+尸羅
 尸羅精舍
 毗婆尸佛
 尸棄佛
 蛋白發
 發狀態
 發狀況
+染發生
 古人有云
 昔人有云
 云敞
 性別扭曲
 箇舊市
 雲南箇舊
+關系列
+關系統
+關系所
+關系科
index 4313806..9d4e261 100644 (file)
@@ -222,7 +222,7 @@ class MigrateComments extends LoggedUpdateMaintenance {
         * comment ID field.
         * Blanks the old fields while migrating.
         *
-        * @param string $oldTable Table to migrate
+        * @param string $table Table to migrate
         * @param string $primaryKey Primary key of the table.
         * @param string $oldField Old comment field name
         * @param string $newPrimaryKey Primary key of the new table.
index eb60f80..c173270 100644 (file)
@@ -46,6 +46,12 @@ then be available when querying for IP ranges at Special:Contributions.
 TEXT
                );
                $this->addOption( 'rev-id', 'The rev_id to start copying from. Default: 0', false, true );
+               $this->addOption(
+                       'max-rev-id',
+                       'The rev_id to stop at. Default: result of MAX(rev_id)',
+                       false,
+                       true
+               );
                $this->addOption(
                        'throttle',
                        'Wait this many milliseconds after copying each batch of revisions. Default: 0',
@@ -57,22 +63,27 @@ TEXT
 
        public function doDBUpdates() {
                $lbFactory = MediaWikiServices::getInstance()->getDBLoadBalancerFactory();
+               $dbr = $this->getDB( DB_REPLICA, [ 'vslow' ] );
                $dbw = $this->getDB( DB_MASTER );
                $throttle = intval( $this->getOption( 'throttle', 0 ) );
+               $maxRevId = intval( $this->getOption( 'max-rev-id', 0 ) );
                $start = $this->getOption( 'rev-id', 0 );
-               $end = $dbw->selectField( 'revision', 'MAX(rev_id)', false, __METHOD__ );
+               $end = $maxRevId > 0
+                       ? $maxRevId
+                       : $dbw->selectField( 'revision', 'MAX(rev_id)', false, __METHOD__ );
                $blockStart = $start;
                $revCount = 0;
 
                $this->output( "Copying IP revisions to ip_changes, from rev_id $start to rev_id $end\n" );
 
                while ( $blockStart <= $end ) {
-                       $cond = "rev_id >= $blockStart AND rev_user = 0 ORDER BY rev_id ASC LIMIT " . $this->mBatchSize;
-                       $rows = $dbw->select(
+                       $blockEnd = min( $blockStart + 200, $end );
+                       $rows = $dbr->select(
                                'revision',
                                [ 'rev_id', 'rev_timestamp', 'rev_user_text' ],
-                               $cond,
-                               __METHOD__
+                               [ "rev_id BETWEEN $blockStart AND $blockEnd", 'rev_user' => 0 ],
+                               __METHOD__,
+                               [ 'ORDER BY' => 'rev_id ASC', 'LIMIT' => $this->mBatchSize ]
                        );
 
                        if ( !$rows || $rows->numRows() === 0 ) {
@@ -80,21 +91,17 @@ TEXT
                        }
 
                        $this->output( "...checking $this->mBatchSize revisions for IP edits that need copying, " .
-                               "starting with rev_id $blockStart\n" );
+                               "between rev_ids $blockStart and $blockEnd\n" );
 
+                       $insertRows = [];
                        foreach ( $rows as $row ) {
                                // Double-check to make sure this is an IP, e.g. not maintenance user or imported revision.
                                if ( IP::isValid( $row->rev_user_text ) ) {
-                                       $dbw->insert(
-                                               'ip_changes',
-                                               [
-                                                       'ipc_rev_id' => $row->rev_id,
-                                                       'ipc_rev_timestamp' => $row->rev_timestamp,
-                                                       'ipc_hex' => IP::toHex( $row->rev_user_text ),
-                                               ],
-                                               __METHOD__,
-                                               'IGNORE'
-                                       );
+                                       $insertRows[] = [
+                                               'ipc_rev_id' => $row->rev_id,
+                                               'ipc_rev_timestamp' => $row->rev_timestamp,
+                                               'ipc_hex' => IP::toHex( $row->rev_user_text ),
+                                       ];
 
                                        $revCount++;
                                }
@@ -104,6 +111,13 @@ TEXT
 
                        $blockStart++;
 
+                       $dbw->insert(
+                               'ip_changes',
+                               $insertRows,
+                               __METHOD__,
+                               'IGNORE'
+                       );
+
                        $lbFactory->waitForReplication();
                        usleep( $throttle * 1000 );
                }
index 01cf3c3..8ac7f91 100644 (file)
@@ -106,6 +106,7 @@ class UserOptions {
 
        /**
         * Dumb stuff to run a mode.
+        * @return bool
         */
        public function run() {
                if ( !$this->mReady ) {
index 4c5266e..bd9890b 100644 (file)
--- a/phpcs.xml
+++ b/phpcs.xml
@@ -20,6 +20,9 @@
                <exclude name="MediaWiki.Usage.DbrQueryUsage.DbrQueryFound" />
                <exclude name="MediaWiki.Usage.ExtendClassUsage.FunctionVarUsage" />
                <exclude name="MediaWiki.Usage.SuperGlobalsUsage.SuperGlobals" />
+               <exclude name="MediaWiki.Files.ClassMatchesFilename.WrongCase" />
+               <exclude name="MediaWiki.Files.ClassMatchesFilename.NotMatch" />
+               <exclude name="MediaWiki.Files.OneClassPerFile.MultipleFound" />
        </rule>
        <rule ref="MediaWiki.NamingConventions.PrefixedGlobalFunctions">
                <properties>
index 3a5de66..818112f 100644 (file)
@@ -1091,6 +1091,9 @@ return [
                'scripts' => [
                        'resources/src/mediawiki/htmlform/htmlform.Checker.js',
                ],
+               'dependencies' => [
+                       'jquery.throttle-debounce',
+               ],
                'targets' => [ 'desktop', 'mobile' ],
        ],
        'mediawiki.htmlform.ooui' => [
@@ -1448,6 +1451,7 @@ return [
                        'jquery.textSelection',
                        'mediawiki.api',
                        'mediawiki.diff.styles',
+                       'mediawiki.language',
                        'mediawiki.util',
                        'mediawiki.jqueryMsg',
                        'oojs-ui-core',
@@ -1506,6 +1510,9 @@ return [
        'mediawiki.action.view.postEdit' => [
                'scripts' => 'resources/src/mediawiki.action/mediawiki.action.view.postEdit.js',
                'styles' => 'resources/src/mediawiki.action/mediawiki.action.view.postEdit.less',
+               'skinStyles' => [
+                       'monobook' => 'resources/src/mediawiki.action/mediawiki.action.view.postEdit.monobook.css',
+               ],
                'dependencies' => [
                        'mediawiki.jqueryMsg',
                        'mediawiki.notification'
@@ -1769,6 +1776,7 @@ return [
                        'resources/src/mediawiki.rcfilters/mw.rcfilters.UriProcessor.js',
                ],
                'dependencies' => [
+                       'jquery.byteLength',
                        'oojs',
                        'mediawiki.api',
                        'mediawiki.api.options',
@@ -2085,7 +2093,12 @@ return [
                'styles' => 'resources/src/mediawiki.special/mediawiki.special.pagesWithProp.css',
        ],
        'mediawiki.special.preferences' => [
-               'scripts' => 'resources/src/mediawiki.special/mediawiki.special.preferences.js',
+               'scripts' => [
+                       'resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js',
+                       'resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js',
+                       'resources/src/mediawiki.special/mediawiki.special.preferences.tabs.js',
+                       'resources/src/mediawiki.special/mediawiki.special.preferences.timezone.js',
+               ],
                'messages' => [
                        'prefs-tabs-navigation-hint',
                        'prefswarning-warning',
index 12212ff..70512e0 100644 (file)
@@ -83,7 +83,9 @@ function migrateWarn( msg ) {
                warnedAbout[ msg ] = true;
                jQuery.migrateWarnings.push( msg );
                // PATCH: Add instrumentation for statistics --Krinkle
-               mw.track( "mw.deprecate", "jquery-migrate" );
+               if ( window.mw && window.mw.track ) {
+                       window.mw.track( "mw.deprecate", "jquery-migrate" );
+               }
                if ( console && console.warn && !jQuery.migrateMute ) {
                        console.warn( "JQMIGRATE: " + msg );
                        if ( jQuery.migrateTrace && console.trace ) {
index 7fe25ee..222f14a 100644 (file)
@@ -11,7 +11,7 @@
  * @static
  * @inheritable
  * @param {string} str
- * @return {string}
+ * @return {number}
  */
 jQuery.byteLength = function ( str ) {
        // This basically figures out how many bytes a UTF-16 string (which is what js sees)
diff --git a/resources/src/mediawiki.action/images/close.png b/resources/src/mediawiki.action/images/close.png
new file mode 100644 (file)
index 0000000..80dde95
Binary files /dev/null and b/resources/src/mediawiki.action/images/close.png differ
diff --git a/resources/src/mediawiki.action/images/close.svg b/resources/src/mediawiki.action/images/close.svg
new file mode 100644 (file)
index 0000000..7f75511
--- /dev/null
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
+       <path d="M3.636 2.222l14.142 14.142-1.414 1.414L2.222 3.636z"/>
+       <path d="M17.778 3.636L3.636 17.778l-1.414-1.414L16.364 2.222z"/>
+</svg>
index 7602dae..ab1ce27 100644 (file)
                                if ( response.parse.langlinks && mw.config.get( 'skin' ) === 'vector' ) {
                                        newList = [];
                                        $.each( response.parse.langlinks, function ( i, langlink ) {
+                                               var bcp47 = mw.language.bcp47( langlink.lang );
                                                li = $( '<li>' )
                                                        .addClass( 'interlanguage-link interwiki-' + langlink.lang )
                                                        .append( $( '<a>' )
                                                                .attr( {
                                                                        href: langlink.url,
                                                                        title: langlink.title + ' - ' + langlink.langname,
-                                                                       lang: langlink.lang,
-                                                                       hreflang: langlink.lang
+                                                                       lang: bcp47,
+                                                                       hreflang: bcp47
                                                                } )
                                                                .text( langlink.autonym )
                                                        );
index 467928d..d19f098 100644 (file)
@@ -7,7 +7,7 @@
        height: 0;
        left: 50%;
        z-index: 1000;
-       font-size: 13px;
+       font-size: 14px;
        cursor: pointer;
 }
 
        opacity: 1;
        .transition( opacity 250ms );
 
+       &:after {
+               content: '';
+               background: no-repeat center center;
+               .background-image-svg( 'images/close.svg', 'images/close.png' );
+               background-size: 12px 12px;
+               position: absolute;
+               right: 0.4em;
+               top: 0;
+               bottom: 0;
+               min-width: 32px;
+               min-height: 32px;
+               opacity: 0.87;
+
+               &:hover {
+                       opacity: 1;
+               }
+       }
+
        &.mw-notification {
                padding-right: 3em;
        }
 }
 
-// TODO: Move to monobook skin
-.skin-monobook .postedit {
-       top: 6em !important; /* stylelint-disable-line declaration-no-important */
-}
-
 .postedit-faded {
        opacity: 0;
 }
 
 .postedit-icon {
-       padding-left: 41px; /* 25 + 8 + 8 */
+       padding-left: 25px;
        /* like min-height, but old IE compatible and keeps text vertically aligned, too */
        line-height: 25px;
        background-repeat: no-repeat;
-       background-position: 8px 50%;
 }
 
 .postedit-icon-checkmark {
        /* @embed */
        background-image: url( images/green-checkmark.png );
-       background-position: left;
-}
-
-.postedit:after {
-       content: '×';
-       position: absolute;
-       padding: 0 0.8em;
-       right: 0;
-       top: 0;
-       font-size: 1.25em;
-       font-weight: bold;
-       line-height: 2.3em;
-       text-shadow: 0 0.0625em 0 #fff;
-       opacity: 0.2;
-}
-
-.postedit:hover:after {
-       opacity: 0.4;
 }
diff --git a/resources/src/mediawiki.action/mediawiki.action.view.postEdit.monobook.css b/resources/src/mediawiki.action/mediawiki.action.view.postEdit.monobook.css
new file mode 100644 (file)
index 0000000..50f0c8a
--- /dev/null
@@ -0,0 +1,3 @@
+.postedit {
+       top: 6em;
+}
index 3726a68..6a52434 100644 (file)
 
                setSpecialCharacters: function ( data ) {
                        this.specialCharacters = data;
+               },
+
+               /**
+                * Formats language tags according the BCP47 standard.
+                * See wfBCP47 for the PHP implementation.
+                *
+                * @param {string} languageTag Well-formed language tag
+                * @return {string}
+                */
+               bcp47: function ( languageTag ) {
+                       var formatted,
+                               isFirstSegment = true,
+                               isPrivate = false,
+                               segments = languageTag.split( '-' );
+
+                       formatted = segments.map( function ( segment ) {
+                               var newSegment;
+
+                               // when previous segment is x, it is a private segment and should be lc
+                               if ( isPrivate ) {
+                                       newSegment = segment.toLowerCase();
+                               // ISO 3166 country code
+                               } else if ( segment.length === 2 && !isFirstSegment ) {
+                                       newSegment = segment.toUpperCase();
+                               // ISO 15924 script code
+                               } else if ( segment.length === 4 && !isFirstSegment ) {
+                                       newSegment = segment.charAt( 0 ).toUpperCase() + segment.substring( 1 ).toLowerCase();
+                               // Use lowercase for other cases
+                               } else {
+                                       newSegment = segment.toLowerCase();
+                               }
+
+                               isPrivate = segment.toLowerCase() === 'x';
+                               isFirstSegment = false;
+
+                               return newSegment;
+                       } );
+
+                       return formatted.join( '-' );
                }
        } );
 
index bace9d0..9930525 100644 (file)
@@ -145,7 +145,7 @@ span.comment {
 li span.deleted,
 span.history-deleted {
        text-decoration: line-through;
-       color: #888;
+       color: #72777d;
        font-style: italic;
 }
 
@@ -278,7 +278,7 @@ p.mw-delete-editreasons {
 
 /* The auto-generated edit comments */
 .autocomment {
-       color: #808080;
+       color: #72777d;
 }
 
 /** Generic minor/bot/newpage styling (recent changes) */
@@ -361,11 +361,11 @@ a.mw-selflink:visited {
  * keep in sync with commonPrint.css
  */
 table.wikitable {
-       margin: 1em 0;
        background-color: #f8f9fa;
+       color: #222;
+       margin: 1em 0;
        border: 1px solid #a2a9b1;
        border-collapse: collapse;
-       color: #000;
 }
 
 table.wikitable > tr > th,
index 62ba002..3b882a6 100644 (file)
                } );
        };
 
-       /**
-        * Check whether the default values of the filters are all false.
-        *
-        * @return {boolean} Default filters are all false
-        */
-       mw.rcfilters.dm.FiltersViewModel.prototype.areDefaultFiltersEmpty = function () {
-               var defaultFilters;
-
-               if ( this.defaultFiltersEmpty !== null ) {
-                       // We only need to do this test once,
-                       // because defaults are set once per session
-                       defaultFilters = this.getFiltersFromParameters( this.getDefaultParams() );
-                       this.defaultFiltersEmpty = Object.keys( defaultFilters ).every( function ( filterName ) {
-                               return !defaultFilters[ filterName ];
-                       } );
-               }
-
-               return this.defaultFiltersEmpty;
-       };
-
        /**
         * Get the item that matches the given name
         *
index d87ef73..f878941 100644 (file)
         * An item has changed
         */
 
+       /**
+        * @event default
+        * @param {string} New default ID
+        *
+        * The default has changed
+        */
+
        /* Methods */
 
        /**
                        this.getItems().forEach( function ( item ) {
                                item.toggleDefault( item.getID() === itemID );
                        } );
+
+                       this.emit( 'default', itemID );
                }
        };
 
index 8d0aa05..507c979 100644 (file)
                this.updateChangesList();
        };
 
+       /**
+        * Check whether the default values of the filters are all false.
+        *
+        * @return {boolean} Defaults are all false
+        */
+       mw.rcfilters.Controller.prototype.areDefaultsEmpty = function () {
+               var defaultFilters = this.filtersModel.getFiltersFromParameters( this._getDefaultParams() );
+
+               this._deleteExcludedValuesFromFilterState( defaultFilters );
+
+               // Defaults can change in a session, so we need to do this every time
+               return Object.keys( defaultFilters ).every( function ( filterName ) {
+                       return !defaultFilters[ filterName ];
+               } );
+       };
+
        /**
         * Empty all selected filters
         */
                }
 
                this._checkForNewChanges()
-                       .then( function ( data ) {
+                       .then( function ( newChanges ) {
                                if ( !this._shouldCheckForNewChanges() ) {
                                        // by the time the response is received,
                                        // it may not be appropriate anymore
                                        return;
                                }
 
-                               if ( data.changes !== 'NO_RESULTS' ) {
+                               if ( newChanges ) {
                                        if ( this.changesListModel.getLiveUpdate() ) {
                                                return this.updateChangesList( null, this.LIVE_UPDATE );
                                        } else {
        /**
         * Check if new changes, newer than those currently shown, are available
         *
-        * @return {jQuery.Promise} Promise object that resolves after trying
-        * to fetch 1 change newer than the last known 'from' parameter value
+        * @return {jQuery.Promise} Promise object that resolves with a bool
+        *      specifying if there are new changes or not
         *
         * @private
         */
        mw.rcfilters.Controller.prototype._checkForNewChanges = function () {
-               return this._fetchChangesList(
-                       'liveUpdate',
-                       {
-                               limit: 1,
-                               peek: 1, // bypasses all UI
-                               from: this.changesListModel.getNextFrom()
+               var params = {
+                       limit: 1,
+                       peek: 1, // bypasses ChangesList specific UI
+                       from: this.changesListModel.getNextFrom()
+               };
+               return this._queryChangesList( 'liveUpdate', params ).then(
+                       function ( data ) {
+                               // no result is 204 with the 'peek' param
+                               return data.status === 200;
                        }
                );
        };
                // Stringify state
                stringified = JSON.stringify( state );
 
-               if ( stringified.length > 65535 ) {
+               if ( $.byteLength( stringified ) > 65535 ) {
                        // Sanity check, since the preference can only hold that.
                        return;
                }
 
                        queryHighlights = data.highlights || {};
                        savedParams = this.filtersModel.getParametersFromFilters(
-                               // Merge filters with sticky values
                                $.extend( true, {}, data.filters, this.filtersModel.getStickyFiltersState() )
                        );
 
        };
 
        /**
-        * Fetch the list of changes from the server for the current filters
+        * Query the list of changes from the server for the current filters
         *
-        * @param {string} [counterId='updateChangesList'] Id for this request. To allow concurrent requests
+        * @param {string} counterId Id for this request. To allow concurrent requests
         *  not to invalidate each other.
         * @param {Object} [params={}] Parameters to add to the query
         *
-        * @return {jQuery.Promise} Promise object that will resolve with the changes list
-        *  or with a string denoting no results.
+        * @return {jQuery.Promise} Promise object resolved with { content, status }
         */
-       mw.rcfilters.Controller.prototype._fetchChangesList = function ( counterId, params ) {
+       mw.rcfilters.Controller.prototype._queryChangesList = function ( counterId, params ) {
                var uri = this._getUpdatedUri(),
                        stickyParams = this.filtersModel.getStickyParams(),
                        requestId,
                        latestRequest;
 
-               counterId = counterId || 'updateChangesList';
                params = params || {};
                params.action = 'render'; // bypasses MW chrome
 
 
                return $.ajax( uri.toString(), { contentType: 'html' } )
                        .then(
-                               function ( html, reason ) {
-                                       var $parsed,
-                                               pieces;
-
+                               function ( content, message, jqXHR ) {
                                        if ( !latestRequest() ) {
                                                return $.Deferred().reject();
                                        }
-
-                                       if ( params.peek && reason === 'notmodified' ) {
-                                               return {
-                                                       changes: 'NO_RESULTS'
-                                               };
+                                       return {
+                                               content: content,
+                                               status: jqXHR.status
+                                       };
+                               },
+                               // RC returns 404 when there is no results
+                               function ( jqXHR ) {
+                                       if ( latestRequest() ) {
+                                               return $.Deferred().resolve(
+                                                       {
+                                                               content: jqXHR.responseText,
+                                                               status: jqXHR.status
+                                                       }
+                                               ).promise();
                                        }
+                               }
+                       );
+       };
 
-                                       // Because of action=render, the response is a list of nodes.
-                                       // It has to be put under a root node so it can be queried.
-                                       $parsed = $( '<div>' ).append( $( $.parseHTML( html ) ) );
-
-                                       pieces = {
-                                               // Changes list
-                                               changes: $parsed.find( '.mw-changeslist' ).first().contents(),
-                                               // Fieldset
-                                               fieldset: $parsed.find( 'fieldset.cloptions' ).first()
-                                       };
+       /**
+        * Fetch the list of changes from the server for the current filters
+        *
+        * @return {jQuery.Promise} Promise object that will resolve with the changes list
+        *  and the fieldset.
+        */
+       mw.rcfilters.Controller.prototype._fetchChangesList = function () {
+               return this._queryChangesList( 'updateChangesList' )
+                       .then(
+                               function ( data ) {
+                                       var $parsed = $( '<div>' ).append( $( $.parseHTML( data.content ) ) ),
+                                               pieces = {
+                                                       // Changes list
+                                                       changes: $parsed.find( '.mw-changeslist' ).first().contents(),
+                                                       // Fieldset
+                                                       fieldset: $parsed.find( 'fieldset.cloptions' ).first()
+                                               };
 
-                                       // Watchlist returns 200 when there is no results
                                        if ( pieces.changes.length === 0 ) {
                                                pieces.changes = 'NO_RESULTS';
                                        }
 
                                        return pieces;
-                               },
-                               // RC returns 404 when there is no results
-                               function ( responseObj ) {
-                                       var $parsed;
-
-                                       if ( !latestRequest() ) {
-                                               return $.Deferred().reject();
-                                       }
-
-                                       $parsed = $( $.parseHTML( responseObj.responseText ) );
-
-                                       // Force a resolve state to this promise
-                                       return $.Deferred().resolve( {
-                                               changes: 'NO_RESULTS',
-                                               fieldset: $parsed.find( 'fieldset.cloptions' ).first()
-                                       } ).promise();
                                }
                        );
        };
index 67edb4f..83e5796 100644 (file)
                                );
                                filtersWidget.setTopSection( wlTopSection.$element );
                        } // end Special:WL
+
+                       /**
+                        * Fired when initialization of the filtering interface for changes list is complete.
+                        *
+                        * @event structuredChangeFilters_ui_initialized
+                        * @member mw.hook
+                        */
+                       mw.hook( 'structuredChangeFilters.ui.initialized' ).fire();
                }
        };
 
index e39be6c..d203328 100644 (file)
@@ -47,7 +47,7 @@
                },
                featureFlags: {
                        liveUpdate: mw.config.get( 'wgStructuredChangeFiltersLiveUpdateSupported' ) &&
-                               ( mw.config.get( 'wgStructuredChangeFiltersEnableLiveUpdate' ) || new mw.Uri().query.liveupdate )
+                               ( mw.user.options.get( 'rcenhancedfilters' ) || new mw.Uri().query.liveupdate )
                }
        };
 }( mediaWiki ) );
index f4ca717..deaee28 100644 (file)
@@ -16,7 +16,7 @@
                &-color {
                        &-none {
                                display: inline-block;
-                               li.mw-changeslist-watchedseen & {
+                               .mw-changeslist-watchedseen & {
                                        .mw-rcfilters-ui-changesListWrapperWidget.mw-rcfilters-ui-changesListWrapperWidget-highlighted & {
                                                .mw-rcfilters-mixin-circle( @highlight-none, @result-circle-diameter, 0, true, @highlight-grey, true );
                                        }
@@ -26,7 +26,7 @@
                                        }
                                }
 
-                               li.mw-changeslist-watchedunseen & {
+                               .mw-changeslist-watchedunseen & {
                                        .mw-rcfilters-ui-changesListWrapperWidget.mw-rcfilters-ui-changesListWrapperWidget-highlighted & {
                                                .mw-rcfilters-mixin-circle( @highlight-grey, @result-circle-diameter, 0, true, @highlight-grey );
                                        }
index f3e1351..e7233a8 100644 (file)
@@ -17,6 +17,7 @@
                border-radius: 2px 2px 0 0;
                padding: 0.6em;
                margin-top: 1em;
+               line-height: normal;
        }
 
        .oo-ui-tagMultiselectWidget.oo-ui-widget-enabled &-animate.oo-ui-tagMultiselectWidget-handle {
@@ -41,6 +42,7 @@
                        &-savedQueryTitle {
                                color: #222; // Base10
                                font-weight: bold;
+                               vertical-align: top;
                                margin-left: 1em;
                                width: ~'calc( 100% - 10em )';
                                overflow: hidden;
index ec4954c..4e8ad56 100644 (file)
@@ -1,3 +1,5 @@
+@import 'mediawiki.mixins';
+
 .mw-rcfilters-ui-saveFiltersPopupButtonWidget {
        &-popup {
                &-layout,
@@ -6,11 +8,17 @@
                }
 
                > .oo-ui-popupWidget-popup > .oo-ui-popupWidget-head {
+                       position: relative;
                        height: auto;
                        padding: 1em;
                        // Icon width + icon left position (rounded to 0.5 to give a little extra margin)
                        padding-right: 1.875em + 0.5em;
 
+                       > .oo-ui-buttonWidget {
+                               top: 50%;
+                               .transform( translateY( -50% ) );
+                       }
+
                        > .oo-ui-iconWidget {
                                float: none;
                                display: inline-block;
 
                        > .oo-ui-labelElement-label {
                                float: none;
-                               display: inline;
+                               display: inline-block;
                                font-size: 1.2em;
                                margin: 0;
                                font-weight: bold;
+                               vertical-align: middle;
                        }
                }
        }
index b15b034..757a000 100644 (file)
                                click: 'onSaveQueryButtonClick',
                                saveCurrent: 'setSavedQueryVisibility'
                        } );
-                       this.queriesModel.connect( this, { itemUpdate: 'onSavedQueriesItemUpdate' } );
+                       this.queriesModel.connect( this, {
+                               itemUpdate: 'onSavedQueriesItemUpdate',
+                               initialize: 'onSavedQueriesInitialize',
+                               'default': 'reevaluateResetRestoreState'
+                       } );
                }
 
                this.emptyFilterMessage = new OO.ui.LabelWidget( {
                this.getMenu().toggle( false );
        };
 
+       /**
+        * Respond to save query model initialization
+        */
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.onSavedQueriesInitialize = function () {
+               this.setSavedQueryVisibility();
+       };
+
        /**
         * Respond to save query item change. Mainly this is done to update the label in case
         * a query item has been edited
                // Parent
                mw.rcfilters.ui.FilterTagMultiselectWidget.parent.prototype.onInputFocus.call( this );
 
-               // Scroll to top
-               this.scrollToTop( this.$element );
+               // Only scroll to top of the viewport if:
+               // - The widget is more than 20px from the top
+               // - The widget is not above the top of the viewport (do not scroll downwards)
+               //   (This isn't represented because >20 is, anyways and always, bigger than 0)
+               this.scrollToTop( this.$element, 0, { min: 20, max: Infinity } );
        };
 
        /**
                        this.matchingQuery ? this.matchingQuery.getLabel() : ''
                );
                this.savedQueryTitle.toggle( !!this.matchingQuery );
-               this.saveQueryButton.toggle(
-                       !this.isEmpty() &&
-                       !this.matchingQuery
-               );
+               this.saveQueryButton.toggle( !this.matchingQuery );
 
                if ( this.matchingQuery ) {
                        this.emphasize();
         * Reevaluate the restore state for the widget between setting to defaults and clearing all filters
         */
        mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.reevaluateResetRestoreState = function () {
-               var defaultsAreEmpty = this.model.areDefaultFiltersEmpty(),
+               var defaultsAreEmpty = this.controller.areDefaultsEmpty(),
                        currFiltersAreEmpty = this.model.areCurrentFiltersEmpty(),
                        hideResetButton = currFiltersAreEmpty && defaultsAreEmpty;
 
         *
         * @private
         * @param {jQuery} $element Element to position
-        * @param {number} [marginFromTop] When scrolling the entire widget to the top, leave this
+        * @param {number} [marginFromTop=0] When scrolling the entire widget to the top, leave this
         *  much space (in pixels) above the widget.
+        * @param {Object} [threshold] Minimum distance from the top of the element to scroll at all
+        * @param {number} [threshold.min] Minimum distance above the element
+        * @param {number} [threshold.max] Minimum distance below the element
         */
-       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.scrollToTop = function ( $element, marginFromTop ) {
+       mw.rcfilters.ui.FilterTagMultiselectWidget.prototype.scrollToTop = function ( $element, marginFromTop, threshold ) {
                var container = OO.ui.Element.static.getClosestScrollableContainer( $element[ 0 ], 'y' ),
                        pos = OO.ui.Element.static.getRelativePosition( $element, $( container ) ),
-                       containerScrollTop = $( container ).is( 'body, html' ) ? 0 : $( container ).scrollTop();
+                       containerScrollTop = $( container ).scrollTop(),
+                       effectiveScrollTop = $( container ).is( 'body, html' ) ? 0 : containerScrollTop,
+                       newScrollTop = effectiveScrollTop + pos.top - ( marginFromTop || 0 );
 
                // Scroll to item
-               $( container ).animate( {
-                       scrollTop: containerScrollTop + pos.top - ( marginFromTop || 0 )
-               } );
+               if (
+                       threshold === undefined ||
+                       (
+                               (
+                                       threshold.min === undefined ||
+                                       newScrollTop - containerScrollTop >= threshold.min
+                               ) &&
+                               (
+                                       threshold.max === undefined ||
+                                       newScrollTop - containerScrollTop <= threshold.max
+                               )
+                       )
+               ) {
+                       $( container ).animate( {
+                               scrollTop: newScrollTop
+                       } );
+               }
        };
 }( mediaWiki ) );
index 3e0d2b9..916c463 100644 (file)
@@ -76,6 +76,16 @@ textarea {
        width: auto;
 }
 
+#contentSub:empty,
+#contentSub2:empty {
+       display: none;
+}
+
+#contentSub:empty ~ #jump-to-nav,
+#contentSub2:empty ~ #jump-to-nav {
+       margin-top: 0;
+}
+
 span.subpages {
        display: block;
 }
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js b/resources/src/mediawiki.special/mediawiki.special.preferences.confirmClose.js
new file mode 100644 (file)
index 0000000..45df37f
--- /dev/null
@@ -0,0 +1,63 @@
+/*!
+ * JavaScript for Special:Preferences: Enable save button and prevent the window being accidentally
+ * closed when any form field is changed.
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var allowCloseWindow;
+
+               // Check if all of the form values are unchanged
+               function isPrefsChanged() {
+                       var inputs = $( '#mw-prefs-form :input[name]' ),
+                               input, $input, inputType,
+                               index, optIndex,
+                               opt;
+
+                       for ( index = 0; index < inputs.length; index++ ) {
+                               input = inputs[ index ];
+                               $input = $( input );
+
+                               // Different types of inputs have different methods for accessing defaults
+                               if ( $input.is( 'select' ) ) {
+                                       // <select> has the property defaultSelected for each option
+                                       for ( optIndex = 0; optIndex < input.options.length; optIndex++ ) {
+                                               opt = input.options[ optIndex ];
+                                               if ( opt.selected !== opt.defaultSelected ) {
+                                                       return true;
+                                               }
+                                       }
+                               } else if ( $input.is( 'input' ) ) { // <input> has defaultValue or defaultChecked
+                                       inputType = input.type;
+                                       if ( inputType === 'radio' || inputType === 'checkbox' ) {
+                                               if ( input.checked !== input.defaultChecked ) {
+                                                       return true;
+                                               }
+                                       } else if ( input.value !== input.defaultValue ) {
+                                               return true;
+                                       }
+                               }
+                       }
+
+                       return false;
+               }
+
+               // Disable the button to save preferences unless preferences have changed
+               // Check if preferences have been changed before JS has finished loading
+               if ( !isPrefsChanged() ) {
+                       $( '#prefcontrol' ).prop( 'disabled', true );
+                       $( '#preferences > fieldset' ).one( 'change keydown mousedown', function () {
+                               $( '#prefcontrol' ).prop( 'disabled', false );
+                       } );
+               }
+
+               // Set up a message to notify users if they try to leave the page without
+               // saving.
+               allowCloseWindow = mw.confirmCloseWindow( {
+                       test: isPrefsChanged,
+                       message: mw.msg( 'prefswarning-warning', mw.msg( 'saveprefs' ) ),
+                       namespace: 'prefswarning'
+               } );
+               $( '#mw-prefs-form' ).submit( $.proxy( allowCloseWindow, 'release' ) );
+               $( '#mw-prefs-restoreprefs' ).click( $.proxy( allowCloseWindow, 'release' ) );
+       } );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js b/resources/src/mediawiki.special/mediawiki.special.preferences.convertmessagebox.js
new file mode 100644 (file)
index 0000000..cee7382
--- /dev/null
@@ -0,0 +1,9 @@
+/*!
+ * JavaScript for Special:Preferences: Check for successbox to replace with notifications.
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var convertmessagebox = require( 'mediawiki.notification.convertmessagebox' );
+               convertmessagebox();
+       } );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.js b/resources/src/mediawiki.special/mediawiki.special.preferences.js
deleted file mode 100644 (file)
index 63f2d98..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-/*!
- * JavaScript for Special:Preferences
- */
-( function ( mw, $ ) {
-       $( function () {
-               var $preftoc, $preferences, $fieldsets, labelFunc, previousTab,
-                       $tzSelect, $tzTextbox, $localtimeHolder, servertime, allowCloseWindow,
-                       convertmessagebox = require( 'mediawiki.notification.convertmessagebox' );
-
-               labelFunc = function () {
-                       return this.id.replace( /^mw-prefsection/g, 'preftab' );
-               };
-
-               $( '#prefsubmit' ).attr( 'id', 'prefcontrol' );
-               $preftoc = $( '#preftoc' );
-               $preferences = $( '#preferences' );
-
-               $fieldsets = $preferences.children( 'fieldset' )
-                       .attr( {
-                               role: 'tabpanel',
-                               'aria-labelledby': labelFunc
-                       } );
-               $fieldsets.not( '#mw-prefsection-personal' )
-                       .hide()
-                       .attr( 'aria-hidden', 'true' );
-
-               // T115692: The following is kept for backwards compatibility with older skins
-               $preferences.addClass( 'jsprefs' );
-               $fieldsets.addClass( 'prefsection' );
-               $fieldsets.children( 'legend' ).addClass( 'mainLegend' );
-
-               // Make sure the accessibility tip is selectable so that screen reader users take notice,
-               // but hide it per default to reduce interface clutter. Also make sure it becomes visible
-               // when selected. Similar to jquery.mw-jump
-               $( '<div>' ).addClass( 'mw-navigation-hint' )
-                       .text( mw.msg( 'prefs-tabs-navigation-hint' ) )
-                       .attr( 'tabIndex', 0 )
-                       .on( 'focus blur', function ( e ) {
-                               if ( e.type === 'blur' || e.type === 'focusout' ) {
-                                       $( this ).css( 'height', '0' );
-                               } else {
-                                       $( this ).css( 'height', 'auto' );
-                               }
-                       } ).insertBefore( $preftoc );
-
-               /**
-                * It uses document.getElementById for security reasons (HTML injections in $()).
-                *
-                * @ignore
-                * @param {string} name the name of a tab without the prefix ("mw-prefsection-")
-                * @param {string} [mode] A hash will be set according to the current
-                *  open section. Set mode 'noHash' to surpress this.
-                */
-               function switchPrefTab( name, mode ) {
-                       var $tab, scrollTop;
-                       // Handle hash manually to prevent jumping,
-                       // therefore save and restore scrollTop to prevent jumping.
-                       scrollTop = $( window ).scrollTop();
-                       if ( mode !== 'noHash' ) {
-                               location.hash = '#mw-prefsection-' + name;
-                       }
-                       $( window ).scrollTop( scrollTop );
-
-                       $preftoc.find( 'li' ).removeClass( 'selected' )
-                               .find( 'a' ).attr( {
-                                       tabIndex: -1,
-                                       'aria-selected': 'false'
-                               } );
-
-                       $tab = $( document.getElementById( 'preftab-' + name ) );
-                       if ( $tab.length ) {
-                               $tab.attr( {
-                                       tabIndex: 0,
-                                       'aria-selected': 'true'
-                               } ).focus()
-                                       .parent().addClass( 'selected' );
-
-                               $preferences.children( 'fieldset' ).hide().attr( 'aria-hidden', 'true' );
-                               $( document.getElementById( 'mw-prefsection-' + name ) ).show().attr( 'aria-hidden', 'false' );
-                       }
-               }
-
-               // Check for successbox to replace with notifications
-               convertmessagebox();
-
-               // Enable keyboard users to use left and right keys to switch tabs
-               $preftoc.on( 'keydown', function ( event ) {
-                       var keyLeft = 37,
-                               keyRight = 39,
-                               $el;
-
-                       if ( event.keyCode === keyLeft ) {
-                               $el = $( '#preftoc li.selected' ).prev().find( 'a' );
-                       } else if ( event.keyCode === keyRight ) {
-                               $el = $( '#preftoc li.selected' ).next().find( 'a' );
-                       } else {
-                               return;
-                       }
-                       if ( $el.length > 0 ) {
-                               switchPrefTab( $el.attr( 'href' ).replace( '#mw-prefsection-', '' ) );
-                       }
-               } );
-
-               // Jump to correct section as indicated by the hash.
-               // This function is called onload and onhashchange.
-               function detectHash() {
-                       var hash = location.hash,
-                               matchedElement, parentSection;
-                       if ( hash.match( /^#mw-prefsection-[\w-]+/ ) ) {
-                               mw.storage.session.remove( 'mwpreferences-prevTab' );
-                               switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
-                       } else if ( hash.match( /^#mw-[\w-]+/ ) ) {
-                               matchedElement = document.getElementById( hash.slice( 1 ) );
-                               parentSection = $( matchedElement ).closest( '.prefsection' );
-                               if ( parentSection.length ) {
-                                       mw.storage.session.remove( 'mwpreferences-prevTab' );
-                                       // Switch to proper tab and scroll to selected item.
-                                       switchPrefTab( parentSection.attr( 'id' ).replace( 'mw-prefsection-', '' ), 'noHash' );
-                                       matchedElement.scrollIntoView();
-                               }
-                       }
-               }
-
-               // In browsers that support the onhashchange event we will not bind click
-               // handlers and instead let the browser do the default behavior (clicking the
-               // <a href="#.."> will naturally set the hash, handled by onhashchange.
-               // But other things that change the hash will also be caught (e.g. using
-               // the Back and Forward browser navigation).
-               // Note the special check for IE "compatibility" mode.
-               if ( 'onhashchange' in window &&
-                       ( document.documentMode === undefined || document.documentMode >= 8 )
-               ) {
-                       $( window ).on( 'hashchange', function () {
-                               var hash = location.hash;
-                               if ( hash.match( /^#mw-[\w-]+/ ) ) {
-                                       detectHash();
-                               } else if ( hash === '' ) {
-                                       switchPrefTab( 'personal', 'noHash' );
-                               }
-                       } )
-                               // Run the function immediately to select the proper tab on startup.
-                               .trigger( 'hashchange' );
-               // In older browsers we'll bind a click handler as fallback.
-               // We must not have onhashchange *and* the click handlers, otherwise
-               // the click handler calls switchPrefTab() which sets the hash value,
-               // which triggers onhashchange and calls switchPrefTab() again.
-               } else {
-                       $preftoc.on( 'click', 'li a', function ( e ) {
-                               switchPrefTab( $( this ).attr( 'href' ).replace( '#mw-prefsection-', '' ) );
-                               e.preventDefault();
-                       } );
-                       // If we've reloaded the page or followed an open-in-new-window,
-                       // make the selected tab visible.
-                       detectHash();
-               }
-
-               // Timezone functions.
-               // Guesses Timezone from browser and updates fields onchange.
-
-               $tzSelect = $( '#mw-input-wptimecorrection' );
-               $tzTextbox = $( '#mw-input-wptimecorrection-other' );
-               $localtimeHolder = $( '#wpLocalTime' );
-               servertime = parseInt( $( 'input[name="wpServerTime"]' ).val(), 10 );
-
-               function minutesToHours( min ) {
-                       var tzHour = Math.floor( Math.abs( min ) / 60 ),
-                               tzMin = Math.abs( min ) % 60,
-                               tzString = ( ( min >= 0 ) ? '' : '-' ) + ( ( tzHour < 10 ) ? '0' : '' ) + tzHour +
-                                       ':' + ( ( tzMin < 10 ) ? '0' : '' ) + tzMin;
-                       return tzString;
-               }
-
-               function hoursToMinutes( hour ) {
-                       var minutes,
-                               arr = hour.split( ':' );
-
-                       arr[ 0 ] = parseInt( arr[ 0 ], 10 );
-
-                       if ( arr.length === 1 ) {
-                               // Specification is of the form [-]XX
-                               minutes = arr[ 0 ] * 60;
-                       } else {
-                               // Specification is of the form [-]XX:XX
-                               minutes = Math.abs( arr[ 0 ] ) * 60 + parseInt( arr[ 1 ], 10 );
-                               if ( arr[ 0 ] < 0 ) {
-                                       minutes *= -1;
-                               }
-                       }
-                       // Gracefully handle non-numbers.
-                       if ( isNaN( minutes ) ) {
-                               return 0;
-                       } else {
-                               return minutes;
-                       }
-               }
-
-               function updateTimezoneSelection() {
-                       var minuteDiff, localTime,
-                               type = $tzSelect.val();
-
-                       if ( type === 'other' ) {
-                               // User specified time zone manually in <input>
-                               // Grab data from the textbox, parse it.
-                               minuteDiff = hoursToMinutes( $tzTextbox.val() );
-                       } else {
-                               // Time zone not manually specified by user
-                               if ( type === 'guess' ) {
-                                       // Get browser timezone & fill it in
-                                       minuteDiff = -( new Date().getTimezoneOffset() );
-                                       $tzTextbox.val( minutesToHours( minuteDiff ) );
-                                       $tzSelect.val( 'other' );
-                                       $tzTextbox.prop( 'disabled', false );
-                               } else {
-                                       // Grab data from the $tzSelect value
-                                       minuteDiff = parseInt( type.split( '|' )[ 1 ], 10 ) || 0;
-                                       $tzTextbox.val( minutesToHours( minuteDiff ) );
-                               }
-
-                               // Set defaultValue prop on the generated box so we don't trigger the
-                               // unsaved preferences check
-                               $tzTextbox.prop( 'defaultValue', $tzTextbox.val() );
-                       }
-
-                       // Determine local time from server time and minutes difference, for display.
-                       localTime = servertime + minuteDiff;
-
-                       // Bring time within the [0,1440) range.
-                       localTime = ( ( localTime % 1440 ) + 1440 ) % 1440;
-
-                       $localtimeHolder.text( mw.language.convertNumber( minutesToHours( localTime ) ) );
-               }
-
-               if ( $tzSelect.length && $tzTextbox.length ) {
-                       $tzSelect.change( updateTimezoneSelection );
-                       $tzTextbox.blur( updateTimezoneSelection );
-                       updateTimezoneSelection();
-               }
-
-               // Restore the active tab after saving the preferences
-               previousTab = mw.storage.session.get( 'mwpreferences-prevTab' );
-               if ( previousTab ) {
-                       switchPrefTab( previousTab, 'noHash' );
-                       // Deleting the key, the tab states should be reset until we press Save
-                       mw.storage.session.remove( 'mwpreferences-prevTab' );
-               }
-
-               $( '#mw-prefs-form' ).on( 'submit', function () {
-                       var value = $( $preftoc ).find( 'li.selected a' ).attr( 'id' ).replace( 'preftab-', '' );
-                       mw.storage.session.set( 'mwpreferences-prevTab', value );
-               } );
-
-               // Check if all of the form values are unchanged
-               function isPrefsChanged() {
-                       var inputs = $( '#mw-prefs-form :input[name]' ),
-                               input, $input, inputType,
-                               index, optIndex,
-                               opt;
-
-                       for ( index = 0; index < inputs.length; index++ ) {
-                               input = inputs[ index ];
-                               $input = $( input );
-
-                               // Different types of inputs have different methods for accessing defaults
-                               if ( $input.is( 'select' ) ) {
-                                       // <select> has the property defaultSelected for each option
-                                       for ( optIndex = 0; optIndex < input.options.length; optIndex++ ) {
-                                               opt = input.options[ optIndex ];
-                                               if ( opt.selected !== opt.defaultSelected ) {
-                                                       return true;
-                                               }
-                                       }
-                               } else if ( $input.is( 'input' ) ) { // <input> has defaultValue or defaultChecked
-                                       inputType = input.type;
-                                       if ( inputType === 'radio' || inputType === 'checkbox' ) {
-                                               if ( input.checked !== input.defaultChecked ) {
-                                                       return true;
-                                               }
-                                       } else if ( input.value !== input.defaultValue ) {
-                                               return true;
-                                       }
-                               }
-                       }
-
-                       return false;
-               }
-
-               // Disable the button to save preferences unless preferences have changed
-               // Check if preferences have been changed before JS has finished loading
-               if ( !isPrefsChanged() ) {
-                       $( '#prefcontrol' ).prop( 'disabled', true );
-                       $( '#preferences > fieldset' ).one( 'change keydown mousedown', function () {
-                               $( '#prefcontrol' ).prop( 'disabled', false );
-                       } );
-               }
-
-               // Set up a message to notify users if they try to leave the page without
-               // saving.
-               allowCloseWindow = mw.confirmCloseWindow( {
-                       test: isPrefsChanged,
-                       message: mw.msg( 'prefswarning-warning', mw.msg( 'saveprefs' ) ),
-                       namespace: 'prefswarning'
-               } );
-               $( '#mw-prefs-form' ).submit( $.proxy( allowCloseWindow, 'release' ) );
-               $( '#mw-prefs-restoreprefs' ).click( $.proxy( allowCloseWindow, 'release' ) );
-       } );
-}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.tabs.js b/resources/src/mediawiki.special/mediawiki.special.preferences.tabs.js
new file mode 100644 (file)
index 0000000..dcfad27
--- /dev/null
@@ -0,0 +1,165 @@
+/*!
+ * JavaScript for Special:Preferences: Tab navigation.
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var $preftoc, $preferences, $fieldsets, labelFunc, previousTab;
+
+               labelFunc = function () {
+                       return this.id.replace( /^mw-prefsection/g, 'preftab' );
+               };
+
+               $preftoc = $( '#preftoc' );
+               $preferences = $( '#preferences' );
+
+               $fieldsets = $preferences.children( 'fieldset' )
+                       .attr( {
+                               role: 'tabpanel',
+                               'aria-labelledby': labelFunc
+                       } );
+               $fieldsets.not( '#mw-prefsection-personal' )
+                       .hide()
+                       .attr( 'aria-hidden', 'true' );
+
+               // T115692: The following is kept for backwards compatibility with older skins
+               $preferences.addClass( 'jsprefs' );
+               $fieldsets.addClass( 'prefsection' );
+               $fieldsets.children( 'legend' ).addClass( 'mainLegend' );
+
+               // Make sure the accessibility tip is selectable so that screen reader users take notice,
+               // but hide it per default to reduce interface clutter. Also make sure it becomes visible
+               // when selected. Similar to jquery.mw-jump
+               $( '<div>' ).addClass( 'mw-navigation-hint' )
+                       .text( mw.msg( 'prefs-tabs-navigation-hint' ) )
+                       .attr( 'tabIndex', 0 )
+                       .on( 'focus blur', function ( e ) {
+                               if ( e.type === 'blur' || e.type === 'focusout' ) {
+                                       $( this ).css( 'height', '0' );
+                               } else {
+                                       $( this ).css( 'height', 'auto' );
+                               }
+                       } ).insertBefore( $preftoc );
+
+               /**
+                * It uses document.getElementById for security reasons (HTML injections in $()).
+                *
+                * @ignore
+                * @param {string} name the name of a tab without the prefix ("mw-prefsection-")
+                * @param {string} [mode] A hash will be set according to the current
+                *  open section. Set mode 'noHash' to surpress this.
+                */
+               function switchPrefTab( name, mode ) {
+                       var $tab, scrollTop;
+                       // Handle hash manually to prevent jumping,
+                       // therefore save and restore scrollTop to prevent jumping.
+                       scrollTop = $( window ).scrollTop();
+                       if ( mode !== 'noHash' ) {
+                               location.hash = '#mw-prefsection-' + name;
+                       }
+                       $( window ).scrollTop( scrollTop );
+
+                       $preftoc.find( 'li' ).removeClass( 'selected' )
+                               .find( 'a' ).attr( {
+                                       tabIndex: -1,
+                                       'aria-selected': 'false'
+                               } );
+
+                       $tab = $( document.getElementById( 'preftab-' + name ) );
+                       if ( $tab.length ) {
+                               $tab.attr( {
+                                       tabIndex: 0,
+                                       'aria-selected': 'true'
+                               } ).focus()
+                                       .parent().addClass( 'selected' );
+
+                               $preferences.children( 'fieldset' ).hide().attr( 'aria-hidden', 'true' );
+                               $( document.getElementById( 'mw-prefsection-' + name ) ).show().attr( 'aria-hidden', 'false' );
+                       }
+               }
+
+               // Enable keyboard users to use left and right keys to switch tabs
+               $preftoc.on( 'keydown', function ( event ) {
+                       var keyLeft = 37,
+                               keyRight = 39,
+                               $el;
+
+                       if ( event.keyCode === keyLeft ) {
+                               $el = $( '#preftoc li.selected' ).prev().find( 'a' );
+                       } else if ( event.keyCode === keyRight ) {
+                               $el = $( '#preftoc li.selected' ).next().find( 'a' );
+                       } else {
+                               return;
+                       }
+                       if ( $el.length > 0 ) {
+                               switchPrefTab( $el.attr( 'href' ).replace( '#mw-prefsection-', '' ) );
+                       }
+               } );
+
+               // Jump to correct section as indicated by the hash.
+               // This function is called onload and onhashchange.
+               function detectHash() {
+                       var hash = location.hash,
+                               matchedElement, parentSection;
+                       if ( hash.match( /^#mw-prefsection-[\w]+$/ ) ) {
+                               mw.storage.session.remove( 'mwpreferences-prevTab' );
+                               switchPrefTab( hash.replace( '#mw-prefsection-', '' ) );
+                       } else if ( hash.match( /^#mw-[\w-]+$/ ) ) {
+                               matchedElement = document.getElementById( hash.slice( 1 ) );
+                               parentSection = $( matchedElement ).parent().closest( '[id^="mw-prefsection-"]' );
+                               if ( parentSection.length ) {
+                                       mw.storage.session.remove( 'mwpreferences-prevTab' );
+                                       // Switch to proper tab and scroll to selected item.
+                                       switchPrefTab( parentSection.attr( 'id' ).replace( 'mw-prefsection-', '' ), 'noHash' );
+                                       matchedElement.scrollIntoView();
+                               }
+                       }
+               }
+
+               // In browsers that support the onhashchange event we will not bind click
+               // handlers and instead let the browser do the default behavior (clicking the
+               // <a href="#.."> will naturally set the hash, handled by onhashchange.
+               // But other things that change the hash will also be caught (e.g. using
+               // the Back and Forward browser navigation).
+               // Note the special check for IE "compatibility" mode.
+               if ( 'onhashchange' in window &&
+                       ( document.documentMode === undefined || document.documentMode >= 8 )
+               ) {
+                       $( window ).on( 'hashchange', function () {
+                               var hash = location.hash;
+                               if ( hash.match( /^#mw-[\w-]+/ ) ) {
+                                       detectHash();
+                               } else if ( hash === '' ) {
+                                       switchPrefTab( 'personal', 'noHash' );
+                               }
+                       } )
+                               // Run the function immediately to select the proper tab on startup.
+                               .trigger( 'hashchange' );
+               // In older browsers we'll bind a click handler as fallback.
+               // We must not have onhashchange *and* the click handlers, otherwise
+               // the click handler calls switchPrefTab() which sets the hash value,
+               // which triggers onhashchange and calls switchPrefTab() again.
+               } else {
+                       $preftoc.on( 'click', 'li a', function ( e ) {
+                               switchPrefTab( $( this ).attr( 'href' ).replace( '#mw-prefsection-', '' ) );
+                               e.preventDefault();
+                       } );
+                       // If we've reloaded the page or followed an open-in-new-window,
+                       // make the selected tab visible.
+                       detectHash();
+               }
+
+               // Restore the active tab after saving the preferences
+               previousTab = mw.storage.session.get( 'mwpreferences-prevTab' );
+               if ( previousTab ) {
+                       switchPrefTab( previousTab, 'noHash' );
+                       // Deleting the key, the tab states should be reset until we press Save
+                       mw.storage.session.remove( 'mwpreferences-prevTab' );
+               }
+
+               $( '#mw-prefs-form' ).on( 'submit', function () {
+                       var value = $( $preftoc ).find( 'li.selected a' ).attr( 'id' ).replace( 'preftab-', '' );
+                       mw.storage.session.set( 'mwpreferences-prevTab', value );
+               } );
+
+       } );
+}( mediaWiki, jQuery ) );
diff --git a/resources/src/mediawiki.special/mediawiki.special.preferences.timezone.js b/resources/src/mediawiki.special/mediawiki.special.preferences.timezone.js
new file mode 100644 (file)
index 0000000..58a5f84
--- /dev/null
@@ -0,0 +1,92 @@
+/*!
+ * JavaScript for Special:Preferences: Timezone field enhancements.
+ */
+( function ( mw, $ ) {
+       $( function () {
+               var
+                       $tzSelect, $tzTextbox, $localtimeHolder, servertime;
+
+               // Timezone functions.
+               // Guesses Timezone from browser and updates fields onchange.
+
+               $tzSelect = $( '#mw-input-wptimecorrection' );
+               $tzTextbox = $( '#mw-input-wptimecorrection-other' );
+               $localtimeHolder = $( '#wpLocalTime' );
+               servertime = parseInt( $( 'input[name="wpServerTime"]' ).val(), 10 );
+
+               function minutesToHours( min ) {
+                       var tzHour = Math.floor( Math.abs( min ) / 60 ),
+                               tzMin = Math.abs( min ) % 60,
+                               tzString = ( ( min >= 0 ) ? '' : '-' ) + ( ( tzHour < 10 ) ? '0' : '' ) + tzHour +
+                                       ':' + ( ( tzMin < 10 ) ? '0' : '' ) + tzMin;
+                       return tzString;
+               }
+
+               function hoursToMinutes( hour ) {
+                       var minutes,
+                               arr = hour.split( ':' );
+
+                       arr[ 0 ] = parseInt( arr[ 0 ], 10 );
+
+                       if ( arr.length === 1 ) {
+                               // Specification is of the form [-]XX
+                               minutes = arr[ 0 ] * 60;
+                       } else {
+                               // Specification is of the form [-]XX:XX
+                               minutes = Math.abs( arr[ 0 ] ) * 60 + parseInt( arr[ 1 ], 10 );
+                               if ( arr[ 0 ] < 0 ) {
+                                       minutes *= -1;
+                               }
+                       }
+                       // Gracefully handle non-numbers.
+                       if ( isNaN( minutes ) ) {
+                               return 0;
+                       } else {
+                               return minutes;
+                       }
+               }
+
+               function updateTimezoneSelection() {
+                       var minuteDiff, localTime,
+                               type = $tzSelect.val();
+
+                       if ( type === 'other' ) {
+                               // User specified time zone manually in <input>
+                               // Grab data from the textbox, parse it.
+                               minuteDiff = hoursToMinutes( $tzTextbox.val() );
+                       } else {
+                               // Time zone not manually specified by user
+                               if ( type === 'guess' ) {
+                                       // Get browser timezone & fill it in
+                                       minuteDiff = -( new Date().getTimezoneOffset() );
+                                       $tzTextbox.val( minutesToHours( minuteDiff ) );
+                                       $tzSelect.val( 'other' );
+                                       $tzTextbox.prop( 'disabled', false );
+                               } else {
+                                       // Grab data from the $tzSelect value
+                                       minuteDiff = parseInt( type.split( '|' )[ 1 ], 10 ) || 0;
+                                       $tzTextbox.val( minutesToHours( minuteDiff ) );
+                               }
+
+                               // Set defaultValue prop on the generated box so we don't trigger the
+                               // unsaved preferences check
+                               $tzTextbox.prop( 'defaultValue', $tzTextbox.val() );
+                       }
+
+                       // Determine local time from server time and minutes difference, for display.
+                       localTime = servertime + minuteDiff;
+
+                       // Bring time within the [0,1440) range.
+                       localTime = ( ( localTime % 1440 ) + 1440 ) % 1440;
+
+                       $localtimeHolder.text( mw.language.convertNumber( minutesToHours( localTime ) ) );
+               }
+
+               if ( $tzSelect.length && $tzTextbox.length ) {
+                       $tzSelect.change( updateTimezoneSelection );
+                       $tzTextbox.blur( updateTimezoneSelection );
+                       updateTimezoneSelection();
+               }
+
+       } );
+}( mediaWiki, jQuery ) );
index 3b98936..b37cf2f 100644 (file)
@@ -51,6 +51,7 @@
        background-color: #f8f9fa;
        margin-top: 1em;
        border: 1px solid #c8ccd1;
+       border-radius: 2px;
 }
 .search-types {
        float: left;
 /*==========================*/
 
 #mw-searchoptions {
-       margin: 0;
        padding: 0.5em 0.75em 0.75em 0.75em;
        background-color: #f8f9fa;
+       margin: -1px 0 0;
        border: 1px solid #c8ccd1;
-       border-top-width: 0;
+       border-radius: 0 0 2px 2px;
 }
 #mw-searchoptions legend {
        display: none;
index 4a48f46..2366249 100644 (file)
@@ -40,11 +40,12 @@ section.mw-form-header {
 }
 
 .fancycaptcha-captcha-container {
-       background-color: #f8f8f8;
-       border: 1px solid #c9c9c9;
-       padding: 10px;
-       text-align: center;
+       background-color: #f8f9fa;
        margin-bottom: 15px;
+       border: 1px solid #c8ccd1;
+       border-radius: 2px;
+       padding: 8px;
+       text-align: center;
 }
 
 .mw-createacct-captcha-assisted {
@@ -54,13 +55,20 @@ section.mw-form-header {
 
 /* Put a border around the fancycaptcha-image-container. */
 .fancycaptcha-captcha-and-reload {
-       border: 1px solid #c9c9c9;
+       border: 1px solid #c8ccd1;
+       border-radius: 2px 2px 0 0;
        /* Other display formats end up too wide */
        display: table-cell;
        width: 270px;
        background-color: #fff;
 }
 
+.fancycaptcha-captcha-container .mw-ui-input {
+       margin-top: -1px;
+       border-color: #c8ccd1;
+       border-radius: 0 0 2px 2px;
+}
+
 /* Make the fancycaptcha-image-container full-width within its parent. */
 .fancycaptcha-image-container {
        width: 100%;
index cc9c65a..74dc0b7 100644 (file)
@@ -29,7 +29,7 @@
        width: 100%;
        border: 1px solid @colorFieldBorder;
        border-radius: @borderRadius;
-       padding: 0.625em 0.546875em 0.546875em;
+       padding: 0.625em 0.625em 0.546875em;
        // necessary for smooth transition
        box-shadow: inset 0 0 0 0.1em #fff;
        font-family: inherit;
index 4a2895d..29bd59a 100644 (file)
                 * @return {jQuery.Promise}
                 */
                uploadChunk: function ( file, data, start, end, filekey, retries ) {
-                       var upload, retry,
+                       var upload,
                                api = this,
                                chunk = this.slice( file, start, end );
 
                        // In such case, it could be useful to try again: a network hickup
                        // doesn't necessarily have to result in upload failure...
                        retries = retries === undefined ? 1 : retries;
-                       retry = function ( code, result ) {
-                               var deferred = $.Deferred(),
-                                       callback = function () {
-                                               api.uploadChunk( file, data, start, end, filekey, retries - 1 )
-                                                       .then( deferred.resolve, deferred.reject );
-                                       };
-
-                               // Don't retry if the request failed because we aborted it (or
-                               // if it's another kind of request failure)
-                               if ( code !== 'http' || result.textStatus === 'abort' ) {
-                                       return deferred.reject( code, result );
-                               }
-
-                               setTimeout( callback, 1000 );
-                               return deferred.promise();
-                       };
 
                        data.filesize = file.size;
                        data.chunk = chunk;
                        upload = this.uploadWithFormData( file, data );
                        return upload.then(
                                null,
-                               // If the call fails, we may want to try again...
-                               retries === 0 ? null : retry,
+                               function ( code, result ) {
+                                       var retry;
+
+                                       // uploadWithFormData will reject uploads with warnings, but
+                                       // these warnings could be "harmless" or recovered from
+                                       // (e.g. exists-normalized, when it'll be renamed later)
+                                       // In the case of (only) a warning, we still want to
+                                       // continue the chunked upload until it completes: then
+                                       // reject it - at least it's been fully uploaded by then and
+                                       // failure handlers have a complete result object (including
+                                       // possibly more warnings, e.g. duplicate)
+                                       // This matches .upload, which also completes the upload.
+                                       if ( result.upload && result.upload.warnings && code in result.upload.warnings ) {
+                                               if ( end === file.size ) {
+                                                       // uploaded last chunk = reject with result data
+                                                       return $.Deferred().reject( code, result );
+                                               } else {
+                                                       // still uploading chunks = resolve to keep going
+                                                       return $.Deferred().resolve( result );
+                                               }
+                                       }
+
+                                       if ( retries === 0 ) {
+                                               return $.Deferred().reject( code, result );
+                                       }
+
+                                       // If the call flat out failed, we may want to try again...
+                                       retry = api.uploadChunk.bind( this, file, data, start, end, filekey, retries - 1 );
+                                       return api.retry( code, result, retry );
+                               },
                                function ( fraction ) {
                                        // Since we're only uploading small parts of a file, we
                                        // need to adjust the reported progress to reflect where
                        ).promise( { abort: upload.abort } );
                },
 
+               /**
+                * Launch the upload anew if it failed because of network issues.
+                *
+                * @private
+                * @param {string} code Error code
+                * @param {Object} result API result
+                * @param {Function} callable
+                * @return {jQuery.Promise}
+                */
+               retry: function ( code, result, callable ) {
+                       var uploadPromise,
+                               retryTimer,
+                               deferred = $.Deferred(),
+                               // Wrap around the callable, so that once it completes, it'll
+                               // resolve/reject the promise we'll return
+                               retry = function () {
+                                       uploadPromise = callable();
+                                       uploadPromise.then( deferred.resolve, deferred.reject );
+                               };
+
+                       // Don't retry if the request failed because we aborted it (or if
+                       // it's another kind of request failure)
+                       if ( code !== 'http' || result.textStatus === 'abort' ) {
+                               return deferred.reject( code, result );
+                       }
+
+                       retryTimer = setTimeout( retry, 1000 );
+                       return deferred.promise( { abort: function () {
+                               // Clear the scheduled upload, or abort if already in flight
+                               if ( retryTimer ) {
+                                       clearTimeout( retryTimer );
+                               }
+                               if ( uploadPromise.abort ) {
+                                       uploadPromise.abort();
+                               }
+                       } } );
+               },
+
                /**
                 * Slice a chunk out of a File object.
                 *
index 877c99b..24ca434 100644 (file)
@@ -1,7 +1,7 @@
 .mw-foreignStructuredUpload-bookletLayout-license {
        font-size: 90%;
        line-height: 1.4em;
-       color: #555;
+       color: #54595d;
 }
 
 .mw-foreignStructuredUploa-bookletLayout-small-notice {
@@ -13,7 +13,7 @@
                .oo-ui-labelWidget {
                        line-height: 1.2em;
                        font-size: 0.9em;
-                       color: #555;
+                       color: #54595d;
                }
        }
 }
index 398adbb..53cbd60 100644 (file)
                trimFileNameToByteLength = function ( name, extension ) {
                        // There is a special byte limit for file names and ... remember the dot
                        return trimToByteLength( name, FILENAME_MAX_BYTES - extension.length - 1 ) + '.' + extension;
-               },
-
-               // Polyfill for ES5 Object.create
-               createObject = Object.create || ( function () {
-                       return function ( o ) {
-                               function Title() {}
-                               if ( o !== Object( o ) ) {
-                                       throw new Error( 'Cannot inherit from a non-object' );
-                               }
-                               Title.prototype = o;
-                               return new Title();
-                       };
-               }() );
+               };
 
        /* Static members */
 
                        return null;
                }
 
-               t = createObject( Title.prototype );
+               t = Object.create( Title.prototype );
                t.namespace = parsed.namespace;
                t.title = parsed.title;
                t.ext = parsed.ext;
index 7ef32ea..d3e4950 100644 (file)
@@ -45,11 +45,11 @@ div.apihelp-linktrail {
 }
 
 .apihelp-unknown {
-       color: #888;
+       color: #72777d;
 }
 
 .apihelp-empty {
-       color: #888;
+       color: #72777d;
 }
 
 .apihelp-help-urls ul {
index 6a93fdd..c4363ed 100644 (file)
 
 .mw-feedbackDialog-welcome-message,
 .mw-feedbackDialog-feedback-terms {
-       line-height: 1.2em;
+       line-height: 1.4;
 }
 
-.mw-feedbackDialog-feedback-form {
-       margin-top: 1em;
+.mw-feedbackDialog-welcome-message {
+       margin-bottom: 1em;
+}
+
+/* Overwriting OOUI is no fun */
+.mw-feedbackDialog-feedback-form .oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-header {
+       min-width: 4.2em;
+       width: 10%;
+}
+.mw-feedbackDialog-feedback-form .oo-ui-fieldLayout.oo-ui-labelElement.oo-ui-fieldLayout-align-left > .oo-ui-fieldLayout-body > .oo-ui-fieldLayout-field {
+       width: 80%;
 }
 
 .mw-feedbackDialog-feedback-termsofuse {
-       margin-left: 2.5em;
+       margin-left: 2em;
 }
index be7aa63..bf9634f 100644 (file)
@@ -16,7 +16,7 @@
        }
 
        .mediawiki-filewarning-footer {
-               color: #888;
+               color: #72777d;
        }
 
        .empty {
index fc930ca..b522486 100644 (file)
                                registry[ module ].state = 'executing';
 
                                runScript = function () {
-                                       var script, markModuleReady, nestedAddScript, implicitDependencies, implicitWait;
+                                       var script, markModuleReady, nestedAddScript;
 
                                        script = registry[ module ].script;
                                        markModuleReady = function () {
                                                } );
                                        };
 
-                                       implicitDependencies = [];
-
-                                       if ( module === 'user' ) {
-                                               // Implicit dependency on the site module. Not real dependency because
-                                               // it should run after 'site' regardless of whether it succeeds or fails.
-                                               implicitDependencies.push( 'site' );
-                                       }
-
-                                       implicitWait = implicitDependencies.length ?
-                                               mw.loader.using( implicitDependencies ) :
-                                               $.Deferred().resolve();
-
-                                       implicitWait.always( function () {
-                                               try {
-                                                       if ( Array.isArray( script ) ) {
-                                                               nestedAddScript( script, markModuleReady, 0 );
-                                                       } else if ( typeof script === 'function' ) {
-                                                               // Pass jQuery twice so that the signature of the closure which wraps
-                                                               // the script can bind both '$' and 'jQuery'.
-                                                               script( $, $, mw.loader.require, registry[ module ].module );
-                                                               markModuleReady();
-
-                                                       } else if ( typeof script === 'string' ) {
-                                                               // Site and user modules are legacy scripts that run in the global scope.
-                                                               // This is transported as a string instead of a function to avoid needing
-                                                               // to use string manipulation to undo the function wrapper.
-                                                               $.globalEval( script );
-                                                               markModuleReady();
+                                       try {
+                                               if ( Array.isArray( script ) ) {
+                                                       nestedAddScript( script, markModuleReady, 0 );
+                                               } else if ( typeof script === 'function' ) {
+                                                       // Pass jQuery twice so that the signature of the closure which wraps
+                                                       // the script can bind both '$' and 'jQuery'.
+                                                       script( $, $, mw.loader.require, registry[ module ].module );
+                                                       markModuleReady();
+
+                                               } else if ( typeof script === 'string' ) {
+                                                       // Site and user modules are legacy scripts that run in the global scope.
+                                                       // This is transported as a string instead of a function to avoid needing
+                                                       // to use string manipulation to undo the function wrapper.
+                                                       $.globalEval( script );
+                                                       markModuleReady();
 
-                                                       } else {
-                                                               // Module without script
-                                                               markModuleReady();
-                                                       }
-                                               } catch ( e ) {
-                                                       // Use mw.track instead of mw.log because these errors are common in production mode
-                                                       // (e.g. undefined variable), and mw.log is only enabled in debug mode.
-                                                       registry[ module ].state = 'error';
-                                                       mw.track( 'resourceloader.exception', { exception: e, module: module, source: 'module-execute' } );
-                                                       handlePending( module );
+                                               } else {
+                                                       // Module without script
+                                                       markModuleReady();
                                                }
-                                       } );
+                                       } catch ( e ) {
+                                               // Use mw.track instead of mw.log because these errors are common in production mode
+                                               // (e.g. undefined variable), and mw.log is only enabled in debug mode.
+                                               registry[ module ].state = 'error';
+                                               mw.track( 'resourceloader.exception', { exception: e, module: module, source: 'module-execute' } );
+                                               handlePending( module );
+                                       }
                                };
 
                                // Add localizations to message system
                                                // cssHandlesRegistered ensures we don't take off too soon, e.g. when
                                                // one of the cssHandles is fired while we're still creating more handles.
                                                if ( cssHandlesRegistered && pending === 0 && runScript ) {
-                                                       runScript();
+                                                       if ( module === 'user' ) {
+                                                               // Implicit dependency on the site module. Not real dependency because
+                                                               // it should run after 'site' regardless of whether it succeeds or fails.
+                                                               mw.loader.using( [ 'site' ] ).always( runScript );
+                                                       } else {
+                                                               runScript();
+                                                       }
                                                        runScript = undefined; // Revoke
                                                }
                                        };
                                        a = [];
 
                                for ( key in o ) {
-                                       if ( hasOwn.call( o, key ) ) {
-                                               a.push( key );
-                                       }
+                                       a.push( key );
                                }
                                a.sort();
                                for ( key = 0; key < a.length; key++ ) {
                         * @param {string} sourceLoadScript URL of load.php
                         */
                        function doRequest( moduleMap, currReqBase, sourceLoadScript ) {
-                               var query = $.extend(
-                                       { modules: buildModulesString( moduleMap ) },
-                                       currReqBase
-                               );
+                               // Optimisation: Inherit (Object.create), not copy ($.extend)
+                               var query = Object.create( currReqBase );
+                               query.modules = buildModulesString( moduleMap );
                                query = sortQuery( query );
                                addScript( sourceLoadScript + '?' + $.param( query ) );
                        }
                                                // modules for this group from this source.
                                                modules = splits[ source ][ group ];
 
-                                               currReqBase = $.extend( {
-                                                       version: getCombinedVersion( modules )
-                                               }, reqBase );
+                                               // Optimisation: Inherit (Object.create), not copy ($.extend)
+                                               currReqBase = Object.create( reqBase );
+                                               currReqBase.version = getCombinedVersion( modules );
+
                                                // For user modules append a user name to the query string.
                                                if ( group === 'user' && mw.config.get( 'wgUserName' ) !== null ) {
                                                        currReqBase.user = mw.config.get( 'wgUserName' );
index 34f7eba..fb34a89 100644 (file)
                 * @return {string} Encoded string
                 */
                escapeIdForLink: function ( str ) {
-                       var mode = mw.config.get( 'wgFragmentMode' )[ 0 ],
-                               id = escapeIdInternal( str, mode );
-
-                       if ( mode === 'html5' ) {
-                               id = encodeURIComponent( id ).replace( /%3A/g, ':' );
-                       }
+                       var mode = mw.config.get( 'wgFragmentMode' )[ 0 ];
 
-                       return id;
+                       return escapeIdInternal( str, mode );
                },
 
                /**
index 5457696..81473df 100644 (file)
@@ -234,7 +234,7 @@ class MWHttpRequestTestCase extends PHPUnit_Framework_TestCase {
 
        /**
         * Asserts that the cookie jar does not have the given cookie.
-        * @param string $expectedName Cookie name
+        * @param string $name Cookie name
         * @param CookieJar $cookieJar
         */
        protected function assertNotHasCookie( $name, CookieJar $cookieJar ) {
index 784c29c..33aee7d 100644 (file)
@@ -29,6 +29,8 @@ class DbTestPreviewer extends TestRecorder {
 
        /**
         * This should be called before the table prefix is changed
+        * @param IDatabase $db
+        * @param bool|string $filter
         */
        function __construct( $db, $filter = false ) {
                $this->db = $db;
index ac9f150..94d226c 100644 (file)
@@ -280,6 +280,7 @@ class ParserTestPrinter extends TestRecorder {
 
        /**
         * Show a warning to the user
+        * @param string $message
         */
        public function warning( $message ) {
                echo "$message\n";
@@ -287,6 +288,8 @@ class ParserTestPrinter extends TestRecorder {
 
        /**
         * Mark a test skipped
+        * @param string $test
+        * @param string $subtest
         */
        public function skipped( $test, $subtest ) {
                if ( $this->showProgress ) {
index 37ed85f..61aa0d7 100644 (file)
@@ -78,6 +78,7 @@ class ParserTestResultNormalizer {
 
        /**
         * Serialize the XML DOM for comparison purposes. This does not generate HTML.
+        * @return string
         */
        protected function serialize() {
                return strtr( $this->doc->saveXML( $this->body ),
index 46c551b..5fe2177 100644 (file)
@@ -518,6 +518,8 @@ class ParserTestRunner {
        /**
         * Ensure a given setup stage has been done, throw an exception if it has
         * not.
+        * @param string $funcName
+        * @param string|null $funcName2
         */
        protected function checkSetupDone( $funcName, $funcName2 = null ) {
                if ( !$this->setupDone[$funcName]
@@ -700,6 +702,8 @@ class ParserTestRunner {
        /**
         * Determine whether the current parser has the hooks registered in it
         * that are required by a file read by TestFileReader.
+        * @param array $requirements
+        * @return bool
         */
        public function meetsRequirements( $requirements ) {
                foreach ( $requirements as $requirement ) {
@@ -1600,12 +1604,15 @@ class ParserTestRunner {
                // get a reference to the mock object.
                MessageCache::singleton()->getParser();
                $restore = $this->executeSetupSnippets( [ 'wgParser' => new ParserTestMockParser ] );
-               $status = $page->doEditContent(
-                       ContentHandler::makeContent( $text, $title ),
-                       '',
-                       EDIT_NEW | EDIT_INTERNAL
-               );
-               $restore();
+               try {
+                       $status = $page->doEditContent(
+                               ContentHandler::makeContent( $text, $title ),
+                               '',
+                               EDIT_NEW | EDIT_INTERNAL
+                       );
+               } finally {
+                       $restore();
+               }
 
                if ( !$status->isOK() ) {
                        throw new MWException( $status->getWikiText( false, false, 'en' ) );
index 238d018..2f82ca7 100644 (file)
@@ -9,6 +9,8 @@ class PhpunitTestRecorder extends TestRecorder {
 
        /**
         * Mark a test skipped
+        * @param string $test
+        * @param string $reason
         */
        public function skipped( $test, $reason ) {
                $this->testCase->markTestSkipped( "SKIPPED: $reason" );
index 39c9ca5..6aed02f 100644 (file)
@@ -29,6 +29,7 @@ class TidySupport {
 
        /**
         * Determine if there is a usable tidy.
+        * @param bool $useConfiguration
         */
        public function __construct( $useConfiguration = false ) {
                global $IP, $wgUseTidy, $wgTidyBin, $wgTidyInternal, $wgTidyConfig,
index ca16738..0aa0e03 100644 (file)
@@ -307,7 +307,7 @@ CircularRef
 <references />
 !! html/parsoid
 <p><span about="#mwt1" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-parsoid='{"pi":[[]]}' data-mw='{"parts":[{"template":{"target":{"wt":"CircularRef","href":"./Template:CircularRef"},"params":{},"i":0}}]}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">Error: Expansion loop detected at <a data-parsoid='{"a":{"href":null},"sa":{"href":"Template:CircularRef"}}'>Template:CircularRef</a></span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">Error: Expansion loop detected at <a data-parsoid='{"a":{"href":null},"sa":{"href":"Template:CircularRef"}}'>Template:CircularRef</a></span></li></ol>
 !! end
 
 !! test
@@ -2449,7 +2449,7 @@ Block tag pre
 foo
 </pre>
 !! html/parsoid
-<p data-parsoid='{"stx":"html","autoInsertedEnd":true}'></p><pre typeof="mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo"}}'>foo</pre><p data-parsoid='{"autoInsertedStart":true,"stx":"html"}'></p>
+<p class='mw-empty-elt' data-parsoid='{"stx":"html","autoInsertedEnd":true}'></p><pre typeof="mw:Extension/pre" about="#mwt2" data-parsoid='{"stx":"html"}' data-mw='{"name":"pre","attrs":{},"body":{"extsrc":"foo"}}'>foo</pre><p class='mw-empty-elt' data-parsoid='{"autoInsertedStart":true,"stx":"html"}'></p>
 !! end
 
 !!test
@@ -4332,6 +4332,21 @@ Definition Lists: Mixed Lists: Test 10
 
 !! end
 
+# This is a regression test for T175099
+# html/php+tidy is insufficient since Tidy covers up the bug.
+# But once Tidy is replaced with RemexHTML, html/php+tidy is good enough
+!! test
+Definition Lists: Mixed Lists: Test 11
+!! wikitext
+; a
+:* b
+!! html/*
+<dl><dt> a</dt>
+<dd>
+<ul><li> b</li></ul></dd></dl>
+
+!! end
+
 # The Parsoid team disagrees with the PHP parser's seemingly-random
 # rules regarding dd/dt on the next two tests.  Parsoid is more
 # consistent, and recognizes the shared nesting and keeps the
@@ -4339,7 +4354,7 @@ Definition Lists: Mixed Lists: Test 10
 # (And tidy again converts <dt> to <dd> before 'bar'.)
 
 !! test
-Definition Lists: Mixed Lists: Test 11
+Definition Lists: Mixed Lists: Test 12
 !! wikitext
 *#*#;*;;foo :bar
 *#*#;boo :baz
@@ -6672,7 +6687,7 @@ Don't break on | in extension attribute in template
 !! html/parsoid
 <p><span about="#mwt2" class="mw-ref" id="cite_ref-hi.7Cho_1-0" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-parsoid='{"pi":[[{"k":"1"}]]}' data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref name=\"hi|ho\">ha&lt;/ref>"}},"i":0}}]}'><a href="./Main_Page#cite_note-hi.7Cho-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></p>
 
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-hi.7Cho-1" id="cite_note-hi.7Cho-1"><a href="./Main_Page#cite_ref-hi.7Cho_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-hi.7Cho-1" class="mw-reference-text">ha</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-hi.7Cho-1" id="cite_note-hi.7Cho-1"><a href="./Main_Page#cite_ref-hi.7Cho_1-0" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-hi.7Cho-1" class="mw-reference-text">ha</span></li></ol>
 !! end
 
 ## We don't support roundtripping of these attributes in Parsoid.
@@ -6847,7 +6862,7 @@ T107652: <ref>s in templates that also generate table cell attributes should be
 <table>
 <tbody><tr><td style="background:#f9f9f9;" typeof="mw:Transclusion" about="#mwt1" data-mw='{"parts":["|",{"template":{"target":{"wt":"table_attribs_7","href":"./Template:Table_attribs_7"},"params":{},"i":0}}]}'>Foo<span class="mw-ref" id="cite_ref-1" rel="dc:references" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></td></tr>
 </tbody></table>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
 !! end
 
 !! test
@@ -7307,8 +7322,8 @@ parsoid=wt2html
 !! html
 <table>
 <tbody>
-<tr></tr>
-<tr></tr>
+<tr class='mw-empty-elt'></tr>
+<tr class='mw-empty-elt'></tr>
 </tbody></table>
 !! end
 
@@ -9691,7 +9706,7 @@ parsoid
 !! wikitext
 *<references />
 !! html/parsoid
-<ul><li data-parsoid='{}'><ol class="mw-references" typeof="mw:Extension/references" about="#mwt2" data-parsoid='{}' data-mw='{"name":"references","attrs":{}}'></ol></li></ul>
+<ul><li data-parsoid='{}'><ol class="mw-references references" typeof="mw:Extension/references" about="#mwt2" data-parsoid='{}' data-mw='{"name":"references","attrs":{}}'></ol></li></ul>
 !! end
 
 !! test
@@ -9861,6 +9876,17 @@ parsoid=wt2html,wt2wt
 <ul>
 <li>not a li-hack</li>
 </ul>
+!! html/parsoid
+<ul><li> foo</li>
+<li data-parsoid='{"stx":"html","autoInsertedEnd":true,"liHackSrc":"* "}'>li-hack</li>
+<li about="#mwt1" typeof="mw:Transclusion" data-parsoid='{"stx":"html","autoInsertedEnd":true,,"pi":[[{"k":"1"}]]}' data-mw='{"parts":["* ",{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;li>templated li-hack"}},"i":0}}]}'>templated li-hack</li>
+<li data-parsoid='{"autoInsertedEnd":true}'> <!--foo--> </li><li data-parsoid='{"stx":"html","autoInsertedEnd":true}'> unsupported li-hack with preceding comments</li></ul>
+
+<ul data-parsoid='{"stx":"html"}'>
+<li class="mw-empty-elt" data-parsoid='{"stx":"html","autoInsertedEnd":true}'></li><li data-parsoid='{"stx":"html"}'>not a li-hack
+</li>
+</ul>
+
 !!end
 
 !! test
@@ -9896,9 +9922,9 @@ Parsoid: Test of whitespace serialization with Templated bullets
 parsoid
 !! wikitext
 * {{bullet}}
-!! html
+!! html/parsoid
 <ul>
-<li> </li><li about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bullet","href":"./Template:Bullet"},"params":{},"i":0}}]}'> Bar</li>
+<li class="mw-empty-elt"> </li><li about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"bullet","href":"./Template:Bullet"},"params":{},"i":0}}]}'> Bar</li>
 </ul>
 !! end
 
@@ -13206,7 +13232,7 @@ Templates: Wiki Tables: 7. Fosterable <ref>s should get fostered
 <tbody>
 </tbody></table>
 
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text">foo</span></li></ol>
 !!end
 
 !! test
@@ -14245,6 +14271,20 @@ Image with caption, T55312 #3
 <figure class="mw-default-size mw-halign-right" typeof="mw:Image"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941"/></a><figcaption>Caption page=stuff</figcaption></figure>
 !! end
 
+!! test
+Image caption with pipe entity
+!! wikitext
+[[File:Foobar.jpg|thumb|one &#x7C; two]]
+[[File:Foobar.jpg|thumb|one ''two'' &#x7C; three]]
+!! html/php
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>one &#x7c; two</div></div></div>
+<div class="thumb tright"><div class="thumbinner" style="width:182px;"><a href="/wiki/File:Foobar.jpg" class="image"><img alt="" src="http://example.com/images/thumb/3/3a/Foobar.jpg/180px-Foobar.jpg" width="180" height="20" class="thumbimage" srcset="http://example.com/images/thumb/3/3a/Foobar.jpg/270px-Foobar.jpg 1.5x, http://example.com/images/thumb/3/3a/Foobar.jpg/360px-Foobar.jpg 2x" /></a>  <div class="thumbcaption"><div class="magnify"><a href="/wiki/File:Foobar.jpg" class="internal" title="Enlarge"></a></div>one <i>two</i> &#x7c; three</div></div></div>
+
+!! html/parsoid
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>one <span typeof="mw:Entity">|</span> two</figcaption></figure>
+<figure class="mw-default-size" typeof="mw:Image/Thumb"><a href="./File:Foobar.jpg"><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220"/></a><figcaption>one <i>two</i> <span typeof="mw:Entity">|</span> three</figcaption></figure>
+!! end
+
 !! test
 Allow empty links in image captions (T62753)
 !! options
@@ -15565,7 +15605,7 @@ T93580: 1. Templated <ref> inside block images
 !! html/parsoid
 <figure class="mw-default-size" typeof="mw:Image/Thumb" data-parsoid='{"optList":[{"ck":"thumbnail","ak":"thumb"},{"ck":"caption","ak":"Caption with templated ref: {{echo|&lt;ref>foo&lt;/ref>}}"}]}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/thumb/3/3a/Foobar.jpg/220px-Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="25" width="220" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"25","width":"220"},"sa":{"resource":"File:Foobar.jpg"}}'/></a><figcaption>Caption with templated ref: <span about="#mwt5" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Transclusion  mw:Extension/ref" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"&lt;ref>foo&lt;/ref>"}},"i":0}}]}'><a href="./Main_Page#cite_note-1" style="counter-reset: mw-Ref 1;"><span class="mw-reflink-text">[1]</span></a></span></figcaption></figure>
 
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
 !! end
 
 !! test
@@ -15577,7 +15617,7 @@ T93580: 2. <ref> inside inline images
 !! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: &lt;ref>foo&lt;/ref>"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,78,5,6]}&#39; data-mw=&#39;{\"name\":\"ref\",\"body\":{\"id\":\"mw-reference-text-cite_note-1\"},\"attrs\":{}}&#39;>&lt;a href=\"./Main_Page#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/span>&lt;meta typeof=\"mw:Extension/ref/Marker\" about=\"#mwt2\" data-parsoid=&#39;{\"group\":\"\",\"name\":\"\",\"content\":\"foo\",\"hasRefInRef\":false,\"dsr\":[64,78,5,6]}&#39;/>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
 !! end
 
 !! test
@@ -15589,7 +15629,7 @@ T93580: 3. Templated <ref> inside inline images
 !! html/parsoid
 <p><span class="mw-default-size" typeof="mw:Image" data-parsoid='{"optList":[{"ck":"caption","ak":"Undisplayed caption in inline image with ref: {{echo|&lt;ref>{{echo|foo}}&lt;/ref>}}"}]}' data-mw='{"caption":"Undisplayed caption in inline image with ref: &lt;span about=\"#mwt2\" class=\"mw-ref\" id=\"cite_ref-1\" rel=\"dc:references\" typeof=\"mw:Transclusion  mw:Extension/ref\" data-parsoid=&#39;{\"dsr\":[64,96,null,null],\"pi\":[[{\"k\":\"1\"}]]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&amp;lt;ref>{{echo|foo}}&amp;lt;/ref>\"}},\"i\":0}}]}&#39;>&lt;a href=\"./Main_Page#cite_note-1\" style=\"counter-reset: mw-Ref 1;\" data-parsoid=\"{}\">&lt;span class=\"mw-reflink-text\" data-parsoid=\"{}\">[1]&lt;/span>&lt;/a>&lt;/span>&lt;meta typeof=\"mw:Transclusion mw:Extension/ref/Marker\" about=\"#mwt2\" data-parsoid=&#39;{\"group\":\"\",\"name\":\"\",\"content\":\"foo\",\"hasRefInRef\":false,\"dsr\":[64,96,null,null],\"pi\":[[{\"k\":\"1\"}]]}&#39; data-mw=&#39;{\"parts\":[{\"template\":{\"target\":{\"wt\":\"echo\",\"href\":\"./Template:Echo\"},\"params\":{\"1\":{\"wt\":\"&amp;lt;ref>{{echo|foo}}&amp;lt;/ref>\"}},\"i\":0}}]}&#39;/>"}'><a href="./File:Foobar.jpg" data-parsoid='{"a":{"href":"./File:Foobar.jpg"},"sa":{}}'><img resource="./File:Foobar.jpg" src="//example.com/images/3/3a/Foobar.jpg" data-file-width="1941" data-file-height="220" data-file-type="bitmap" height="220" width="1941" data-parsoid='{"a":{"resource":"./File:Foobar.jpg","height":"220","width":"1941"},"sa":{"resource":"File:Foobar.jpg"}}'/></a></span></p>
 
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt6" data-mw='{"name":"references","attrs":{}}'><li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">foo</span></li></ol>
 !! end
 
 ###
@@ -18200,7 +18240,7 @@ Parser hook: static parser hook inside a comment
 </p>
 !! html/parsoid
 <!-- <statictag&#x3E;hello, world</statictag&#x3E; -->
-<p typeof="mw:Extension/statictag" data-mw='{"name":"statictag","attrs":{"action":"flush"},"body":null}' data-parsoid='{}' about="#mwt2"></p>
+<p typeof='mw:Extension/statictag' data-mw='{"name":"statictag","attrs":{"action":"flush"},"body":null}' data-parsoid='{}' about='#mwt2'></p>
 !! end
 
 # Nested template calls; this case was broken by Parser.php rev 1.506,
@@ -20986,7 +21026,7 @@ HTML with raw HTML ($wgRawHtml==true)
 wgRawHtml=1
 !! wikitext
 <html><script>alert(1);</script></html>
-!! html
+!! html/php
 <p><script>alert(1);</script>
 </p>
 !! end
@@ -24485,12 +24525,12 @@ Empty LI and TR nodes should not be stripped from top-level content
 !! html/parsoid
 <ul>
 <li> a</li>
-<li></li>
+<li class='mw-empty-elt'></li>
 <li> b</li>
 </ul>
 <table>
 <tbody>
-<tr></tr>
+<tr class='mw-empty-elt'></tr>
 <tr>
 <td>foo</td>
 </tr>
@@ -24504,9 +24544,9 @@ Empty TR nodes should not be stripped if they have any attributes set
 {{EmptyTRWithHTMLAttrTest}}
 !! html/parsoid
 <table about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"EmptyTRWithHTMLAttrTest","href":"./Template:EmptyTRWithHTMLAttrTest"},"params":{},"i":0}}]}'>
-<tr align="center"></tr>
+<tr align='center'></tr>
 <tr><td>foo</td></tr>
-<tr align="center"></tr>
+<tr align='center'></tr>
 <tr><td>bar</td></tr>
 </table>
 !! end
@@ -25792,7 +25832,7 @@ parsoid=html2wt
 '<i>foo</i> <span class="mw-ref" id="cite_ref-1-0" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span>
 '<i>foo</i> <div title="name">test</div>
 '<i>foo</i> and <br data-parsoid='{"stx":"html","noClose":true}'/> bar
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt5" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><span rel="mw:referencedBy"><a href="./Main_Page#cite_ref-1">↑</a></span> <span id="mw-reference-text-cite_note-1" class="mw-reference-text" data-parsoid="{}">test</span></li>
 </ol>
 !! wikitext
 parsoid=html2wt
 !! html/parsoid
 <p>foo <span about="#mwt2" class="mw-ref" id="cite_ref-1" rel="dc:references" typeof="mw:Extension/ref" data-mw='{"name":"ref","body":{"id":"mw-reference-text-cite_note-1"},"attrs":{}}'><a href="./Main_Page#cite_note-1"><span class="mw-reflink-text">[1]</span></a></span></p>
-<ol class="mw-references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
+<ol class="mw-references references" typeof="mw:Extension/references" about="#mwt4" data-mw='{"name":"references","attrs":{}}'>
 <li about="#cite_note-1" id="cite_note-1"><a href="./Main_Page#cite_ref-1" rel="mw:referencedBy"><span class="mw-linkback-text">↑ </span></a> <span id="mw-reference-text-cite_note-1" class="mw-reference-text"><i>a</i>
  b</span></li>
 </ol>
@@ -26350,7 +26390,7 @@ RT-ed inter-element separators should be valid separators
 
 !! html/parsoid
 <table>
-<tbody><tr data-parsoid='{"startTagSrc":"|-","a":{"[[foo]]":null},"sa":{"[[foo]]":""},"autoInsertedEnd":true}'></tr>
+<tbody><tr class='mw-empty-elt' data-parsoid='{"startTagSrc":"|-","a":{"[[foo]]":null},"sa":{"[[foo]]":""},"autoInsertedEnd":true}'></tr>
 </tbody></table>
 !!end
 
@@ -26497,7 +26537,7 @@ parsoid
 !! html
 <table>
 <tbody>
-<tr></tr>
+<tr class='mw-empty-elt'></tr>
 <tr about="#mwt1" typeof="mw:Transclusion" data-mw='{"parts":[{"template":{"target":{"wt":"echo","href":"./Template:Echo"},"params":{"1":{"wt":"<tr><td>foo</td></tr>"}},"i":0}}]}'>
 <td>foo</td></tr>
 </tbody></table>
@@ -26519,7 +26559,7 @@ parsoid
 !! html
 <table>
 <tbody>
-<tr></tr>
+<tr class='mw-empty-elt'></tr>
  <!--c-->
 <tr>
 <!--c--> </tr><!--d-->
@@ -29316,17 +29356,18 @@ unclosed internal link XSS (T137264)
 <p>[[#%3Cscript%3Ealert(1)%3C/script%3E|</p>
 !! end
 
+# Use $wgRawHtml to inject a <style> tag, since you normally can't in wikitext
+# (Parsoid doesn't support $wgRawHtml==true)
 !! test
 Validating that <style> isn't eaten by tidy (T167349)
 !! options
-# Use $wgRawHtml to inject a <style> tag, since you normally can't in wikitext
 wgRawHtml=1
 !! wikitext
 <div class="foo">
 <html><style>.foo::before { content: "<foo>"; }</style></html>
 <html><style data-mw-foobar="baz">.foo::after { content: "<bar>"; }</style></html>
 </div>
-!! html+tidy
+!! html/php+tidy
 <div class="foo">
 <style>.foo::before { content: "<foo>"; }</style>
 <style data-mw-foobar="baz">.foo::after { content: "<bar>"; }</style>
@@ -29340,7 +29381,7 @@ Decoding of HTML entities in headings and links for IDs and link fragments (T103
 [[#A&B&amp;C&amp;amp;D&amp;amp;amp;E]]
 !! html/php
 <h2><span class="mw-headline" id="A.26B.26C.26amp.3BD.26amp.3Bamp.3BE">A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=1" title="Edit section: A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<p><a href="#A.26B.26C.26D.26amp.3BE">#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E</a>
+<p><a href="#A.26B.26C.26amp.3BD.26amp.3Bamp.3BE">#A&amp;B&amp;C&amp;amp;D&amp;amp;amp;E</a>
 </p>
 !! end
 
@@ -29383,10 +29424,10 @@ wgFragmentMode=[ 'html5', 'legacy' ]
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
-<li class="toclevel-1 tocsection-3"><a href="#%D0%A2%D0%B5%D1%81%D1%82"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
-<li class="toclevel-1 tocsection-4"><a href="#%D0%A2%D0%B5%D1%81%D1%82_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
-<li class="toclevel-1 tocsection-5"><a href="#%D1%82%D0%B5%D1%81%D1%82"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
-<li class="toclevel-1 tocsection-6"><a href="#Hey_%3C_%23_%22_%3E_%25_:_%27"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
+<li class="toclevel-1 tocsection-3"><a href="#Тест"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
+<li class="toclevel-1 tocsection-4"><a href="#Тест_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
+<li class="toclevel-1 tocsection-5"><a href="#тест"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
+<li class="toclevel-1 tocsection-6"><a href="#Hey_&lt;_#_&quot;_&gt;_%_:_'"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
 </ul>
 </div>
 
@@ -29396,9 +29437,9 @@ wgFragmentMode=[ 'html5', 'legacy' ]
 <h2><span id=".D0.A2.D0.B5.D1.81.D1.82_2"></span><span class="mw-headline" id="Тест_2">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span id=".D1.82.D0.B5.D1.81.D1.82"></span><span class="mw-headline" id="тест">тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span id="Hey_.3C_.23_.22_.3E_.25_:_.27"></span><span class="mw-headline" id="Hey_&lt;_#_&quot;_&gt;_%_:_'">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : '">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#%D0%A2%D0%B5%D1%81%D1%82">#Тест</a> <a href="#%D1%82%D0%B5%D1%81%D1%82">#тест</a> <a href="#Hey_%3C_%23_%22_%3E_%25_:_%27">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
-</p><p>%F0%9F%92%A9 <span id="%F0%9F%92%A9"></span>
-</p><p><a href="#%E5%95%A4%E9%85%92">#啤酒</a> <a href="#%E5%95%A4%E9%85%92">#啤酒</a>
+<p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#Тест">#Тест</a> <a href="#тест">#тест</a> <a href="#Hey_&lt;_#_&quot;_&gt;_%_:_'">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
+</p><p>💩 <span id="💩"></span>
+</p><p><a href="#啤酒">#啤酒</a> <a href="#啤酒">#啤酒</a>
 </p>
 !! end
 
@@ -29477,10 +29518,10 @@ wgFragmentMode=[ 'html5' ]
 <ul>
 <li class="toclevel-1 tocsection-1"><a href="#Foo_bar"><span class="tocnumber">1</span> <span class="toctext">Foo bar</span></a></li>
 <li class="toclevel-1 tocsection-2"><a href="#foo_Bar_2"><span class="tocnumber">2</span> <span class="toctext">foo Bar</span></a></li>
-<li class="toclevel-1 tocsection-3"><a href="#%D0%A2%D0%B5%D1%81%D1%82"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
-<li class="toclevel-1 tocsection-4"><a href="#%D0%A2%D0%B5%D1%81%D1%82_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
-<li class="toclevel-1 tocsection-5"><a href="#%D1%82%D0%B5%D1%81%D1%82"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
-<li class="toclevel-1 tocsection-6"><a href="#Hey_%3C_%23_%22_%3E_%25_:_%27"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
+<li class="toclevel-1 tocsection-3"><a href="#Тест"><span class="tocnumber">3</span> <span class="toctext">Тест</span></a></li>
+<li class="toclevel-1 tocsection-4"><a href="#Тест_2"><span class="tocnumber">4</span> <span class="toctext">Тест</span></a></li>
+<li class="toclevel-1 tocsection-5"><a href="#тест"><span class="tocnumber">5</span> <span class="toctext">тест</span></a></li>
+<li class="toclevel-1 tocsection-6"><a href="#Hey_&lt;_#_&quot;_&gt;_%_:_'"><span class="tocnumber">6</span> <span class="toctext">Hey &lt; # " &gt;&#160;%&#160;: '</span></a></li>
 </ul>
 </div>
 
@@ -29490,8 +29531,8 @@ wgFragmentMode=[ 'html5' ]
 <h2><span class="mw-headline" id="Тест_2">Тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=4" title="Edit section: Тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span class="mw-headline" id="тест">тест</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=5" title="Edit section: тест">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
 <h2><span class="mw-headline" id="Hey_&lt;_#_&quot;_&gt;_%_:_'">Hey &lt; # " &gt;&#160;%&#160;: '</span><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/index.php?title=Parser_test&amp;action=edit&amp;section=6" title="Edit section: Hey &lt; # &quot; &gt; % : '">edit</a><span class="mw-editsection-bracket">]</span></span></h2>
-<p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#%D0%A2%D0%B5%D1%81%D1%82">#Тест</a> <a href="#%D1%82%D0%B5%D1%81%D1%82">#тест</a> <a href="#Hey_%3C_%23_%22_%3E_%25_:_%27">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
-</p><p>%F0%9F%92%A9 <span id="%F0%9F%92%A9"></span>
-</p><p><a href="#%E5%95%A4%E9%85%92">#啤酒</a> <a href="#%E5%95%A4%E9%85%92">#啤酒</a>
+<p><a href="#Foo_bar">#Foo bar</a> <a href="#foo_Bar">#foo Bar</a> <a href="#Тест">#Тест</a> <a href="#тест">#тест</a> <a href="#Hey_&lt;_#_&quot;_&gt;_%_:_'">#Hey &lt; # " &gt;&#160;%&#160;: '</a>
+</p><p>💩 <span id="💩"></span>
+</p><p><a href="#啤酒">#啤酒</a> <a href="#啤酒">#啤酒</a>
 </p>
 !! end
index 91aaff5..f04eec7 100644 (file)
@@ -213,6 +213,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @param Config|null $bootstrapConfig The bootstrap config to use with the new
         *        MediaWikiServices.
+        * @return MediaWikiServices
         */
        protected static function resetGlobalServices( Config $bootstrapConfig = null ) {
                $oldServices = MediaWikiServices::getInstance();
@@ -1591,7 +1592,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @since 1.20
         *
-        * @param array $array
+        * @param array &$array
         */
        protected function objectAssociativeSort( array &$array ) {
                uasort(
@@ -1609,7 +1610,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
         *
         * @since 1.20
         *
-        * @param mixed $r The array to remove string keys from.
+        * @param mixed &$r The array to remove string keys from.
         */
        protected static function stripStringKeys( &$r ) {
                if ( !is_array( $r ) ) {
@@ -1832,6 +1833,7 @@ abstract class MediaWikiTestCase extends PHPUnit_Framework_TestCase {
 
        /**
         * Used as a marker to prevent wfResetOutputBuffers from breaking PHPUnit.
+        * @param string $buffer
         * @return string
         */
        public static function wfResetOutputBuffersBarrier( $buffer ) {
index f75cc22..1024ecd 100644 (file)
@@ -17,6 +17,7 @@ abstract class ResourceLoaderTestCase extends MediaWikiTestCase {
         * - string 'modules' Pipe-separated list of module names
         * - string|null 'only' "scripts" (unwrapped script), "styles" (stylesheet), or null
         *    (mw.loader.implement).
+        * @param ResourceLoader|null $rl
         * @return ResourceLoaderContext
         */
        protected function getResourceLoaderContext( $options = [], ResourceLoader $rl = null ) {
index 6b7d1af..4f7af21 100644 (file)
@@ -1,4 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <svg xmlns="http://www.w3.org/2000/svg" width="8" height="8">
-<circle cx="4" cy="4" r="2"/>
+       <circle cx="4" cy="4" r="2"/>
 </svg>
diff --git a/tests/phpunit/data/templates/recurse.mustache b/tests/phpunit/data/templates/recurse.mustache
new file mode 100644 (file)
index 0000000..391f227
--- /dev/null
@@ -0,0 +1 @@
+r{{#r}}{{>recurse}}{{/r}}
\ No newline at end of file
index b6682f7..a70f136 100644 (file)
@@ -21,7 +21,7 @@ class WfTimestampTest extends MediaWikiTestCase {
                        [ -30281104, TS_MW, '19690115123456', 'Negative TS_UNIX to TS_MW' ],
                        [ $t, TS_UNIX, 979562096, 'TS_UNIX to TS_UNIX' ],
                        [ $t, TS_DB, '2001-01-15 12:34:56', 'TS_UNIX to TS_DB' ],
-                       [ $t + .01, TS_MW, '20010115123456', 'TS_UNIX float to TS_MW' ],
+                       [ $t + 0.01, TS_MW, '20010115123456', 'TS_UNIX float to TS_MW' ],
 
                        [ $t, TS_ISO_8601_BASIC, '20010115T123456Z', 'TS_ISO_8601_BASIC to TS_DB' ],
 
index 527e129..87acb52 100644 (file)
@@ -142,7 +142,50 @@ class HooksTest extends MediaWikiTestCase {
                } );
                $foo = 'original';
                Hooks::run( 'MediaWikiHooksTest001', [ &$foo ] );
-               $this->assertSame( 'original', $foo, 'Hooks continued processing after a false return.' );
+               $this->assertSame( 'original', $foo, 'Hooks abort after a false return.' );
+       }
+
+       /**
+        * @covers Hooks::runWithoutAbort
+        */
+       public function testRunWithoutAbort() {
+               $list = [];
+               Hooks::register( 'MediaWikiHooksTest001', function ( &$list ) {
+                       $list[] = 1;
+                       return true; // Explicit true
+               } );
+               Hooks::register( 'MediaWikiHooksTest001', function ( &$list ) {
+                       $list[] = 2;
+                       return; // Implicit null
+               } );
+               Hooks::register( 'MediaWikiHooksTest001', function ( &$list ) {
+                       $list[] = 3;
+                       // No return
+               } );
+
+               Hooks::runWithoutAbort( 'MediaWikiHooksTest001', [ &$list ] );
+               $this->assertSame( [ 1, 2, 3 ], $list, 'All hooks ran.' );
+       }
+
+       /**
+        * @covers Hooks::runWithoutAbort
+        */
+       public function testRunWithoutAbortWarning() {
+               Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) {
+                       return false;
+               } );
+               Hooks::register( 'MediaWikiHooksTest001', function ( &$foo ) {
+                       $foo = 'test';
+                       return true;
+               } );
+               $foo = 'original';
+
+               $this->setExpectedException(
+                       UnexpectedValueException::class,
+                       'Invalid return from hook-MediaWikiHooksTest001-closure for ' .
+                               'unabortable MediaWikiHooksTest001'
+               );
+               Hooks::runWithoutAbort( 'MediaWikiHooksTest001', [ &$foo ] );
        }
 
        /**
index d506623..7256694 100644 (file)
@@ -376,7 +376,7 @@ class SanitizerTest extends MediaWikiTestCase {
                        [ '\'', '.27' ],
                        [ '§', '.C2.A7' ],
                        [ 'Test:A & B/Here', 'Test:A_.26_B.2FHere' ],
-                       [ 'A&B&amp;C&amp;amp;D&amp;amp;amp;E', 'A.26B.26C.26amp.3BD.26amp.3Bamp.3BE' ],
+                       [ 'A&B&amp;C&amp;amp;D&amp;amp;amp;E', 'A.26B.26amp.3BC.26amp.3Bamp.3BD.26amp.3Bamp.3Bamp.3BE' ],
                ];
        }
 
@@ -432,7 +432,6 @@ class SanitizerTest extends MediaWikiTestCase {
         * @covers Sanitizer::escapeIdForLink()
         * @covers Sanitizer::escapeIdForExternalInterwiki()
         * @covers Sanitizer::escapeIdInternal()
-        * @covers Sanitizer::urlEscapeId()
         *
         * @param string $stuff
         * @param string[] $config
@@ -453,11 +452,11 @@ class SanitizerTest extends MediaWikiTestCase {
 
        public function provideEscapeIdForStuff() {
                // Test inputs and outputs
-               $text = 'foo тест_#%!\'()[]:<>';
-               $legacyEncoded = 'foo_.D1.82.D0.B5.D1.81.D1.82_.23.25.21.27.28.29.5B.5D:.3C.3E';
-               $html5Encoded = 'foo_тест_#%!\'()[]:<>';
-               $html5Escaped = 'foo_%D1%82%D0%B5%D1%81%D1%82_%23%25%21%27%28%29%5B%5D:%3C%3E';
-               $html5Experimental = 'foo_тест_!_()[]:<>';
+               $text = 'foo тест_#%!\'()[]:<>&&amp;&amp;amp;';
+               $legacyEncoded = 'foo_.D1.82.D0.B5.D1.81.D1.82_.23.25.21.27.28.29.5B.5D:.3C.3E' .
+                       '.26.26amp.3B.26amp.3Bamp.3B';
+               $html5Encoded = 'foo_тест_#%!\'()[]:<>&&amp;&amp;amp;';
+               $html5Experimental = 'foo_тест_!_()[]:<>_amp;_amp;amp;';
 
                // Settings: last element is $wgExternalInterwikiFragmentMode, the rest is $wgFragmentMode
                $legacy = [ 'legacy', 'legacy' ];
@@ -484,20 +483,20 @@ class SanitizerTest extends MediaWikiTestCase {
                        // New world: HTML5 links, legacy fallbacks
                        [ 'Attribute', $newLegacy, $text, $html5Encoded, Sanitizer::ID_PRIMARY ],
                        [ 'Attribute', $newLegacy, $text, $legacyEncoded, Sanitizer::ID_FALLBACK ],
-                       [ 'Link', $newLegacy, $text, $html5Escaped ],
+                       [ 'Link', $newLegacy, $text, $html5Encoded ],
                        [ 'ExternalInterwiki', $newLegacy, $text, $legacyEncoded ],
 
                        // Distant future: no legacy fallbacks, but still linking to leagacy wikis
                        [ 'Attribute', $new, $text, $html5Encoded, Sanitizer::ID_PRIMARY ],
                        [ 'Attribute', $new, $text, false, Sanitizer::ID_FALLBACK ],
-                       [ 'Link', $new, $text, $html5Escaped ],
+                       [ 'Link', $new, $text, $html5Encoded ],
                        [ 'ExternalInterwiki', $new, $text, $legacyEncoded ],
 
                        // Just before the heat death of universe: external interwikis are also HTML5 \m/
                        [ 'Attribute', $allNew, $text, $html5Encoded, Sanitizer::ID_PRIMARY ],
                        [ 'Attribute', $allNew, $text, false, Sanitizer::ID_FALLBACK ],
-                       [ 'Link', $allNew, $text, $html5Escaped ],
-                       [ 'ExternalInterwiki', $allNew, $text, $html5Escaped ],
+                       [ 'Link', $allNew, $text, $html5Encoded ],
+                       [ 'ExternalInterwiki', $allNew, $text, $html5Encoded ],
 
                        // Someone flipped $wgExperimentalHtmlIds on
                        [ 'Attribute', $experimentalLegacy, $text, $html5Experimental, Sanitizer::ID_PRIMARY ],
@@ -508,7 +507,7 @@ class SanitizerTest extends MediaWikiTestCase {
                        // Migration from $wgExperimentalHtmlIds to modern HTML5
                        [ 'Attribute', $newExperimental, $text, $html5Encoded, Sanitizer::ID_PRIMARY ],
                        [ 'Attribute', $newExperimental, $text, $html5Experimental, Sanitizer::ID_FALLBACK ],
-                       [ 'Link', $newExperimental, $text, $html5Escaped ],
+                       [ 'Link', $newExperimental, $text, $html5Encoded ],
                        [ 'ExternalInterwiki', $newExperimental, $text, $legacyEncoded ],
                ];
        }
index ea476a7..cdbf9fd 100644 (file)
@@ -11,6 +11,11 @@ class SiteStatsTest extends MediaWikiTestCase {
                $cache = \MediaWiki\MediaWikiServices::getInstance()->getMainWANObjectCache();
                $jobq = JobQueueGroup::singleton();
 
+               // Delete EditPage jobs that might have been left behind by other tests
+               $jobq->get( 'htmlCacheUpdate' )->delete();
+               $jobq->get( 'recentChangesUpdate' )->delete();
+               $cache->delete( $cache->makeKey( 'SiteStats', 'jobscount' ) );
+
                $jobq->push( new NullJob( Title::newMainPage(), [] ) );
                $this->assertEquals( 1, SiteStats::jobs(),
                         'A single job enqueued bumps jobscount stat to 1' );
index 2bd9086..c161f85 100644 (file)
@@ -109,4 +109,17 @@ class TemplateParserTest extends MediaWikiTestCase {
                        ],
                ];
        }
+
+       public function testEnableRecursivePartials() {
+               $tp = new TemplateParser( $this->templateDir );
+               $data = [ 'r' => [ 'r' => [ 'r' => [] ] ] ];
+
+               $tp->enableRecursivePartials( true );
+               $this->assertEquals( 'rrr', $tp->processTemplate( 'recurse', $data ) );
+
+               $tp->enableRecursivePartials( false );
+               $this->setExpectedException( 'Exception' );
+               $tp->processTemplate( 'recurse', $data );
+       }
+
 }
index 8af3434..d9c01cb 100644 (file)
@@ -305,6 +305,7 @@ class TitleMethodsTest extends MediaWikiLangTestCase {
                        [ 'Help:Main Page', 'Help talk:Main Page' ],
                        [ 'Help talk:Main Page', 'Help:Main Page' ],
                        [ 'Special:FooBar', null ],
+                       [ 'Media:File.jpg', null ],
                ];
        }
 
index 7770cbc..b0febe8 100644 (file)
@@ -637,6 +637,28 @@ class TitleTest extends MediaWikiTestCase {
                ];
        }
 
+       /**
+        * @covers Title::isValid
+        * @dataProvider provideIsValid
+        * @param Title $title
+        * @param bool $isValid
+        */
+       public function testIsValid( Title $title, $isValid ) {
+               $this->assertEquals( $isValid, $title->isValid(), $title->getPrefixedText() );
+       }
+
+       public static function provideIsValid() {
+               return [
+                       [ Title::makeTitle( NS_MAIN, '' ), false ],
+                       [ Title::makeTitle( NS_MAIN, '<>' ), false ],
+                       [ Title::makeTitle( NS_MAIN, '|' ), false ],
+                       [ Title::makeTitle( NS_MAIN, '#' ), false ],
+                       [ Title::makeTitle( NS_MAIN, 'Test' ), true ],
+                       [ Title::makeTitle( -33, 'Test' ), false ],
+                       [ Title::makeTitle( 77663399, 'Test' ), false ],
+               ];
+       }
+
        /**
         * @covers Title::isAlwaysKnown
         */
index 6c059ec..c5572b4 100644 (file)
@@ -403,12 +403,15 @@ class XmlTest extends MediaWikiTestCase {
         */
        public function testListDropDown() {
                $this->assertEquals(
-                       '<select id="test-name" name="test-name" class="test-css" tabindex="2">' . "\n" .
-                               '<option value="other">other reasons</option>' .
-                               '<optgroup label="Foo"><option value="Foo 1">Foo 1</option>' .
-                               '<option value="Example" selected="">Example</option>' .
-                               '</optgroup><optgroup label="Bar">' .
-                               '<option value="Bar 1">Bar 1</option></optgroup>' . "\n" .
+                       '<select name="test-name" id="test-name" class="test-css" tabindex="2">' .
+                               '<option value="other">other reasons</option>' . "\n" .
+                               '<optgroup label="Foo">' .
+                               '<option value="Foo 1">Foo 1</option>' . "\n" .
+                               '<option value="Example" selected="">Example</option>' . "\n" .
+                               '</optgroup>' . "\n" .
+                               '<optgroup label="Bar">' .
+                               '<option value="Bar 1">Bar 1</option>' . "\n" .
+                               '</optgroup>' .
                                '</select>',
                        Xml::listDropDown(
                                // name
@@ -426,4 +429,103 @@ class XmlTest extends MediaWikiTestCase {
                        )
                );
        }
+
+       /**
+        * @covers Xml::listDropDownOptions
+        */
+       public function testListDropDownOptions() {
+               $this->assertEquals(
+                       [
+                               'other reasons' => 'other',
+                               'Foo' => [
+                                       'Foo 1' => 'Foo 1',
+                                       'Example' => 'Example',
+                               ],
+                               'Bar' => [
+                                       'Bar 1' => 'Bar 1',
+                               ],
+                       ],
+                       Xml::listDropDownOptions(
+                               "* Foo\n** Foo 1\n** Example\n* Bar\n** Bar 1",
+                               [ 'other' => 'other reasons' ]
+                       )
+               );
+       }
+
+       /**
+        * @covers Xml::listDropDownOptionsOoui
+        */
+       public function testListDropDownOptionsOoui() {
+               $this->assertEquals(
+                       [
+                               [ 'data' => 'other', 'label' => 'other reasons' ],
+                               [ 'optgroup' => 'Foo' ],
+                               [ 'data' => 'Foo 1', 'label' => 'Foo 1' ],
+                               [ 'data' => 'Example', 'label' => 'Example' ],
+                               [ 'optgroup' => 'Bar' ],
+                               [ 'data' => 'Bar 1', 'label' => 'Bar 1' ],
+                       ],
+                       Xml::listDropDownOptionsOoui( [
+                               'other reasons' => 'other',
+                               'Foo' => [
+                                       'Foo 1' => 'Foo 1',
+                                       'Example' => 'Example',
+                               ],
+                               'Bar' => [
+                                       'Bar 1' => 'Bar 1',
+                               ],
+                       ] )
+               );
+       }
+
+       /**
+        * @covers Xml::fieldset
+        */
+       public function testFieldset() {
+               $this->assertEquals(
+                       "<fieldset>\n",
+                       Xml::fieldset(),
+                       'Opening tag'
+               );
+               $this->assertEquals(
+                       "<fieldset>\n",
+                       Xml::fieldset( false ),
+                       'Opening tag (false means no legend)'
+               );
+               $this->assertEquals(
+                       "<fieldset>\n",
+                       Xml::fieldset( '' ),
+                       'Opening tag (empty string also means no legend)'
+               );
+               $this->assertEquals(
+                       "<fieldset>\n<legend>Foo</legend>\n",
+                       Xml::fieldset( 'Foo' ),
+                       'Opening tag with legend'
+               );
+               $this->assertEquals(
+                       "<fieldset>\n<legend>Foo</legend>\nBar\n</fieldset>\n",
+                       Xml::fieldset( 'Foo', 'Bar' ),
+                       'Entire element with legend'
+               );
+               $this->assertEquals(
+                       "<fieldset>\n<legend>Foo</legend>\n",
+                       Xml::fieldset( 'Foo', false ),
+                       'Opening tag with legend (false means no content and no closing tag)'
+               );
+               $this->assertEquals(
+                       "<fieldset>\n<legend>Foo</legend>\n\n</fieldset>\n",
+                       Xml::fieldset( 'Foo', '' ),
+                       'Entire element with legend but no content (empty string generates a closing tag)'
+               );
+               $this->assertEquals(
+                       "<fieldset class=\"bar\">\n<legend>Foo</legend>\nBar\n</fieldset>\n",
+                       Xml::fieldset( 'Foo', 'Bar', [ 'class' => 'bar' ] ),
+                       'Opening tag with legend and attributes'
+               );
+               $this->assertEquals(
+                       "<fieldset class=\"bar\">\n<legend>Foo</legend>\n",
+                       Xml::fieldset( 'Foo', false, [ 'class' => 'bar' ] ),
+                       'Entire element with legend and attributes'
+               );
+       }
 }
index f230197..53a4f7b 100644 (file)
@@ -7,6 +7,13 @@ class CollationFaTest extends MediaWikiTestCase {
         * against a random version of libicu
         */
 
+       public function setUp() {
+               parent::setUp();
+               if ( !extension_loaded( 'intl' ) ) {
+                       $this->markTestSkipped( "PHP extension 'intl' is not loaded, skipping." );
+               }
+       }
+
        /**
         * @dataProvider provideGetFirstLetter
         */
index 9ed8f15..d19d998 100644 (file)
@@ -53,6 +53,7 @@ class DatabaseTestHelper extends Database {
        /**
         * Returns SQL queries grouped by '; '
         * Clear the list of queries that have been done so far.
+        * @return string
         */
        public function getLastSqls() {
                $lastSqls = implode( '; ', $this->lastSqls );
index 7d9a420..b06df97 100644 (file)
@@ -271,9 +271,9 @@ class CSSMinTest extends MediaWikiTestCase {
                // data: URIs for red.gif, green.gif, circle.svg
                $red   = 'data:image/gif;base64,R0lGODlhAQABAIAAAP8AADAAACwAAAAAAQABAAACAkQBADs=';
                $green = 'data:image/gif;base64,R0lGODlhAQABAIAAAACAADAAACwAAAAAAQABAAACAkQBADs=';
-               $svg = 'data:image/svg+xml,%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A'
-                       . '%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%228%22%20height%3D'
-                       . '%228%22%3E%0A%3Ccircle%20cx%3D%224%22%20cy%3D%224%22%20r%3D%222%22%2F%3E%0A%3C%2Fsvg%3E%0A';
+               $svg = 'data:image/svg+xml,%3C%3Fxml version=%221.0%22 encoding=%22UTF-8%22%3F%3E%0A'
+                       . '%3Csvg xmlns=%22http://www.w3.org/2000/svg%22 width=%228%22 height='
+                       . '%228%22%3E%0A%09%3Ccircle cx=%224%22 cy=%224%22 r=%222%22/%3E%0A%3C/svg%3E%0A';
 
                // @codingStandardsIgnoreStart Generic.Files.LineLength
                return [
@@ -361,7 +361,7 @@ class CSSMinTest extends MediaWikiTestCase {
                        [
                                'SVG files are embedded without base64 encoding and unnecessary IE 6 and 7 fallback',
                                'foo { /* @embed */ background: url(circle.svg); }',
-                               "foo { background: url($svg); }",
+                               "foo { background: url(\"$svg\"); }",
                        ],
                        [
                                'Two regular files in one rule',
index 881ace2..c762aa7 100644 (file)
@@ -1184,11 +1184,11 @@ class WANObjectCacheTest extends PHPUnit_Framework_TestCase {
 
        public static function provideAdaptiveTTL() {
                return [
-                       [ 3600, 900, 30, .2, 720 ],
-                       [ 3600, 500, 30, .2, 500 ],
-                       [ 3600, 86400, 800, .2, 800 ],
-                       [ false, 86400, 800, .2, 800 ],
-                       [ null, 86400, 800, .2, 800 ]
+                       [ 3600, 900, 30, 0.2, 720 ],
+                       [ 3600, 500, 30, 0.2, 500 ],
+                       [ 3600, 86400, 800, 0.2, 800 ],
+                       [ false, 86400, 800, 0.2, 800 ],
+                       [ null, 86400, 800, 0.2, 800 ]
                ];
        }
 
index cb18fb3..b6ea426 100644 (file)
@@ -112,10 +112,10 @@ class TransactionProfilerTest extends PHPUnit_Framework_TestCase {
                $tp->setLogger( $logger );
                $tp->setExpectation( 'queries', 2, __METHOD__ );
 
-               $tp->recordQueryCompletion( "SQL 1", microtime( true ) - .01, false, 0 );
-               $tp->recordQueryCompletion( "SQL 2", microtime( true ) - .01, false, 0 );
-               $tp->recordQueryCompletion( "SQL 3", microtime( true ) - .01, false, 0 ); // warn
-               $tp->recordQueryCompletion( "SQL 4", microtime( true ) - .01, false, 0 ); // warn
+               $tp->recordQueryCompletion( "SQL 1", microtime( true ) - 0.01, false, 0 );
+               $tp->recordQueryCompletion( "SQL 2", microtime( true ) - 0.01, false, 0 );
+               $tp->recordQueryCompletion( "SQL 3", microtime( true ) - 0.01, false, 0 ); // warn
+               $tp->recordQueryCompletion( "SQL 4", microtime( true ) - 0.01, false, 0 ); // warn
        }
 
        public function testWriteQueryCount() {
@@ -126,16 +126,16 @@ class TransactionProfilerTest extends PHPUnit_Framework_TestCase {
                $tp->setLogger( $logger );
                $tp->setExpectation( 'writes', 2, __METHOD__ );
 
-               $tp->recordQueryCompletion( "SQL 1", microtime( true ) - .01, false, 0 );
-               $tp->recordQueryCompletion( "SQL 2", microtime( true ) - .01, false, 0 );
-               $tp->recordQueryCompletion( "SQL 3", microtime( true ) - .01, false, 0 );
-               $tp->recordQueryCompletion( "SQL 4", microtime( true ) - .01, false, 0 );
+               $tp->recordQueryCompletion( "SQL 1", microtime( true ) - 0.01, false, 0 );
+               $tp->recordQueryCompletion( "SQL 2", microtime( true ) - 0.01, false, 0 );
+               $tp->recordQueryCompletion( "SQL 3", microtime( true ) - 0.01, false, 0 );
+               $tp->recordQueryCompletion( "SQL 4", microtime( true ) - 0.01, false, 0 );
 
                $tp->transactionWritingIn( 'srv1', 'db1', '123' );
-               $tp->recordQueryCompletion( "SQL 1w", microtime( true ) - .01, true, 2 );
-               $tp->recordQueryCompletion( "SQL 2w", microtime( true ) - .01, true, 5 );
-               $tp->recordQueryCompletion( "SQL 3w", microtime( true ) - .01, true, 3 );
-               $tp->recordQueryCompletion( "SQL 4w", microtime( true ) - .01, true, 1 );
+               $tp->recordQueryCompletion( "SQL 1w", microtime( true ) - 0.01, true, 2 );
+               $tp->recordQueryCompletion( "SQL 2w", microtime( true ) - 0.01, true, 5 );
+               $tp->recordQueryCompletion( "SQL 3w", microtime( true ) - 0.01, true, 3 );
+               $tp->recordQueryCompletion( "SQL 4w", microtime( true ) - 0.01, true, 1 );
                $tp->transactionWritingOut( 'srv1', 'db1', '123', 1, 1 );
        }
 }
index b564310..456447f 100644 (file)
@@ -352,8 +352,8 @@ class DatabaseMysqlBaseTest extends PHPUnit_Framework_TestCase {
                $db->setLBInfo( 'clusterMasterHost', 'db1052' );
                $lagEst = $db->getLag();
 
-               $this->assertGreaterThan( $lag - .010, $lagEst, "Correct heatbeat lag" );
-               $this->assertLessThan( $lag + .010, $lagEst, "Correct heatbeat lag" );
+               $this->assertGreaterThan( $lag - 0.010, $lagEst, "Correct heatbeat lag" );
+               $this->assertLessThan( $lag + 0.010, $lagEst, "Correct heatbeat lag" );
        }
 
        public static function provideLagAmounts() {
diff --git a/tests/phpunit/includes/shell/CommandTest.php b/tests/phpunit/includes/shell/CommandTest.php
new file mode 100644 (file)
index 0000000..33a7f44
--- /dev/null
@@ -0,0 +1,94 @@
+<?php
+
+use MediaWiki\Shell\Command;
+
+/**
+ * @group Shell
+ */
+class CommandTest extends PHPUnit_Framework_TestCase {
+       /**
+        * @expectedException PHPUnit_Framework_Error_Notice
+        */
+       public function testDestruct() {
+               if ( defined( 'HHVM_VERSION' ) ) {
+                       $this->markTestSkipped( 'destructors are unreliable in HHVM' );
+               }
+               $command = new Command();
+               $command->params( 'true' );
+       }
+
+       private function requirePosix() {
+               if ( wfIsWindows() ) {
+                       $this->markTestSkipped( 'This test requires a POSIX environment.' );
+               }
+       }
+
+       /**
+        * @dataProvider provideExecute
+        */
+       public function testExecute( $commandInput, $expectedExitCode, $expectedOutput ) {
+               $this->requirePosix();
+
+               $command = new Command();
+               $result = $command
+                       ->params( $commandInput )
+                       ->execute();
+
+               $this->assertSame( $expectedExitCode, $result->getExitCode() );
+               $this->assertSame( $expectedOutput, $result->getStdout() );
+       }
+
+       public function provideExecute() {
+               return [
+                       'success status' => [ 'true', 0, '' ],
+                       'failure status' => [ 'false', 1, '' ],
+                       'output' => [ [ 'echo', '-n', 'x', '>', 'y' ], 0, 'x > y' ],
+               ];
+       }
+
+       public function testEnvironment() {
+               $this->requirePosix();
+
+               $command = new Command();
+               $result = $command
+                       ->params( [ 'printenv', 'FOO' ] )
+                       ->environment( [ 'FOO' => 'bar' ] )
+                       ->execute();
+               $this->assertSame( "bar\n", $result->getStdout() );
+       }
+
+       public function testOutput() {
+               global $IP;
+
+               $this->requirePosix();
+
+               $command = new Command();
+               $result = $command
+                       ->params( [ 'ls', "$IP/index.php" ] )
+                       ->execute();
+               $this->assertSame( "$IP/index.php", trim( $result->getStdout() ) );
+
+               $command = new Command();
+               $result = $command
+                       ->params( [ 'ls', 'index.php', 'no-such-file' ] )
+                       ->includeStderr()
+                       ->execute();
+               $this->assertRegExp( '/^.+no-such-file.*$/m', $result->getStdout() );
+       }
+
+       public function testT69870() {
+               $commandLine = wfIsWindows()
+                       // 333 = 331 + CRLF
+                       ? ( 'for /l %i in (1, 1, 1001) do @echo ' . str_repeat( '*', 331 ) )
+                       : 'printf "%-333333s" "*"';
+
+               // Test several times because it involves a race condition that may randomly succeed or fail
+               for ( $i = 0; $i < 10; $i++ ) {
+                       $command = new Command();
+                       $output = $command->unsafeParams( $commandLine )
+                               ->execute()
+                               ->getStdout();
+                       $this->assertEquals( 333333, strlen( $output ) );
+               }
+       }
+}
diff --git a/tests/phpunit/includes/shell/ShellTest.php b/tests/phpunit/includes/shell/ShellTest.php
new file mode 100644 (file)
index 0000000..1e91074
--- /dev/null
@@ -0,0 +1,30 @@
+<?php
+
+use MediaWiki\Shell\Shell;
+
+/**
+ * @group Shell
+ */
+class ShellTest extends PHPUnit_Framework_TestCase {
+       public function testIsDisabled() {
+               $this->assertInternalType( 'bool', Shell::isDisabled() ); // sanity
+       }
+
+       /**
+        * @dataProvider provideEscape
+        */
+       public function testEscape( $args, $expected ) {
+               if ( wfIsWindows() ) {
+                       $this->markTestSkipped( 'This test requires a POSIX environment.' );
+               }
+               $this->assertSame( $expected, call_user_func_array( [ Shell::class, 'escape' ], $args ) );
+       }
+
+       public function provideEscape() {
+               return [
+                       'simple' => [ [ 'true' ], "'true'" ],
+                       'with args' => [ [ 'convert', '-font', 'font name' ], "'convert' '-font' 'font name'" ],
+                       'array' => [ [ [ 'convert', '-font', 'font name' ] ], "'convert' '-font' 'font name'" ],
+               ];
+       }
+}
index 2f7b767..e7cfca7 100644 (file)
@@ -15,7 +15,7 @@ class SpecialPageExecutor {
         * @param User|null $user The user which should be used in the context of this special page
         *
         * @throws Exception
-        * @return array( string, WebResponse ) A two-elements array containing the HTML output
+        * @return array [ string, WebResponse ] A two-elements array containing the HTML output
         * generated by the special page as well as the response object.
         */
        public function executeSpecialPage(
index 2f091d5..930bbe4 100644 (file)
@@ -51,7 +51,7 @@ abstract class SpecialPageTestBase extends MediaWikiTestCase {
         * @param User|null $user The user which should be used in the context of this special page
         *
         * @throws Exception
-        * @return array( string, WebResponse ) A two-elements array containing the HTML output
+        * @return array [ string, WebResponse ] A two-elements array containing the HTML output
         * generated by the special page as well as the response object.
         */
        protected function executeSpecialPage(
index d712254..6b9b782 100644 (file)
@@ -34,6 +34,7 @@ class DummyContentHandlerForTesting extends ContentHandler {
 
        /**
         * Creates an empty Content object of the type supported by this ContentHandler.
+        * @return DummyContentForTesting
         */
        public function makeEmptyContent() {
                return new DummyContentForTesting( '' );
index 098181d..9d91d4a 100644 (file)
@@ -34,6 +34,7 @@ class DummyNonTextContentHandler extends DummyContentHandlerForTesting {
 
        /**
         * Creates an empty Content object of the type supported by this ContentHandler.
+        * @return DummyNonTextContent
         */
        public function makeEmptyContent() {
                return new DummyNonTextContent( '' );
index 047c03a..ef1caa5 100644 (file)
@@ -41,6 +41,7 @@ class MockFSFile extends FSFile {
        /**
         * August 22 – The theft of the Mona Lisa is discovered in the Louvre."
         * T22281
+        * @return int
         */
        public function getSize() {
                return 1911;
index d817104..7203777 100755 (executable)
@@ -137,6 +137,15 @@ class PHPUnitMaintClass extends Maintenance {
                return Maintenance::DB_ADMIN;
        }
 
+       protected function addOption( $name, $description, $required = false,
+               $withArg = false, $shortName = false, $multiOccurrence = false
+       ) {
+               // ignore --quiet which does not really make sense for unit tests
+               if ( $name !== 'quiet' ) {
+                       parent::addOption( $name, $description, $required, $withArg, $shortName, $multiOccurrence );
+               }
+       }
+
        /**
         * Force the format of elements in $_SERVER['argv']
         *  - Split args such as "wiki=enwiki" into two separate arg elements "wiki" and "enwiki"
index 4ea1090..07b18f5 100644 (file)
@@ -155,6 +155,6 @@ class ParserTestTopLevelSuite extends PHPUnit_Framework_TestSuite {
         * @param string $msg Message to log
         */
        protected static function debug( $msg ) {
-               return wfDebugLog( 'tests-parser', wfGetCaller() . ' ' . $msg );
+               wfDebugLog( 'tests-parser', wfGetCaller() . ' ' . $msg );
        }
 }
index b965079..5ce61ea 100644 (file)
@@ -1,7 +1,7 @@
 ( function ( mw, $ ) {
        'use strict';
 
-       var grammarTests;
+       var grammarTests, bcp47Tests;
 
        QUnit.module( 'mediawiki.language', QUnit.newMwEnvironment( {
                setup: function () {
                assert.equal( mw.language.listToText( [ 'a', 'b' ] ), 'a and b', 'Two items' );
                assert.equal( mw.language.listToText( [ 'a', 'b', 'c' ] ), 'a, b and c', 'More than two items' );
        } );
+
+       bcp47Tests = [
+               // Extracted from BCP 47 (list not exhaustive)
+               // # 2.1.1
+               [ 'en-ca-x-ca', 'en-CA-x-ca' ],
+               [ 'sgn-be-fr', 'sgn-BE-FR' ],
+               [ 'az-latn-x-latn', 'az-Latn-x-latn' ],
+               // # 2.2
+               [ 'sr-Latn-RS', 'sr-Latn-RS' ],
+               [ 'az-arab-ir', 'az-Arab-IR' ],
+
+               // # 2.2.5
+               [ 'sl-nedis', 'sl-nedis' ],
+               [ 'de-ch-1996', 'de-CH-1996' ],
+
+               // # 2.2.6
+               [
+                       'en-latn-gb-boont-r-extended-sequence-x-private',
+                       'en-Latn-GB-boont-r-extended-sequence-x-private'
+               ],
+
+               // Examples from BCP 47 Appendix A
+               // # Simple language subtag:
+               [ 'DE', 'de' ],
+               [ 'fR', 'fr' ],
+               [ 'ja', 'ja' ],
+
+               // # Language subtag plus script subtag:
+               [ 'zh-hans', 'zh-Hans' ],
+               [ 'sr-cyrl', 'sr-Cyrl' ],
+               [ 'sr-latn', 'sr-Latn' ],
+
+               // # Extended language subtags and their primary language subtag
+               // # counterparts:
+               [ 'zh-cmn-hans-cn', 'zh-cmn-Hans-CN' ],
+               [ 'cmn-hans-cn', 'cmn-Hans-CN' ],
+               [ 'zh-yue-hk', 'zh-yue-HK' ],
+               [ 'yue-hk', 'yue-HK' ],
+
+               // # Language-Script-Region:
+               [ 'zh-hans-cn', 'zh-Hans-CN' ],
+               [ 'sr-latn-RS', 'sr-Latn-RS' ],
+
+               // # Language-Variant:
+               [ 'sl-rozaj', 'sl-rozaj' ],
+               [ 'sl-rozaj-biske', 'sl-rozaj-biske' ],
+               [ 'sl-nedis', 'sl-nedis' ],
+
+               // # Language-Region-Variant:
+               [ 'de-ch-1901', 'de-CH-1901' ],
+               [ 'sl-it-nedis', 'sl-IT-nedis' ],
+
+               // # Language-Script-Region-Variant:
+               [ 'hy-latn-it-arevela', 'hy-Latn-IT-arevela' ],
+
+               // # Language-Region:
+               [ 'de-de', 'de-DE' ],
+               [ 'en-us', 'en-US' ],
+               [ 'es-419', 'es-419' ],
+
+               // # Private use subtags:
+               [ 'de-ch-x-phonebk', 'de-CH-x-phonebk' ],
+               [ 'az-arab-x-aze-derbend', 'az-Arab-x-aze-derbend' ],
+               /**
+                * Previous test does not reflect the BCP 47 which states:
+                *  az-Arab-x-AZE-derbend
+                * AZE being private, it should be lower case, hence the test above
+                * should probably be:
+                * [ 'az-arab-x-aze-derbend', 'az-Arab-x-AZE-derbend' ],
+                */
+
+               // # Private use registry values:
+               [ 'x-whatever', 'x-whatever' ],
+               [ 'qaa-qaaa-qm-x-southern', 'qaa-Qaaa-QM-x-southern' ],
+               [ 'de-qaaa', 'de-Qaaa' ],
+               [ 'sr-latn-qm', 'sr-Latn-QM' ],
+               [ 'sr-qaaa-rs', 'sr-Qaaa-RS' ],
+
+               // # Tags that use extensions
+               [ 'en-us-u-islamcal', 'en-US-u-islamcal' ],
+               [ 'zh-cn-a-myext-x-private', 'zh-CN-a-myext-x-private' ],
+               [ 'en-a-myext-b-another', 'en-a-myext-b-another' ]
+
+               // # Invalid:
+               // de-419-DE
+               // a-DE
+               // ar-a-aaa-b-bbb-a-ccc
+       ];
+
+       QUnit.test( 'mw.language.bcp47', function ( assert ) {
+               bcp47Tests.forEach( function ( data ) {
+                       var input = data[ 0 ],
+                               expected = data[ 1 ];
+                       assert.equal( mw.language.bcp47( input ), expected );
+               } );
+       } );
 }( mediaWiki, jQuery ) );
index 985ff92..64415e0 100644 (file)
                } );
        } );
 
+       QUnit.test( 'Implicit dependencies', function ( assert ) {
+               var ranUser = false,
+                       userSeesSite = false,
+                       ranSite = false;
+
+               mw.loader.implement(
+                       'site',
+                       function () {
+                               ranSite = true;
+                       }
+               );
+               mw.loader.implement(
+                       'user',
+                       function () {
+                               userSeesSite = ranSite;
+                               ranUser = true;
+                       }
+               );
+
+               assert.strictEqual( ranSite, false, 'verify site module not yet loaded' );
+               assert.strictEqual( ranUser, false, 'verify user module not yet loaded' );
+               return mw.loader.using( 'user', function () {
+                       assert.strictEqual( ranSite, true, 'ran site module' );
+                       assert.strictEqual( ranUser, true, 'ran user module' );
+                       assert.strictEqual( userSeesSite, true, 'ran site before user module' );
+
+                       // Reset
+                       mw.loader.moduleRegistry[ 'site' ].state = 'registered';
+                       mw.loader.moduleRegistry[ 'user' ].state = 'registered';
+               } );
+       } );
+
 }( mediaWiki, jQuery ) );
index 2efe9cd..bb27626 100644 (file)
                // Test cases are kept in sync with SanitizerTest.php
                var text = 'foo тест_#%!\'()[]:<>',
                        legacyEncoded = 'foo_.D1.82.D0.B5.D1.81.D1.82_.23.25.21.27.28.29.5B.5D:.3C.3E',
-                       html5Escaped = 'foo_%D1%82%D0%B5%D1%81%D1%82_%23%25!\'()%5B%5D:%3C%3E',
+                       html5Encoded = 'foo_тест_#%!\'()[]:<>',
                        html5Experimental = 'foo_тест_!_()[]:<>',
                        // Settings: this is wgFragmentMode
                        legacy = [ 'legacy' ],
                        // Transition to a new world: legacy links with HTML5 fallback
                        [ legacyNew, text, legacyEncoded ],
                        // New world: HTML5 links, legacy fallbacks
-                       [ newLegacy, text, html5Escaped ],
+                       [ newLegacy, text, html5Encoded ],
                        // Distant future: no legacy fallbacks
-                       [ allNew, text, html5Escaped ],
+                       [ allNew, text, html5Encoded ],
                        // Someone flipped wgExperimentalHtmlIds on
                        [ experimentalLegacy, text, html5Experimental ],
                        // Migration from wgExperimentalHtmlIds to modern HTML5
-                       [ newExperimental, text, html5Escaped ]
+                       [ newExperimental, text, html5Encoded ]
                ], function ( index, testCase ) {
                        mw.config.set( 'wgFragmentMode', testCase[ 0 ] );